rabbitmq 消息发送回调
时间: 2023-07-09 07:47:05 浏览: 155
在 RabbitMQ 中,生产者(消息发送方)可以通过设置 Confirm 模式来实现消息发送回调。
Confirm 模式是 RabbitMQ 提供的一种消息确认机制,它可以让生产者确认消息是否被成功发送到 Broker 中,并且可以通过回调函数来处理发送结果。具体实现过程如下:
1. 开启 Confirm 模式:在生产者客户端连接 RabbitMQ 时,通过设置 channel.confirm_select() 方法开启 Confirm 模式。
2. 发送消息:在发送消息时,可以通过 channel.basic_publish() 方法设置 mandatory 参数为 True,表示如果消息无法路由到队列中,Broker 会将消息返回给生产者。
3. 处理 Confirm 回调:在开启 Confirm 模式后,可以通过 channel.add_confirm_listener() 方法添加 Confirm 回调函数,该函数会在消息被 Broker 确认接收后被调用,可以处理发送结果,例如记录日志或重发消息等操作。
下面是一个使用 Confirm 模式的例子:
```python
import pika
def on_confirm_delivery(frame):
if frame.method.NAME == 'Basic.Ack':
print('Message confirmed and delivered to broker')
elif frame.method.NAME == 'Basic.Nack':
print('Message confirmed but not delivered to broker')
elif frame.method.NAME == 'Basic.Return':
print('Message not confirmed and returned by broker')
def main():
# 连接 RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# 开启 Confirm 模式
channel.confirm_select()
# 添加 Confirm 回调函数
channel.add_confirm_listener(on_confirm_delivery)
# 发送消息
channel.basic_publish(exchange='my_exchange', routing_key='my_routing_key', body='Hello, RabbitMQ!', mandatory=True)
# 关闭连接
connection.close()
if __name__ == '__main__':
main()
```
在上面的例子中,我们定义了一个 on_confirm_delivery 回调函数,用于处理消息发送结果。在发送消息时,我们设置了 mandatory 参数为 True,表示如果消息无法路由到队列中,Broker 会将消息返回给生产者。最后,我们添加了 Confirm 回调函数,并通过 channel.basic_publish() 方法发送了一条消息。当 Broker 确认接收到消息后,on_confirm_delivery 回调函数会被调用,可以根据不同的确认类型处理发送结果。
希望这个回答能够帮到您!
阅读全文