2013-06-20 28 views
6

Mesajların Pika ile teslim edilmesini nasıl sağlıyorsunuz? İleti başarıyla teslim edilmediyse, varsayılan olarak size bir hata vermez.İletilerin teslim edilmesini nasıl sağlarsınız?

Bu örnekte pika'dan önce birkaç mesaj gönderilebilir, bağlantının kesildiğini onaylar. Eğer mesajlar yayımlamaya başlayacağı

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() 

cevap

10

channel.confirm_delivery() bayrak ayarlanması gerekir Pika kullanmadan önce. Bu önemlidir, böylece Pika her mesajın bir sonraki mesajı göndermeden önce başarıyla gönderildiğini onaylayacaktır. Ancak, programın bir sonraki mesaja devam etmeden önce teslimatın onaylanması gerektiğinden, bu mesajlar RabbitMQ mesajlarına gönderilme süresini uzatır.

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 mesajın gönderildiği veya olmasaydı bağlı olarak Boolean dönecektir. Ancak, bağlantı sırasında bağlantının kapalı olması ve uygun şekilde ele alınması durumunda potansiyel istisnaları yakalamak önemlidir. Bu gibi istisnalar program akışını kesintiye uğratır.

+0

sadece meraktan dolayı, channel.confirm_delivery() işlevini çağırmak için BlockingConnection() gerekli mi? – Jeffrey04

+1

@ Jeffrey04: Tüm bağlantı türlerinde, temel kanal nesnesinde tanımlandığı gibi desteklenmelidir. https://github.com/pika/pika/blob/f8c263f234cca6b0f573ac63268a4034e32bd3eb/pika/channel.py#L388 – eandersson

+0

Açıklama için teşekkürler (: – Jeffrey04

İlgili konular