JMS message récepteur de filtrage par JMSCorrelationID
Comment instancier une file d'attente JMS auditeur en java (JRE /JDK /J2EE 1.4) qui reçoit uniquement les messages qui correspondent à un JMSCorrelationID? Les messages que je suis à la recherche de ramasser ont été publiés à une file d'attente et pas un sujet, mais cela peut changer si nécessaire.
Voici le code que j'utilise actuellement pour mettre le message dans la file d'attente:
/**
* publishResponseToQueue publishes Requests to the Queue.
*
* @param jmsQueueFactory -Name of the queue-connection-factory
* @param jmsQueue -The queue name for the request
* @param response -A response object that needs to be published
*
* @throws ServiceLocatorException -An exception if a request message
* could not be published to the Topic
*/
private void publishResponseToQueue( String jmsQueueFactory,
String jmsQueue,
Response response )
throws ServiceLocatorException {
if ( logger.isInfoEnabled() ) {
logger.info( "Begin publishRequestToQueue: " +
jmsQueueFactory + "," + jmsQueue + "," + response );
}
logger.assertLog( jmsQueue != null && !jmsQueue.equals(""),
"jmsQueue cannot be null" );
logger.assertLog( jmsQueueFactory != null && !jmsQueueFactory.equals(""),
"jmsQueueFactory cannot be null" );
logger.assertLog( response != null, "Request cannot be null" );
try {
Queue queue = (Queue)_context.lookup( jmsQueue );
QueueConnectionFactory factory = (QueueConnectionFactory)
_context.lookup( jmsQueueFactory );
QueueConnection connection = factory.createQueueConnection();
connection.start();
QueueSession session = connection.createQueueSession( false,
QueueSession.AUTO_ACKNOWLEDGE );
ObjectMessage objectMessage = session.createObjectMessage();
objectMessage.setJMSCorrelationID(response.getID());
objectMessage.setObject( response );
session.createSender( queue ).send( objectMessage );
session.close();
connection.close();
} catch ( Exception e ) {
//XC3.2 Added/Modified BEGIN
logger.error( "ServiceLocator.publishResponseToQueue - Could not publish the " +
"Response to the Queue - " + e.getMessage() );
throw new ServiceLocatorException( "ServiceLocator.publishResponseToQueue " +
"- Could not publish the " +
"Response to the Queue - " + e.getMessage() );
//XC3.2 Added/Modified END
}
if ( logger.isInfoEnabled() ) {
logger.info( "End publishResponseToQueue: " +
jmsQueueFactory + "," + jmsQueue + response );
}
} //end of publishResponseToQueue method
OriginalL'auteur Tom S | 2008-09-29
Vous devez vous connecter pour publier un commentaire.
La file d'attente de la configuration de la connexion est la même, mais une fois que vous avez la QueueSession, vous réglez le sélecteur lors de la création d'un récepteur.
puis
ou
vous êtes correct.
Dans ce cas, la condition de filtre est "JMSCorrelationID='theid'" . J'ai besoin d'ajouter un plus de l'état comme "JMSCorrelationID='theid", "Location=ASIE". Quelle est la syntaxe pour cette condition de filtre
OriginalL'auteur Robin
BTW, si ce n'est pas la question qui vous a demandé si vous essayez de mettre en œuvre des réponses aux demandes de plus JMS je le recommande la lecture de cet article comme JMS API est un peu plus complexe que ce que vous pourriez imaginer et de faire de cette efficacité est d'autant plus difficile qu'il n'y paraît.
En particulier pour utiliser efficacement JMS vous devriez essayer d'éviter de créer pour les consommateurs, un seul message etc.
Aussi parce que les JMS API est donc très complexe à utiliser correctement et efficacement, en particulier avec la mise en commun, les transactions et le traitement simultané - je recommande les gens masquer le middleware de leur code de l'application, notamment via l'aide de Apache Camel Spring Remoting mise en œuvre de JMS
OriginalL'auteur James Strachan
Espère que cela aidera. J'ai utilisé Ouvrir MQ.
OriginalL'auteur saptarshi
Ici le récepteur obtenir les messages pour lesquels
JMSCorrelationID
est égal àMessageID
. ceci est très utile dans de requête/réponse paradigme.ou vous pouvez directement mettre toute valeur:
Que vous pouvez le faire soit
receiver.receive(2000);
oureceiver.setMessageListener(this);
OriginalL'auteur Trying