Несколько потребителей в одной очереди JMS - PullRequest
0 голосов
/ 05 апреля 2019

В очереди JMS есть 2 потребителя, синхронный и асинхронный процесс приложения Java, ожидающий ответа.1) Синхронное приложение отправляет запрос и будет ожидать ответа в течение 60 секунд на основе идентификатора корреляции JMS.2) Асинхронный поток будет постоянно прослушивать одну и ту же очередь.

В этом случае, когда ответ получен в очереди в течение 60 секунд, я ожидаю, что нагрузка распределяется как на синхронное, так и на асинхронное приложение.Однако по неизвестной причине почти все ответные сообщения потребляются синхронным процессом.И только в некоторых случаях сообщения обрабатываются асинхронным процессом.

Существуют ли факторы, которые могут привести к тому, что только синхронное приложение выберет почти все сообщения?

1 Ответ

0 голосов
/ 05 апреля 2019

Обычно нет гарантии, что нагрузка будет распределена равномерно, особенно если она синхронная и асинхронная. потребитель. Синхронному потребителю придется опрашивать, ждать, опрашивать, ждать, пока выполняется асинхронная синхронизация. Потребитель, вероятно, ожидает на сокете в отдельном потоке, пока не придет сообщение, и затем вызовет ваш обратный вызов. Так что асинхронно. потребитель всегда будет там первым.

Есть ли шанс, что вы сможете перейти в разделы "Темы" и отбросить сообщения, которые вам не нужны? Или измените свою синхронизацию. потребитель будет асинхронным? Другой альтернативой может быть создание небольшого шлюза asnyc перед вашим синхронным потребителем: небольшое приложение, которое выполняет асинхронное потребление и затем копирует каждое полученное сообщение во вторую очередь, где происходит синхронизация. потребитель поднимает это. В зависимости от вашего провайдера JMS он может уже поддерживать этот тип «моста JMS» - что вы используете?

...