8

您如何确保使用Pika传递消息?默认情况下,如果消息未成功传递,它不会向您提供错误。

在此示例中,可以在 pika 确认连接已断开之前发送几条消息。

import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(
        host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
for index in xrange(10):
    channel.basic_publish(exchange='', routing_key='hello', 
                          body='Hello World #%s!' % index)
    print('Total Messages Sent: %s' % x)
connection.close()
4

2 回答 2

12

使用Pika时,channel.confirm_delivery()需要在开始发布消息之前设置标志。这很重要,这样 Pika 将在发送下一条消息之前确认每条消息都已成功发送。然而,这将增加向RabbitMQ发送消息所需的时间,因为在程序可以继续处理下一条消息之前需要确认交付。

channel.confirm_delivery()

try:
   for index in xrange(10):
       channel.basic_publish(exchange='', routing_key='hello', 
                              body='Hello World #%s!' % index)
       print('Total Messages Sent: %s' % x)
except pika.exceptions.ConnectionClosed as exc:
    print('Error. Connection closed, and the message was never delivered.')

basic_publish将返回一个Boolean取决于消息是否已发送。但是,如果连接在传输过程中关闭并适当地处理它,捕获潜在的异常是很重要的。在这些情况下,异常将中断程序的流程。

于 2013-06-20T21:42:18.550 回答
0

在尝试了自己并没有收到除 ack 之外的其他信息后,我决定直接回复发件人。

我按照这里给出的例子

于 2021-08-19T17:22:47.393 回答