Heim  >  Artikel  >  Java  >  Verwenden von Spring und AMQP zum Senden und Empfangen von Nachrichten in Java (Teil 2)

Verwenden von Spring und AMQP zum Senden und Empfangen von Nachrichten in Java (Teil 2)

怪我咯
怪我咯Original
2017-06-25 10:02:272075Durchsuche

Im vorherigen Artikel ging es um die Verwendung von RabbitMQ zum Senden von Nachrichten, und in diesem Artikel geht es um den Empfang von Nachrichten.
In herkömmlichem JMS gibt es zwei Möglichkeiten, Informationen aus der Warteschlange abzurufen: die synchrone Methode mit JmsTemplate und die asynchrone Methode mit nachrichtengesteuertem Pojo. Spring AMQP bietet auch eine ähnliche Möglichkeit, über AMQP gesendete Nachrichten abzurufen.

Verwenden Sie RabbitTemplate, um Nachrichten zu empfangen

Die einfachste Methode zum Empfangen von Informationen, die von RabbitTemplate bereitgestellt werden, ist die Methode „receive()“, mit der Sie ein Message-Objekt aus der Warteschlange abrufen können:

Message message = rabbit.receive("spittle.test.queue");

Oder Sie können die Standardwarteschlange für Nachrichten auch durch Konfiguration erhalten. Dies wird erreicht, indem Sie das Warteschlangenattribut bei der Konfiguration der Vorlage festlegen:

<template id="rabbitTemplate" 
    connection-factory="connectionFactory"exchange="spittle.test.exchange" 
    routing-key="spittle.test" 
    queue="spittle.test.queue" />

In diesem Fall kann beim Aufrufen der Methode „receive()“ die Nachricht aus der Standardwarteschlange abgerufen werden, ohne dass Parameter festgelegt werden müssen:

Message message = rabbit.receive( );

Nach dem Abrufen des Message-Objekts im Allgemeinen Die Das Byte-Array in seinem Body-Attribut muss in das gewünschte Objekt konvertiert werden. Ebenso wie das Konvertieren des Domänenobjekts in eine Nachricht beim Senden ist es auch mühsam, die empfangene Nachricht in ein Domänenobjekt umzuwandeln. Hier können Sie alternativ die Methode „receiveAndConvert()“ von RabbitTemplate verwenden:

Spittle spittle = (Spittle) rabbit.receiveAndConvert("spittle.test.queue");

Die Methode „receiveAndConvert()“ verwendet zum Konvertieren denselben Nachrichtenkonverter wie die Methode „sendAndConvert()“. Das Message-Objekt ist ein primitiver Typ.
Der Aufruf der Methoden „receive()“ und „receiveAndConvert()“ führt sofort zu einer Rückgabe. Wenn keine Nachrichten in der Warteschlange vorhanden sind, erhalten Sie den Wert „null“. Zu diesem Zeitpunkt müssen Programmierer im Allgemeinen die Abfrage und die erforderlichen Threads selbst verwalten, um die Warteschlangenüberwachung zu implementieren. Wenn Sie nicht jedes Mal synchron abfragen möchten, um auf das Eintreffen der Nachricht zu warten, können Sie das von Spring AMQP bereitgestellte nachrichtengesteuerte Pojo verwenden. Schauen wir uns die Verwendung des nachrichtengesteuerten Pojo zum Empfangen von Nachrichten an.

Nachrichtengesteuertes Pojo verwenden, um Nachrichten zu empfangen

Wenn Sie Spittle-Objekte asynchron im nachrichtengesteuerten Pojo konsumieren möchten, müssen Sie zunächst das Pojo selbst lösen, wie gezeigt unten SpittleTestHandler Spielt diese Rolle:

public class SpittleTestHandler {public void handleSpittleTest (Spittle spittle) {
        ...
    }
}

Tatsächlich hängt diese Klasse nicht von AMQP ab, egal welcher Mechanismus an das Spittle-Objekt übergeben wird, sie kann damit umgehen.
Hier müssen Sie SpittleTestHandler auch als Bean im Spring-Anwendungskontext deklarieren:

<bean id="spittleListener"class="com.***.spittr.test.SpittleTestHandler">

Zuletzt müssen Sie einen Listener-Container und einen Listener deklarieren, wenn die Nachricht eintrifft , SpittleTestHandler kann aufgerufen werden und die Konfiguration ist wie folgt:

<listener-container connection-factory="connectionFactory"><listener ref="spittleListener" 
          method="handleSpittleTest"  queue-names="spittle.test.queue" /></listener-container>

Die obigen Elemente stammen beide aus dem Rabbit-Namespace. Und geben Sie die zu überwachende Warteschlange über das Attribut queue-names an. Hier wird nur eine zu überwachende Warteschlange festgelegt. Wenn mehrere Warteschlangen festgelegt werden sollen, trennen Sie diese durch Kommas. An diesem Punkt ist der Nachrichtenempfang abgeschlossen. Nachdem Sie die Nachricht erhalten haben, können Sie die entsprechende Verarbeitung in der entsprechenden Methode durchführen.

Das obige ist der detaillierte Inhalt vonVerwenden von Spring und AMQP zum Senden und Empfangen von Nachrichten in Java (Teil 2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn