Filtro ricevitore JMS filtraggio tramite JMSCorrelationID
Come è possibile creare un'istanza di un listener della coda JMS in java (JRE/JDK/J2EE 1.4) che riceve solo messaggi che corrispondono a un JMSCorrelationID determinato? I messaggi che sto cercando di raccogliere sono stati pubblicati in una coda e non in un argomento, anche se può cambiare se necessario.
Ecco il codice che sto attualmente in uso per mettere il messaggio nella coda: impostazione della connessione/**
* 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
ho letto sullo stesso argomento di recente e ho una domanda come segue: sarà il ricevitore continuare a ricevere quei messaggi che non contengono l'ID di correlazione necessaria e in silenzio rilasciarli w/o di trasformazione, o sarà la Il fornitore JMS stesso non consegna tali messaggi al destinatario, in modo che rimangano ancora in coda? Sento che quest'ultimo è l'approccio corretto, ma voglio verificare. Grazie. – shrini1000
@ shrini1000 sei corretto. – Trying