如何确保邮件传递?

时间:2013-06-20 21:42:19

标签: python rabbitmq message pika

如何确保邮件随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()

1 个答案:

答案 0 :(得分:10)

使用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,具体取决于邮件是否已发送。但是,如果在传输期间关闭连接并适当地处理它,则捕获潜在的异常非常重要。在这些情况下,异常将中断程序的流程。