Maison > Java > javaDidacticiel > le corps du texte

Utiliser Spring et AMQP pour envoyer et recevoir des messages en Java (Partie 2)

怪我咯
Libérer: 2017-06-25 10:02:27
original
2102 Les gens l'ont consulté

L'article précédent parlait de l'utilisation de RabbitMQ pour envoyer des messages, et cet article parlera de la réception de messages.
Dans JMS traditionnel, il existe deux manières d'obtenir des informations de la file d'attente, la méthode synchrone utilisant JmsTemplate et la méthode asynchrone utilisant pojo piloté par message. Spring AMQP fournit également un moyen similaire pour obtenir les messages envoyés via AMQP.

Utilisez RabbitTemplate pour recevoir des messages

La méthode la plus simple pour recevoir des informations fournies par RabbitTemplate est la méthode recevoir(), grâce à laquelle vous pouvez obtenir un objet Message de la file d'attente :

Message message = rabbit.receive("spittle.test.queue");
Copier après la connexion

Ou vous pouvez également obtenir la file d'attente de messages par défaut via la configuration. Ceci est réalisé en définissant l'attribut de file d'attente lors de la configuration du modèle :

<template id="rabbitTemplate" 
    connection-factory="connectionFactory"exchange="spittle.test.exchange" 
    routing-key="spittle.test" 
    queue="spittle.test.queue" />
Copier après la connexion
Dans ce cas, lors de l'appel de la méthode recevoir(), le message peut être obtenu depuis la file d'attente par défaut sans définir aucun paramètre :

Message message = rabbit.receive( );
Copier après la connexion
Après avoir obtenu l'objet Message, généralement Le Le tableau d'octets dans son attribut body doit être converti en l'objet souhaité. Tout comme la conversion de l'objet de domaine en message lors de l'envoi, il est également fastidieux de convertir le message reçu en objet de domaine. Ici, vous pouvez envisager d'utiliser la méthode recevoirAndConvert() de RabbitTemplate comme alternative :

Spittle spittle = (Spittle) rabbit.receiveAndConvert("spittle.test.queue");
Copier après la connexion
La méthode recevoirAndConvert() utilisera le même convertisseur de message que la méthode sendAndConvert() pour convertir l'objet Message est un type primitif.

L'appel des méthodes recevoir() et recevoirAndConvert() retournera immédiatement. S'il n'y a aucun message en attente dans la file d'attente, vous obtiendrez null. À l’heure actuelle, les programmeurs doivent généralement gérer eux-mêmes les interrogations et les threads nécessaires pour implémenter la surveillance des files d’attente. Si vous ne souhaitez pas interroger de manière synchrone et attendre que les messages arrivent à chaque fois, vous pouvez utiliser le pojo basé sur les messages fourni par Spring AMQP. Voyons comment utiliser le pojo basé sur les messages pour recevoir des messages.

Utilisez un pojo piloté par message pour recevoir des messages
Si vous souhaitez consommer des objets Spittle de manière asynchrone dans un pojo piloté par message, vous devez d'abord résoudre le pojo lui-même, comme indiqué ci-dessous SpittleTestHandler Joue ce rôle :

public class SpittleTestHandler {public void handleSpittleTest (Spittle spittle) {
        ...
    }
}
Copier après la connexion
En fait, cette classe ne dépend pas d'AMQP. Quel que soit le mécanisme transmis à l'objet Spittle, il peut le gérer.

Ici, vous devez également déclarer SpittleTestHandler comme bean dans le contexte de l'application Spring :

<bean id="spittleListener"class="com.***.spittr.test.SpittleTestHandler">
Copier après la connexion
Enfin, vous devez déclarer un conteneur d'écoute et un écouteur lorsque le message arrive. , SpittleTestHandler peut être appelé et la configuration est la suivante :

<listener-container connection-factory="connectionFactory"><listener ref="spittleListener" 
          method="handleSpittleTest"  queue-names="spittle.test.queue" /></listener-container>
Copier après la connexion
Les éléments et Et spécifiez la file d'attente à surveiller via l'attribut queue-names Ici, une seule file d'attente à surveiller est définie. Si plusieurs files d'attente doivent être définies, séparez-les par des virgules. À ce stade, la réception du message est terminée. Après avoir reçu le message, vous pouvez effectuer le traitement correspondant dans la méthode correspondante.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal