首页 > 编程语言 >Python操作RabbitMq

Python操作RabbitMq

时间:2023-06-28 12:01:54浏览次数:59  
标签:delivery Python RabbitMq queue 队列 key 操作 data channel

Python操作RabbitMq:pika--队列)

安装

pip install pika

使用

import pika
# 建立连接
# user:账号	pwd:密码
userx = pika.PlainCredentials(user, pwd)
# hosh:rabbitmq所在的ip	port: 端口号
parameters = pika.ConnectionParameters(host, int(port), '/', credentials=userx)
conn = pika.BlockingConnection(parameters)
# 开辟管道
channel = conn.channel()
# 声明队列,不存在则创建,存在则连接
# queue:队列名		durable:是否持久化
queue_declare = channel.queue_declare(queue=key, durable=True)
# prefetch_count: 通道的最大容量
channel.basic_qos(prefetch_count=prefetch_count)

# 存储(生产者)
# 发送数据,发送一条,如果要发送多条则复制此段
channel.basic_publish(
exchange='', # 这是发布才需的参数,不用管(发布、订阅模式)
routing_key=key, # 队列名
body=data.encode(), # 需要存储的数据
properties=pika.BasicProperties(
delivery_mode=2, # 实现消息永久保存
)
)

# 读取(消费者)
# 会持续监听
# 准备接收
channel.basic_consume(
on_message_callback=fun, # 回调的函数对象
queue=key # 队列名
)
# 开始接收(将数据放入回调函数开始执行)
self.channel.start_consuming()

# 回调函数
def fun(x1, x2, x3, data):
print(x1)
print(x2)
print(x3)
print(data)

其他读取方法

# 查看声明时队列中剩余的数据个数(如需查看最新的需重新声明)
queue_declare.method.message_coun
# 获取一个可迭代对象
# key:队列名
ret = channel.consume(key)
# 获取队列中的一条数据,得到的是个元组(如果队列为空则会阻塞,持续等待数据)
data = next(ret)
# 本次请求编号
delivery_tag = data[0].delivery_tag
# 获取到的数据
text = data[-1].decode()
# 通知本条消息已经确实收到了,队列会将该条数据删除(该方法不会自动通知,因此需要手动操作)
channel.basic_ack(delivery_tag)

# 此方法与上方的类似,但是更加直接且可以查看队列中剩余的个数
# 获取队列中的一条数据,得到的是个元组(如果队列为空则返回(None, None, None))
# key:队列名
data_obj = channel.basic_get(queue=key)
# 本次请求编号
delivery_tag = data_obj[0].delivery_tag
# 本次获取完毕剩余的个数(不包含本条)
count = data_obj[0].message_count
# 获得的数据
text = data_obj[-1].decode()
# 提交本次响应结果
channel.basic_ack(delivery_tag)

标签:delivery,Python,RabbitMq,queue,队列,key,操作,data,channel
From: https://www.cnblogs.com/clark1990/p/17511032.html

相关文章

  • 【操作系统-内存】地址翻译流程图
    简略版:stateDiagram-v2stateif_state<>CPU产生VA-->访问TLB访问TLB-->转VA并访问Cache:命中访问TLB-->访问页表:缺失访问页表-->转VA并访问Cache:命中访问页表-->缺页处理:缺失缺页处理-->访问TLB:重新执行转VA并访问Cache-->读取Cache数据:命中......
  • 命令操作
    2.setsadd是将一个或者多个成员元素放到集合中不能重复smembers返回查询所有的集合成员sismember是可以判断是否为集合成员返回0/1scard是可以获取集合中的元素#sremkeyvalue可以移除一个或者多个集合元素srandmemberkey返回一个随机的元素#spopkey可以移除一......
  • U8备份账套恢复为不同账套号,进行删除操作数据时提示:当前对应的账套不存在处理方法
    现象:U8备份账套恢复为不同账套号,进行删除操作数据时提示:当前对应的账套不存在 处理方法:该账套的原始账套存在协同,我们在协同中添加一个账套协同即可解决,使用完成后可以删除 ......
  • java调用python
    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassDemo1{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubProcessproc;try{proc=Runti......
  • [重要] python 之 print() 函数高级用法
    python之print()函数高级用法━━━━━━━━━━━━━━━━━━━━━━语法:print(value,...,sep='',end='\n',file=sys.stdout,flush=False)这是Python的内置函数print()的语法格式,其作用是将一个或多个对象打印到控制台或文件中。参数说明:value:要打印的对象,可以是一......
  • 谷粒商城项目篇12_分布式高级篇_购物车功能、消息队列RabbitMQ
    目录购物车模块vo的编写编写interceptor绑定user-key线程共享数据购物车商品的增加添加完成重定向避免刷新页面重复提交购物车商品的增删改查消息队列RabbitMQ场景理解概述docker安装RabbitMQ整合SpringBoot消息确认机制一、购物车模块需求描述在线购物车:登录状态添......
  • 【Python&RS】基于GDAL的遥感影像压缩
    ​        最近在处理一些高空间分辨率的卫星数据,数据量非常大。一个图幅都几十个G,ENVI表示压力太大了根本跑不动。所以研究了一下影像压缩的方式,在ArcGIS导出的压缩方式有很多限制,而且压缩并不是很明显。        所以我尝试使用GDAL库对影像进行压缩,速度还可......
  • python指定大小文件生成
    使用特定大小的随机数生成,使用随机数生成器生成特定大小的字节,并将其写入文件中importosdefgenerate_file(file_path,file_size_bytes):withopen(file_path,'wb')asfile:file.write(os.urandom(file_size_bytes))if__name__=='__main__':#生......
  • 【重要】Python:else的4种用法
    Python:else的4种用法━━━━━━━━━━━━━━━━━━━━━━━━━简介:与其他编程语言略有不同,python中,else除了常规的和if配合使用外,还有3种组合使用的场景。else使用场景:1、if-else2、for-else3、while-else4、try-except-else1、if-else:━━━━......
  • Python全栈工程师(23:消息队列RabbitMQ)
    谁能用通俗的语言解释一下什么是RPC框架?深入浅出RPC-浅出篇深入浅出RPC-深入篇1小时写一个分布式系统基础框架(一个java实现帮助理解RPC)RabbitMQ消息队列安装 http://www.rabbitmq.com/install-standalone-mac.html安装pythonrabbitMQmodulepipinstallpikaoreasy_......