Каким может быть лучший способ объединить сообщения из разных источников (фактически очередей/тем) в одну очередь/тему, а затем использовать ее. Я пытаюсь разработать приложение для получения сообщений из разных тем в JMS с использованием weblogic.
Объединение сообщений JMS из многих мест назначения в одну очередь
Ответы (2)
Вы можете написать свой собственный «агрегатор» как отдельное Java-приложение:
- Для каждой очереди/темы есть читатель в отдельной ветке.
Каждый читатель снова отправляет полученное сообщение в «агрегированную очередь».
Есть еще один поток для прослушивания в "совокупной очереди".
В качестве варианта вы можете использовать очередь JVM (например, java.util.concurrent.ArrayBlockingQueue
) в качестве "совокупной очереди". Это быстрее, не требует другой очереди MQ, не требует пропускной способности сети, но не является постоянным.
Другая идея состоит в том, чтобы использовать "компонент, управляемый сообщениями (MDB)" для каждой входящей очереди/темы:
- Опять же, каждый из этих MDB просто читает сообщение и повторно отправляет его в «агрегированную очередь».
- Пусть другой MDB прослушивает «совокупную очередь».
Несколько предложений по требованиям к качеству. Я считаю, что вы должны рассмотреть их. Они будут тесно связаны с вашим техническим решением.
такая потеря сообщения приемлема? ack клиента можно было бы рассмотреть. например Очередь памяти находится посередине, например. входящая очередь1...n -> ArrayBlockingQueue в памяти -> исходящая очередь. Данные в ArrayBlockingQueue будут потеряны при сбое приложения.
этот дубликат сообщения приемлем для одиночной исходящей очереди? Я бы предложил да. Установите применимый уровень PossibleDuplicateFlag, чтобы клиент знал об этом.
как быстро входящие сообщения в секунду в очереди входящих diff? один сеанс очереди имеет только уникальный поток. Производительность должна быть рассмотрена заранее.