学习rabbitmq个人感觉看官方文档就完全可以学会,网上找的那些案例都不够全面,或者是操作步骤不是很清楚导致操作出现差错!
官网地址:https://www.rabbitmq.com/
在这里简单记录下学习过程,文档中最初介绍的是生产者-消费者模式:
生产者:product
import pika,sys,time
auth = pika.PlainCredentials('guest', 'guest')
connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1', 5672, '/', auth))
channel = connection.channel()
channel.queue_declare(queue='hello') # 最初定义的队列,不持久
channel.queue_declare(queue='task_queue', durable=True) # 重新再定义一个队列,使队列持久化
for i in range(10):
message = "send {} message".format(i)
channel.basic_publish(
exchange='',
routing_key='task_queue',
body=message,
properties=pika.BasicProperties(
delivery_mode=2, # 保证消息持久性
))
print("[X] sent %r" %message)
connection.close()
注意:上面的来个那种第一队列方式简易选区第二种,同时后面的消息也要设置成持久化,同理如果队列不设置持久化那么消息也没必要持久化
消费者:consume
import pika, time
# from api.product import product
# def receive():
auth = pika.PlainCredentials('guest', 'guest')
connection = pika.BlockingConnection(pika.ConnectionParameters(
'127.0.0.1', 5672, '/', auth
))
channel = connection.channel()
channel.queue_declare(queue='hello') # 创建一个普通队列
channel.queue_declare(queue='task_queue', durable=True) # 创建一个持久化队列
def callback(ch, method, properties, body): # 回调函数
print(" [x] Received %r" % body)
time.sleep(3)
print("[X] Done")
ch.basic_ack(delivery_tag = method.delivery_tag) # 保证消息不会一致累加
channel.basic_consume(
'hello',
callback,
auto_ack=True)
channel.basic_qos(prefetch_count=1) # 公平分发。再一个工人彻底完成之后再分发
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming() # 开始监听 接受消息
注释: 1、在接收端完成定义队列之前都是跟生产者一样的操作,
2、回调函数中的最后一行要加上不然消息回一直叠加
channel.basic_consume函数中的前两个参数要注意位置,我现在用的是python3参数位置跟网上其他人的不一样,而且第三个参数也变了,建议使用之前产看下该函数源码。
3、公平分发建议加上
4、最后的监听一定要加上,不然不会监听,也不会有任何的输出
网上有那种同时跑两个的接收者,然后1-10按照奇偶输出,一直没搞明白怎么跑,看了文档才明白先跑两个接收者,再跑生产者。类似于下面这种

基础学习暂时到这里,今天开始学习发布订阅模式。
说明一下现在写的这个模式对比发布/订阅,后者是通过交换机进行信息分发

本文详细介绍了通过官方文档学习RabbitMQ的过程,包括生产者-消费者模式的实现,重点讲解了队列和消息的持久化配置,以及如何正确设置消费者以避免消息累积,最后提到了发布订阅模式的学习方向。

1903

被折叠的 条评论
为什么被折叠?



