#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, то я думаю, что самым простым и прямолинейным способом сделать это было бы:
- Отправьте сообщение в очередь для каждой записи в вашем XML; вызовите это
workQueue
. - Потребитель (или пул потребителей, это может быть MDB) будет принимать сообщения от
workQueue
и обрабатывать их - Как только потребитель завершал обработку сообщения, он помещал сообщение в другую очередь, указывая, что оно завершено; вызовите это
resultsQueue
. - Исходный отправитель мог прослушивать
resultsQueue
и обновлять клиент о том, какие записи были (или не были) обработаны.
Одно сообщение JMS на XML-запись довольно детализировано, поэтому вы можете объединить несколько XML-записей в одно JMS-сообщение, чтобы увеличить пропускную способность, если обнаружите, что производительность не соответствует вашим требованиям.