Wie gehe ich mit RabbitMQ Consumer Cancellation Notification um, wenn Spring ChannelAwareMessageListener verwendet wird?

9

Newbie zu RabbitMQ und neu zu Java.

Ich versuche, einen Listener zu schreiben, der manuelle Acks verwendet und Benachrichtigungen über Kundenunterbrechungen mit der java Spring AMQP Abstraktion handhabt. Kann ich beide Aufgaben mithilfe der Spring-Abstraktion durchführen?

Ich möchte einen Listener schreiben, der Nachrichten aus einer Warteschlange zieht und diese Nachricht verarbeitet (vielleicht in eine Datenbank oder etwas schreiben). Ich plante, manuelle Bestätigungen zu verwenden, so dass, wenn die Verarbeitung der Nachricht fehlschlägt oder aus irgendeinem Grund nicht abgeschlossen werden kann, kann ich sie ablehnen und erneut anfordern. Bis jetzt glaube ich, dass ich gefunden habe, um Spring AMQP manuell zu quittieren / ablehnen, muss ich ein ChannelAwareMessageListener verwenden.

Mir ist klar, dass ich Consumer Cancellation Notifications von RabbitMQ bearbeiten sollte, allerdings benutze ich ChannelAwareMessageListener . Ich sehe keine Möglichkeit, dies zu programmieren. Die einzige Möglichkeit, mit CCN umzugehen, besteht darin, Code mit dem Java-Client-API auf niedrigerer Ebene zu schreiben, indem ich channel.basicConsume() aufruft und eine neue DefaultConsumer -Instanz übergebe, die es erlaubt, Nachrichten zu verarbeiten und abzubrechen.

Ich sehe auch nicht, wie ich die clientProperties auf die ConnectionFactory setzen würde (um dem Broker mitzuteilen, dass ich mit der CCN umgehen kann), da ich die Factory von einer Bean in Config bekomme.

Mein Pseudocode des Listeners und die Erstellung des Containers ist unten.

%Vor%     
SamAxe 12.06.2013, 20:16
quelle

1 Antwort

1

Zum Festlegen der Clienteigenschaften müssen Sie die setClientProperties -Methode in ConnectionFactory verwenden (vorausgesetzt, diese ConnectionFactory ist das Objekt aus der RabbitMQ-Java-Bibliothek). Diese Methode erwartet ein Map<String, Object> , das die Eigenschaften des Clients und der Fähigkeiten enthält. Die folgenden Zeilen sind die Standardwerte innerhalb der RabbitMQ Java-Bibliothek:

%Vor%

Für die Verwaltung von ACKs und Kundenlöschung bin ich nicht sicher, wie es mit der Spring-AMQP-Abstraktion geht, aber es ist mit channel.basicConsume perfekt machbar, was Ihnen die Möglichkeit gibt, alle Szenarien mit allen Callback-Methoden zu behandeln:

Ссылка

Hoffe, das hilft!

    
hveiga 17.10.2013 01:01
quelle

Tags und Links