python使用RabbitMq

监听端

# -*- coding: utf-8 -*-

import pika
import time


class RabbitMqServer(object):
    def __init__(self, username, password, server_ip, port, queuename):
        user_pwd = pika.PlainCredentials(username, password)
        self.conn = pika.BlockingConnection(
            pika.ConnectionParameters(host=server_ip, port=port, credentials=user_pwd))  # 创建连接
        self.channel = self.conn.channel()

        self.queuename = queuename
        # 该队列里的数据支持持久化
        self.channel.queue_declare(queue=queuename, durable=True)

    def send(self, message):
        """
        发送消息
        :param message: 消息
        :return:
        """
        # 发布消息到该队列里
        self.channel.basic_publish(exchange='',
                                   routing_key=self.queuename,  # 写明将消息发送给队列queuename
                                   body=message,  # 要发送的消息
                                   properties=pika.BasicProperties(delivery_mode=2, )
                                   # 设置消息持久化,将要发送的消息的属性标记为2,表示该消息要持久化
                                   )
        self.conn.close()

    def run(self, func):
        """
        监听服务
        :param func: 要回调的方法名
        """
        self.channel.basic_qos(prefetch_count=1)
        # auto_ack默认为False,在调用callback函数时,未收到确认标识,消息会重回队列
        self.channel.basic_consume(queue=self.queuename, on_message_callback=func)
        # 开始消费,并且保持监听的状态
        self.channel.start_consuming()

    def callback(self, ch, method, properties, body):
        """回调函数,消费队列里的消息"""
        try:
            print(properties.reply_to)
            print(properties.delivery_mode)
            print(" [消费者] Received %r" % body)
            time.sleep(1)
            print(" [消费者] Done")
        except Exception as e:
            print(e)
        finally:
            # 接收到消息后会给rabbitmq发送一个确认
            ch.basic_ack(delivery_tag=method.delivery_tag)


if __name__ == '__main__':
    import json

    username = "guest"
    password = "guest"
    severip = "127.0.0.1"
    port = 5672
    rmq_server = RabbitMqServer(username, password, severip, port, "test3")

    # 消费队列里的消息,并且保持监听状态
    rmq_server.run(rmq_server.callback)

发送消息

# -*- coding: utf-8 -*-

import json

from testFunc.test_func.RabbitmqServer import RabbitMqServer

username = "guest"
password = "guest"
severip = "127.0.0.1"
port = 5672
rmq_server = RabbitMqServer(username, password, severip, port, "test3")

data = {"code": 6}
# 向队列里发送消息
rmq_server.send(json.dumps(data))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值