2014-01-07 4 views
6

Ich teste gerade wie Kombu funktioniert. Ich plane, Pika in mehreren Projekten zu ersetzen. Ich sehe, dass Kombu eine Menge Dokumentation hat, aber mit dem, was ich in der Dokumentation gefunden habe, sind einige Nachrichten verloren gegangen. Hier ist der Code:Was ist der beste Weg, die Veröffentlichung von Nachrichten mit Kombu erneut zu versuchen?

from kombu import Connection, Producer 
conn = Connection('amqp://localhost:5672') 
def errback(exc, interval): 
    logger.error('Error: %r', exc, exc_info=1) 
    logger.info('Retry in %s seconds.', interval) 
producer = Producer(conn) 
publish = conn.ensure(producer, producer.publish, errback=errback, max_retries=3) 
for i in range(1, 200000): 
    publish({'hello': 'world'}, routing_key='test_queue') 
    time.sleep(0.001) 

Wenn es Publishing Ich schließe die Verbindung mehrmals und es hält Publishing aber in der Warteschlange gibt es rund 60.000 Nachrichten, so gibt es eine Menge von verlorenen Nachrichten.

Ich habe versucht, verschiedene Alternativen z:

publish({'hello': 'world'}, retry=True, mandatory=True, routing_key='hipri') 

Dank!

Antwort

10

Das Problem war, dass standardmäßig Kombu nicht 'bestätigen' nicht verwenden, müssen Sie verwenden:

 conn = Connection('amqp://localhost:5672', transport_options={'confirm_publish': True}) 

Dank

+0

Nizza dies für den Austausch. – flycee

+1

Das macht nicht die Pflichtflagge in Pika. Wenn auf dem RabbitMQ-Server keine Warteschlangen deklariert sind, wird die Nachricht gesendet und nicht an irgendeine Warteschlange weitergeleitet und daher "ignoriert". Der Produzent erhält kein Signal der Nachricht wird nicht weitergeleitet. – Sergey11g

Verwandte Themen