python使用mq_http_sdk实现阿里云RockerMQ的数据消费及生产

1、安装mq_http_sdk

pip install mq_http_sdk

2、前期准备

2.1 http协议地址

在这里插入图片描述

2.2 实例id

在这里插入图片描述

2.3 topic

在这里插入图片描述

2.4 group

在这里插入图片描述

2.5 AccessKey ID 和 AccessKey Secret

  • 此项在阿里云个人中查看

RocketMQ HTTP协议代码实现

  • RocketMQ 初始化信息
from mq_http_sdk.mq_client import *
from mq_http_sdk.mq_producer import *
from mq_http_sdk.mq_exception import MQExceptionBase


class RocketMq(object):

    def __init__(self):
        self.host = '${HTTP_ENDPOINT}'    # 2.1  http协议地址
        self.topic = '${TOPIC}'    # 2.3 topic
        self.group = '${GROUP}'     # 2.4 group
        self.accessKey = '${ACCESSKEY}'
        self.secretKey = '${SECRETKEY}'
        self.instance_id = '${INSTANCE_ID}'  # 2.2实例ID,默认实例为空None
        self.client = MQClient(self.host, self.accessKey, self.secretKey)
  • Produce 生产
    def producer_(self, timing=False, times=None):
        """
        生产者
        :param timing: True,False
        :param times: 单位ms  毫秒级绝对时间   int(round(time.time() * 1000)) + 5 * 1000
        :return:
        """
        print('=======start===')
        producer = self.client.get_producer(self.instance_id, self.topic)
        msg = TopicMessage('{"key": "value"}')
        msg.set_message_key(self.accessKey)
        # 是否为定时消息
        if timing:
            msg.set_start_deliver_time(times)    # 设置定时时间 ms级绝对时间
        print(msg)
        re_msg = producer.publish_message(msg)
        print("Publish Message Succeed. MessageID:%s, BodyMD5:%s" % (re_msg.message_id, re_msg.message_body_md5))
  • Consumer 消费者
    def consumer_(self):
        consumer = self.client.get_consumer(self.instance_id, self.topic, self.group)
        while True:
            try:
                wait_seconds = 3  # 长轮询时间3秒(最多可设置为30秒)
                batch = 3  # 一次最多消费3条(最多可设置为16条)
                for msg in consumer.consume_message(batch, wait_seconds):
                    print(("Receive, MessageId: %s\nMessageBodyMD5: %s \
                                                  \nMessageTag: %s\nConsumedTimes: %s \
                                                  \nPublishTime: %s\nBody: %s \
                                                  \nNextConsumeTime: %s \
                                                  \nReceiptHandle: %s \
                                                  \nProperties: %s\n" % (msg.message_id, msg.message_body_md5,
                                                                         msg.message_tag, msg.consumed_times,
                                                                         msg.publish_time, msg.message_body,
                                                                         msg.next_consume_time, msg.receipt_handle,
                                                                         msg.properties)))
                    # todo 业务处理
                    consumer.ack_message([msg.receipt_handle])
            except MQExceptionBase as e:
                if e.type == "MessageNotExist":
                    print(("No new message! RequestId: %s" % e.req_id))
                    continue
                print(("Consume Message Fail! Exception:%s\n" % e))
                time.sleep(2)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值