Как использовать Spring Integration, чтобы потребители получали только одно сообщение из очереди? - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь реализовать удаленное разбиение в пакете Spring, используя интеграцию Spring с одной очередью RabbitMQ и двумя JVM. В первой JVM работает ведущий и один подчиненный, а во второй JVM работает еще один подчиненный. Цель состоит в том, чтобы мастер отправил два сообщения в очередь, и чтобы подчиненные получали только одно сообщение.

Вот все, что я пробовал:

  • Test1 : потребители, управляемые событиями, с прямым каналом и режимом подтверждения по умолчанию (AUTO)
  • Результат : Оба ведомых устройства одновременно получали оба сообщения, и сообщения оставались в очереди до завершения транзакции обработки.
  • Test2 : потребители, управляемые событиями, с прямым каналом и режимом подтверждения NONE
  • Результат : оба сообщения были получены одним рабом сразу, а второй не видит никаких сообщений.


  • Test3 : опрос потребителей с каналом очереди и MaxMessagesPerPoll, установленным в 1, и интервалом опроса в одну минуту. Я попытался использовать все режимы подтверждения и получил тот же результат.

  • Результат : Оба сообщения были получены одним ведомым устройством и обработаны с периодом ожидания в одну минуту между ними, а второе ведомое устройство не видит никаких сообщений. По крайней мере, я ожидал увидеть одно сообщение в очереди в течение одного минуты ожидания, но по какой-то причине я не увидел ни одного сообщения в очереди.

Может кто-нибудь объяснить это поведение, и есть ли у вас какие-либо идеи о том, как я могу заставить каждого раба воспринимать только одно сообщение?

Кроме того, мне интересно, есть ли способ в Spring Batch Partitioning и Spring интеграции посылать два сообщения в две отдельные очереди. Кажется, это более чистое решение, поэтому нам не приходится иметь дело с этими конфликтами между рабами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...