rabbitMQ在python中的使用
(1)实现简单的生产者和消费者模型
生产者:当启动publishs的时候,生产者则会创建一个连接,申明一个管道去定义一个queue,queue定义的名字是task_mess,然后在这个queue中发送body消息,等待着消费者接收该管道里面queue=task-mess队列里面的消息。
import pika
#socket连接
connection = pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
#申明一个管道
channel = connection.channel()
#给管道里面申明一个queue
channel.queue_declare(queue='task_mess')
#通过管道发送消息
channel.basic_publish(exchange='',
routing_key='task_mess',
body='Hello World!2222222')
print("消息以及发送到subscribe端")
connection.close()
消费者:当启动subscribe的时候,消费者则会创建一个连接,申明一个管道去定义一个queue,queue定义的名字是task_mess,然后在这个queue中等待生产者发送的消息,当消息接收到就会调用callback函数,执行里面的处理。
import pika
#socket连接
connection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
#申明一个管道
channel = connection.channel()
#给管道里面申明一个queue
channel.queue_declare("task_mess")
def callback(ch,method,properties,body):
#ch 是申明的管道的内存地址
#method 吧消息发给谁的处理信息
#properties序列化
#body publish端发来的信息
print("subscribe端已经接收到消息正在处理~~~",body)
print("%s:ch,%s:method,%s:properties"%(ch,method,properties))
#管道接收消息
channel.basic_consume("task_mess",callback)
channel.start_consuming()
(2)RabbitMQ消息是通过轮询的方式分发任务的
当有一个生产者(publish)和多个消费者(subscribe,subscribe1,subscribe2)的时候(一对多),生产者的执行顺序就是按照先开启先接收的原则,直到所有的消费者都分配到消息的时候,重新从第一个执行的消费者开始继续接收消息。(当我启动消费者的顺序是subscribe,subscribe1,subscribe2当publish来消息的时候,subscribe先接收任务,然后subscribe1接收任务,最后是subscribe2接收任务,直到所有的消费者都执行过任务,在从新回到subscribe开始接收)
模拟的场景是,先分别开启subscribe,subscribe1ÿ