python实现的消息队列RocketMQ客户端使用

rocketmq-python 是一个基于 rocketmq-client-cpp 封装的 RocketMQ Python 客户端。

一、Producer

#coding:utf-8
import
json from rocketmq.client import Producer, Message producer = Producer('PID-001') # 实例化Producer对象,指定group-id(可任意取名) producer.set_namesrv_addr('xxxxxx:xx') # rocketmq队列接口地址(服务器ip:port) producer.start() # 开启 # 实例化消息对象,需要指定应用名:topic_name msg = Message('your_topic_name') # 实例化消息对象时,传入topic名称,一个应用尽可能用一个Topic # 指定消息的keys msg.set_keys('your_keys') # 业务层面的唯一标识码,方便将来定位消息丢失问题。服务器会为每个消息创建索引(哈希索引),应用可以通过topic,key来查询这条消息内容,以及消息被谁消费。 # 指定消息tags msg.set_tags('your_tags') # 消息子类型用tags来标识,tags可以由应用自由设置。 #指定消息体(内容) msg_body = {'name':'laowang','age':28} body = json.dumps(msg_body).encode('utf-8') msg.set_body(body) # 传入消息体(json字节串) # 向队列发送消息 ret = producer.send_sync(msg) print(f'status:{ret.status}') # 0表示OK print(f'msg_id:{ret.msg_id}') # 消息id,同消费者获取到的消息id print(f'offset:{ret.offset}') # 偏移量,默认从0开始,1,2。。。 producer.shutdown() # 关闭

二、PullConsumer

# coding:utf-8

from rocketmq.client import  PullConsumer

consumer = PullConsumer('CID-001') # 指定group-id
consumer.set_namesrv_addr('xxxxxx:xx') # rocketmq队列接口地址(服务器ip:port)
consumer.start() # 开启

# 可重复性消费
# 指定topic-name
for msg in consumer.pull('your_topic_name'):
    print(f'id:{msg.id}') # 消息id
    print(f'topic:{msg.topic}') # 消息topic_name
    print(f'tags:{msg.tags}') # 消息tags
    print(f'keys:{msg.keys}') # 消息Keys
    print(f'body:{msg.body}') # 消息体
    print('-'*25+'分隔符'+'-'*25)
    
consumer.shutdown() # 关闭

三、PushConsumer

# coding:utf-8
import time

from rocketmq.client import PushConsumer

# 回调函数,参数是消息对象
def callback(msg):
    print(msg.id, msg.body)


consumer = PushConsumer('CID_XXX') # 指定group-id
consumer.set_namesrv_addr('127.0.0.1:9887') # rocketmq队列接口地址(服务器ip:port)
consumer.subscribe('Your_topic', callback) # 订阅
consumer.start() # 开启

while True:
    time.sleep(3600)

consumer.shutdown() # 关闭

 

posted @ 2021-12-16 16:05  eliwang  阅读(4441)  评论(0编辑  收藏  举报