Пакетная / массовая обработка в JMS - PullRequest
0 голосов
/ 01 апреля 2019

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

1 Ответ

1 голос
/ 01 апреля 2019

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

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

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

...