2016-05-23 15 views
0

Ich habe einen Resque-Job, der bei einem Event ausgeführt wird, der die Nachricht an RabbitMQ's Exchange schließlich veröffentlicht, wie kann ich in Hase (Rabbit MQ Ruby-Client) einchecken, ob die Nachricht erfolgreich veröffentlicht wurde?Status von RabbitMQ überprüfen, ob Nachricht veröffentlicht wird?

Mit Bestätigung oder einem anderen Weg?

Vielen Dank im Voraus!

Antwort

0

Sobald die Methode publish zurückgegeben wird, wurde die Nachricht in die Warteschlange veröffentlicht. Es gibt keine verzögerte Aktion zum Veröffentlichen einer Nachricht.

+0

Wenn Sie 'publish' Methode aufrufen, legte es in den Austausch, meine Frage ist, was passiert, wenn Kaninchen MQ-Server ist und meine Resque-Job ist nicht in der Lage zu veröffentlichen, wie erneut zu veröffentlichen? siehe diesen Abschnitt ** Wie Nachrichten Bestätigungen zu Transaktionen und Publisher bestätigen ** von Link http://rubybunny.info/articles/queues.html#message_acknowledgements, Es sagt, was ist, wenn S1 ist, Dies ist, was ich suche Lösung für . – kamal

1

Wenn Sie die publish ausführen, sind Sie nicht sicher, dass die Nachricht in der Warteschlange veröffentlicht wird.

Wenn Sie sicher sein wollen, dass Sie verwenden müssen, müssen Sie publish confirm oder tx transaction verwenden.

diesen Beitrag http://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/

Hinweis lesen: Standardmäßig werden die Kunden haben keine HA Politik, haben Sie es zu implementieren. Siehe Abschnitt Streaming Lightweight Publisher Confirms:

private volatile SortedSet<Long> unconfirmedSet = 

    Collections.synchronizedSortedSet(new TreeSet()); 

... 

ch.setConfirmListener(new ConfirmListener() { 
    public void handleAck(long seqNo, boolean multiple) { 
     if (multiple) { 
      unconfirmedSet.headSet(seqNo+1).clear(); 
     } else { 
      unconfirmedSet.remove(seqNo); 
     } 
    } 
    public void handleNack(long seqNo, boolean multiple) { 
     // handle the lost messages somehow 
    } 
}); 

Hinweis 2: die Nachricht wird nie „put“ innerhalb einer Börse, sondern immer in einer Warteschlange.