Чтение конкретного сообщения из очереди на основе идентификатора корреляции

У меня есть mdb, подключенный к порту прослушивателя websphere, который будет читать сообщение из очереди и сохранять его в базе данных.

Теперь при отправке запроса с помощью sessionBean я добавил в сообщение идентификатор корреляции.

msg.setJMSCorrelationId(theID);

Мой текущий код MDB

onMessage(Message message) {
//it will read the message and insert to db
}

Я хочу, чтобы мой MDB прослушивал только сообщения, которые будут иметь идентификатор корреляции, который я установил при отправке сообщения.

Может кто-нибудь предложить, как это сделать?


person V Joe    schedule 04.03.2015    source источник
comment
JMSCorrelationID вообще должен быть уникальным, так как он представляет собой идентификатор сообщения, на которое вы отвечаете. В вашем случае это должно быть свойство пользовательского сообщения, например myMessage.setStringProperty("NumberOfOrders", "2")   -  person Gas    schedule 04.03.2015


Ответы (1)


Используйте селектор сообщений в файле ejb-jar.xml вашего mdb. Селекторы сообщений используются для получения только тех сообщений, которые соответствуют определенным критериям. Вашим критерием здесь является идентификатор корреляции, который является предопределенным полем.

<activation-config-property>
            <activation-config-property-name>messageSelector</activation-config-property-name>
            <activation-config-property-value><![CDATA[JMSCorrelationID = 'value']]></activation-config-property-value>
        </activation-config-property>

Примечание. ИМХО - плохая идея устанавливать идентификатор корреляции в качестве селектора сообщений, поскольку каждое сообщение обычно имеет свое собственное значение в случаях использования, когда вам нужно использовать идентификатор корреляции JMS. Вам может понадобиться MDB для каждого сообщения :)

person ramp    schedule 04.03.2015
comment
так вот что я сделал. При передаче идентификатора корреляции я передаю жестко закодированное значение ID: 414243, используя msg.setJMSCorrelationID, я устанавливаю это значение. Теперь, как вы сказали, я добавил приведенный выше код в свой XML-файл и вместо значения использовал указанное выше жестко закодированное значение. В моем MDB я добавил код для поиска определенной очереди, а затем использовал session.createReceiver(queue, messageSelector), где messageSelector — это JMSCorrelationID='ID:414243', а затем Receiver.receive(50000). Тем не менее, я не могу прочитать сообщение обратно. Я что-то упускаю? - person V Joe; 05.03.2015