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.查看队列的消息是否减少了


你可能感兴趣的:(RabbitMQ学习笔记(4)---一对一发送与接收消息)