Планирование/потребление сообщений в JMS на основе заданного времени

Мы используем IBM WebSphere MQ в качестве поставщика JMS с Spring MDP (POJO, управляемый сообщениями).

Есть ли способ в JMS, где мы можем настроить свойства, связанные со временем в сообщении, чтобы сообщение можно было использовать только в определенное определенное время?

Например, если я отправляю три сообщения в очередь M1, M2 и M3. Где я могу настроить свойство сообщения M2, скажем, в 3 часа ночи. И со стороны потребителя, потребитель может выбрать это сообщение только в 3 часа ночи. Если время не определено, сообщения должны потребляться так, как это делает JMS Receiver.


person Narendra Verma    schedule 12.07.2013    source источник


Ответы (2)


Спецификация JMS 2.0 определяет Delivery Delay. С помощью этой функции производитель сообщений может указать, что сообщение не должно быть доставлено до истечения указанного времени interval. Сообщение будет доступно для доставки по истечении указанного времени. Но это может не помочь вам, поскольку вы хотите, чтобы сообщение было использовано в указанное время. Обычно приложения для обмена сообщениями предназначены для использования сообщений, как только они становятся доступными поставщиком обмена сообщениями.

person Shashi    schedule 12.07.2013
comment
Да ты прав. Это может не помочь мне использовать сообщение в указанное время. Я не уверен, есть ли способ интегрировать концепцию Quartz Scheduling с JMS. - person Narendra Verma; 16.07.2013

Если вы хотите обрабатывать сообщения только в указанное время, вы можете создать еще одну очередь «queue_3am» и запланировать запуск считывателя точно в 3 часа ночи.

Вариантом является установка метки времени в качестве свойства сообщения. Таким образом, одна очередь может содержать сообщения для обработки в разные моменты времени. Читатель может использовать селекторы сообщений, чтобы получать только релевантные сообщения.

Но вы должны использовать "период получения сообщения", добавив две метки времени в качестве свойств сообщения, например, установите окно на 1 или 5 минут.

Получатель может использовать селектор сообщений: селектор — это условие, использующее свойства сообщения.

Взгляните на это

person Beryllium    schedule 12.07.2013
comment
Спасибо за ответ. Я вижу проблему с этим подходом. Если я скажу, что конкретное сообщение должно обрабатываться ежедневно в 3 часа ночи. При таком подходе я могу определить свойство селектора сообщений для выбора сообщений в 3 часа ночи. Ни до, ни после. Теперь предположим, что в очереди 10 сообщений, и все сообщения имеют время обработки 3 часа ночи. Предположим, что потребитель выбирает первое сообщение в 3 часа ночи, и обработка сообщения занимает 10 минут. Сейчас 3.10 утра. Где другие оставшиеся сообщения определены для обработки в 3 часа ночи. В этом случае потребитель никогда не выберет другие сообщения, поскольку текущее время на стороне потребителя — 3:10 утра. - person Narendra Verma; 16.07.2013
comment
У вас может быть n читателей, которые просматривают n сообщений в 3 часа ночи. Альтернативой является чтение всех сообщений, соответствующих селектору, в 3 часа ночи до начала обработки. - person Beryllium; 16.07.2013