Comment comprendre la messagerie "synchrone" et "asynchronouns" dans JMS?
Après la lecture d'un document de JMS, je suis totalement déconcerté par le membre de phrase synchronous
et asynchronouns
.
Voir cette page: http://docs.oracle.com/cd/E19798-01/821-1841/bncdq/index.html
Synchrone
Vous utilisez la méthode de réception de consommer un message de façon synchrone.
Vous pouvez utiliser cette méthode à tout moment après l'appel de la méthode start:connection.start(); Message m = consumer.receive(); connection.start(); Message m = consumer.receive(1000); //time out after a second
De consommer un message de manière asynchrone, vous utilisez un message à l'écoute, décrit dans la section suivante.
Asynchrone
JMS Message Auditeurs
Un auditeur de message est un objet qui agit comme un événement asynchrone gestionnaire de messages. Cet objet implémente l'interface MessageListener, qui contient une méthode onMessage. Dans la méthode onMessage, vous définissez les actions à prendre lorsqu'un message arrive.Vous vous inscrivez à l'auditeur de message avec un MessageConsumer à l'aide de la setMessageListener méthode. Par exemple, si vous définissez une classe nommée Auditeur qui implémente l'interface MessageListener, vous pouvez enregistrer le message d'écoute comme suit:
Listener myListener = new Listener(); consumer.setMessageListener(myListener);
J'ai deux questions:
- Que ce que j'ai compris, la nature de JMS est asynchrone. Producteur publie les messages de la file d'attente/topic, il n'a pas besoin d'attendre des consommateurs. C'est asynchrone comportement. Comment peut-il être "synchrone"?
- Si le "mesageListener" est asynchrone, mais dans mon test du printemps jms, je l'ai trouvé toujours en cours d'exécution dans un thread. Cela signifie que, si j'écris
Thread.sleep(2000)
dansonMessage
il faut attendre 2 secondes avant de traiter message suivant. Est-il "asynchrone"?
source d'informationauteur Freewind
Vous devez vous connecter pour publier un commentaire.
Si vous comprenez mieux comme ça,
consumer.receive()
utilise un pull modèle: vous lisez à partir d'une file d'attente et sont bloqués en attente pour ce message jusqu'à ce qu'il s'agit, ou de dépassement du temps s'est écoulé.À l'aide d'un écouteur utilise un pousser modèle: - vous enregistrer un écouteur et, lorsqu'un message arrive, l'auditeur est appelé, dans un thread séparé.
Tout est fait dans un thread en Java, et l'auditeur d'appel n'est pas une exception. Si l'auditeur de gestion de messages empêche le traitement d'autres messages dans la file d'attente dépend du nombre de threads sont dédiés au traitement du message. Si vous configurez Printemps à l'utilisation d'un pool de 5 threads pour traiter les messages en mode asynchrone, 5 utilisateurs seront en mesure de traiter les messages en parallèle.
Comme je la comprends:
asynchrone MessageListener: l'Utiliser sur un serveur qui écoute à une file d'attente. Lorsqu'un message arrive, puis le traiter immédiatement. Le serveur continue à l'écoute de cette file d'attente.
synchrone à la consommation.recevoir(1000): Utiliser cette fonction sur un client applications qui maintenant et puis il faut vérifier si un message est à l'intention de ce client. Exemple: un sondage toutes les 60 secondes. Ce n'ouvre une connexion vers le serveur d'ici peu. Les 1000 millisecondes vais garder cette connexion ouverte. Si un message arrive à l'intérieur de ces 1000 millisecondes, alors le message est consommée et que la connexion est fermée.
Vous êtes à la recherche à elle de bout en bout: de l'éditeur pour le consommateur. Oui, c'est la livraison asynchrone à partir de l'éditeur de consommation, indépendamment de Sync/Async consommateur. Cependant Sync/Async dans votre question est pour le consommateur, je l'.e de la JMS courtier (par exemple: ApacheMQ) pour le consommateur. Comme d'autres l'ont souligné, la Synchronisation des consommateurs pull messages de manière séquentielle à partir du courtier et sont en attente de messages. Async consommateurs inscrire un rappel de l'endroit où les messages poussé (onMessage). Async les consommateurs peuvent le faire d'autres choses pendant que ces messages sont livrés à eux de manière asynchrone de la JMS courtier.