RabbitMQ学习笔记(4)---一对一发送与接收消息

发送消息

send.py

#coding:utf-8
# 引入pika库
import pika
#创建发送消息的类
class Message_Producer():
    def __init__(self,ip):
        '''        初始化发送生产消息类
        :param ip: rabbitmq所在服务器
        '''
        self.ip = ip
        # 创建连接
        self.connection = pika.BlockingConnection(pika.ConnectionParameters(self.ip))
        #创建通道
        self.channel = self.__make_channel()
    def __make_channel(self):
        '''
        创建通道
        :return:返回通道实例
        ''' 
       __channel = self.connection.channel()
       return __channel
    def make_queue(self,queue_name):
        '''
        创建队列
        :param queue_name: 需要创建的队列名称
        '''
        self.channel.queue_declare(queue=queue_name)
    def send_message(self,queue_name,message,exchange=''):
        '''
        发送消息
        :param queue_name: 指定发送的队列
        :param message: 需要发送的消息
        :param exchange: 交换机
        '''
        self.channel.basic_publish(exchange=exchange,     
                                  routing_key=queue_name,#指定队列的名称                              
                                  body=message#消息内容                              )
        print(" [x] Sent %s"%message)
            
    def close_connection(self):
        '''
        关闭连接
        '''
        self.connection.close()
if __name__ == '__main__':
    # 实例化生产消息类
    message_producer = Message_Producer(ip='192.168.1.113')
    # 创建队列    
    message_producer.make_queue(queue_name='queue1')
    # 发送消息    
    message_producer.send_message(queue_name='name1',message='hello,i am name1')
    # 关闭连接
    message_producer.close_connection()

接收消息

receive.py

#coding:utf-8
# 引入pika库
import pika
#创建消费消息的类
class Message_Consumer():
    def __init__(self,ip):
        '''
        初始化消费消息类
        :param ip: rabbitmq所在服务器
        '''
        self.ip = ip
        # 创建连接
        self.connection = pika.BlockingConnection(pika.ConnectionParameters(self.ip))
        #创建通道
        self.channel = self.__make_channel()
    def __make_channel(self):
        '''
        创建通道
        :return:返回通道实例
        '''
        __channel = self.connection.channel()
        return __channel
    def receive(self,queue_name):
        #接收到消息后的回调函数
        def callback(ch, method, properties, body):
            print " [x] Received %r" % (body,)
        #指定接收消息的队列,并执行回调函数
        self.channel.basic_consume(callback, queue=queue_name, no_ack=True)
        print ' [*] Waiting for messages. To exit press CTRL+C'
        #开始接收信息,并进入阻塞状态,队列里有信息才会调用callback进行处理。按ctrl+c退出。
        self.channel.start_consuming()
    def close_connection(self):
        '''
        关闭连接
        ''' 
       self.connection.close()
if __name__ == '__main__':
    message_consumer = Message_Consumer('192.168.1.106')
    message_consumer.receive('name1')

使用过程

1.打开一个命令行窗口,进入到send.py目录,执行命令

python send.py

可以看到此时消息已经被发送出去了



2.查看队列是否增加了一个消息


3.再打开一个cmd窗口,进入到receive.py目录,执行命名

python receive.py

此时消息已被接收


4.查看队列的消息是否减少了


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,534评论 19 139
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,298评论 22 257
  • 来源 RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。支持消息的持久化、事务、拥塞控...
    jiangmo阅读 13,514评论 2 34
  • rabbitMQ是一款基于AMQP协议的消息中间件,它能够在应用之间提供可靠的消息传输。在易用性,扩展性,高可用性...
    点融黑帮阅读 8,155评论 3 41
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,948评论 9 468