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

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

怪我咯
怪我咯original
2017-06-25 10:02:272135parcourir

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");

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" />
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( );
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");
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) {
        ...
    }
}
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">
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>
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!

Déclaration:
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