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_publishBooleanメッセージが送信されたかどうかに応じてを返します。ただし、転送中に接続が閉じられた場合に備えて、潜在的な例外をキャッチし、適切に処理することが重要です。そのような場合と同様に、例外はプログラムの流れを中断します。

于 2013-06-20T21:42:18.550 に答える