2017-09-26 5 views
0

J'utilise actuellement les bibliothèques JMS IBM MQ et écrire une classe Java qui va gérer tirant vers le bas un message à partir d'une file d'attente consommer avec un sélecteur comme ceci:Un sélecteur de messages JMS extrait-il plusieurs messages avec un seul appel consumer.receive() ou le premier message qu'il voit?

consumer = session.createConsumer(queue, "JMSCorrelationID = '" + request.getCorrelationID() + "'"); 
message = consumer.receive(30000); 

Ma question est, s'il y avait deux messages dans la file d'attente consommatrice qui correspond au sélecteur de message, appelait consumer.receive pour retirer les deux messages ou ne retirait-il que le premier qu'il voyait?

J'ai trouvé cette autre question SO: How to remove multiple messages using message selector in JMS qui semble faire allusion au fait que la réception d'appel va tirer un seul message vers le bas même si deux messages dans la file d'attente de consommation correspondent au sélecteur.

Répondre

2

La documentation de MessageConsumer dit le texte suivant:

reçoit le message suivant qui arrive dans l'intervalle délai spécifié.

https://docs.oracle.com/javaee/7/api/javax/jms/MessageConsumer.html

Donc, appeler recevoir devrait tirer vers le bas 1 message à la fois. Il ne peut pas vraiment retourner plus de messages car le type de retour est Message et pas n'importe quel type de collection.

1

Il n'est pas spécifié comment le client fournisseur JMS fonctionne en interne: cela dépend du fournisseur; mais il peut seulement retourner un message à l'appelant.