Python 将接收到的rabbitmq消息放置到队列中,但是请问当有多个队列rabbitmq消息时,应该怎么办呢?代码实现
时间: 2023-11-28 11:50:10 浏览: 28
当有多个队列的时候,我们需要创建多个消费者,一个消费者对应一个队列。以下是一个示例代码,它创建了两个队列,并且分别对应了两个消费者:
```python
import pika
import threading
# 创建连接和channel
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# 创建队列
channel.queue_declare(queue='queue1')
channel.queue_declare(queue='queue2')
# 定义回调函数
def callback(ch, method, properties, body):
print("Received message: %r" % body)
# 创建消费者1
def consumer1():
channel.basic_consume(queue='queue1', on_message_callback=callback, auto_ack=True)
channel.start_consuming()
# 创建消费者2
def consumer2():
channel.basic_consume(queue='queue2', on_message_callback=callback, auto_ack=True)
channel.start_consuming()
# 启动线程
threading.Thread(target=consumer1).start()
threading.Thread(target=consumer2).start()
```
在这个示例中,我们创建了两个队列 `queue1` 和 `queue2`,并分别对应了两个消费者 `consumer1` 和 `consumer2`。在 `consumer1` 中,我们消费了 `queue1` 中的消息,在 `consumer2` 中,我们消费了 `queue2` 中的消息。我们为每个消费者启动了一个新的线程,这样它们可以同时运行,而不会相互影响。
当有消息到达队列时,`callback` 函数会被调用,我们可以在这里对消息做进一步的处理。在这个示例中,我们只是简单地打印了消息的内容。
注意,这个示例中使用了 `auto_ack=True`,这表示在消费者成功处理完消息后,自动确认消息已经被处理。在实际应用中,你可能需要更加精细地控制消息的确认和处理流程。