Использовать сообщение RabbitMQ всеми @ RabbitListener-s в Spring Boot - PullRequest
0 голосов
/ 12 декабря 2018

Я настраиваю пример, чтобы проверить, может ли RabbitMQ решить мою проблему, и я столкнулся с проблемой.

Задача: у меня есть 3 машины за шлюзом, и только у одной из них есть необходимые данные для обработки сообщения.Это я хочу решить с проверкой состояния.

Проблема: я попытался настроить несколько прослушивателей для эмуляции ситуации, как если бы несколько машин принимали сообщение.

@RabbitListener(queues = "spring-boot")
public void receiveMessage1(String message) {
    if(canProcess()){
        System.out.println("Received 1 <" + message + ">");
    }
}

@RabbitListener(queues = "spring-boot")
public void receiveMessage2(String message) {
    if(canProcess()){
        System.out.println("Received 2 <" + message + ">");
    }
}

Однако только один случайный слушатель обрабатывает сообщение.Другие просто не понимают этого.У меня есть способ, которым все слушатели потребляют его, и я сам решаю, какой из них обрабатывает его методом canProcess?

1 Ответ

0 голосов
/ 12 декабря 2018

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

Я нашел эту статью, которая охватывает этот тип архитектуры https://derickbailey.com/2015/07/22/airport-baggage-claims-selective-consumers-and-rabbitmq-anti-patterns/

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