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% 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:
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!
Tags und Links java rabbitmq amqp spring-amqp