Пакетная / массовая обработка в JMS

#java #jakarta-ee #jboss #jms #message-queue

#java #джакарта-ee #jboss #jms #очередь сообщений

Вопрос:

У меня возникает следующий сценарий, в котором я получаю XML с несколькими записями за 100 000 секунд. Для каждого элемента я должен обрабатывать сообщение одновременно, и как только эта пакетная / массовая обработка завершится, я должен уведомить клиента, что обработал 100 000 отправленных им записей. Я подумываю о добавлении каждого сообщения в компонент, управляемый сообщениями, для одновременной обработки каждого из них. Моя проблема в том, как мне узнать, что MDB обработал все сообщения в этом пакете, и отправить мне сигнал о том, что все сообщения в этом пакете / XML завершены? Каков наилучший способ сделать это в очереди сообщений Java? Я хочу получать уведомления, когда все сообщения в этом XML будут обработаны, чтобы я мог уведомить клиента.

Комментарии:

1. Следите за тайм-аутами транзакций. Возможно, стоит взглянуть на JSR-352 «Пакетные приложения для платформы Java».

2. Почему бы просто не отправить сообщение счетчику, когда каждый MDB завершает свой процесс?

Ответ №1:

Есть несколько способов, которыми это можно реализовать, но если вы хотите сделать это через JMS, то я думаю, что самым простым и прямолинейным способом сделать это было бы:

  1. Отправьте сообщение в очередь для каждой записи в вашем XML; вызовите это workQueue .
  2. Потребитель (или пул потребителей, это может быть MDB) будет принимать сообщения от workQueue и обрабатывать их
  3. Как только потребитель завершал обработку сообщения, он помещал сообщение в другую очередь, указывая, что оно завершено; вызовите это resultsQueue .
  4. Исходный отправитель мог прослушивать resultsQueue и обновлять клиент о том, какие записи были (или не были) обработаны.

Одно сообщение JMS на XML-запись довольно детализировано, поэтому вы можете объединить несколько XML-записей в одно JMS-сообщение, чтобы увеличить пропускную способность, если обнаружите, что производительность не соответствует вашим требованиям.