Я пытаюсь реализовать удаленное разбиение в пакете Spring, используя интеграцию Spring с одной очередью RabbitMQ и двумя JVM. В первой JVM работает ведущий и один подчиненный, а во второй JVM работает еще один подчиненный. Цель состоит в том, чтобы мастер отправил два сообщения в очередь, и чтобы подчиненные получали только одно сообщение.
Вот все, что я пробовал:
- Test1 : потребители, управляемые событиями, с прямым каналом и режимом подтверждения по умолчанию (AUTO)
- Результат : Оба ведомых устройства одновременно получали оба сообщения, и сообщения оставались в очереди до завершения транзакции обработки.
- Test2 : потребители, управляемые событиями, с прямым каналом и режимом подтверждения NONE
Результат : оба сообщения были получены одним рабом сразу, а второй не видит никаких сообщений.
Test3 : опрос потребителей с каналом очереди и MaxMessagesPerPoll, установленным в 1, и интервалом опроса в одну минуту. Я попытался использовать все режимы подтверждения и получил тот же результат.
- Результат : Оба сообщения были получены одним ведомым устройством и обработаны с периодом ожидания в одну минуту между ними, а второе ведомое устройство не видит никаких сообщений. По крайней мере, я ожидал увидеть одно сообщение в очереди в течение одного минуты ожидания, но по какой-то причине я не увидел ни одного сообщения в очереди.
Может кто-нибудь объяснить это поведение, и есть ли у вас какие-либо идеи о том, как я могу заставить каждого раба воспринимать только одно сообщение?
Кроме того, мне интересно, есть ли способ в Spring Batch Partitioning и Spring интеграции посылать два сообщения в две отдельные очереди. Кажется, это более чистое решение, поэтому нам не приходится иметь дело с этими конфликтами между рабами.