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