Spring Cloud Stream Listener не приостанавливает / не ожидает сообщений в коде тестирования интеграции - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть приложение, которое подключается к RabbitMQ через Spring Cloud Stream, которое отлично работает.

Для Интеграционные тесты Я пытаюсь использовать образец - https://github.com/piomin/sample-message-driven-microservices/blob/master/account-service/src/test/java/pl/piomin/services/account/OrderReceiverTest.java

Однако в моем случае мое приложение отправляет обратно 3 сообщения через некоторое время. Так что, если я поставлю ниже строки, он получает сообщения, но если есть задержка в получении сообщений.

 int i = 1;
    while (i > 0) {
        Message<String> received = (Message<String>) collector.forChannel(channels.statusMessage()).poll();
        if (received != null) {
            LOGGER.info("Order response received: {}", received.getPayload());
        }
    }
  1. Итак, вместо моего пользовательского опроса, есть ли какой-нибудь способ, которым я могу ждать и опрашивать свои сообщения и останавливаться, когда я получаю их?
  2. Я хочу получать сообщения выбора на основе ключа маршрутизации ответа на разные каналы. Является ли это возможным ? -> Пример: если параметр routingKey имеет значение «InProcess», он должен перейти к методу Inprocess.

1 Ответ

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

1) Ваш вопрос совсем не ясен, расширите его и объясните, что именно вы имеете в виду.

2) Ключи маршрутизации используются в Rabbit для маршрутизации в разные очереди, они не используются в рамках для маршрутизации в каналы или методы.

Однако вы можете использовать conditionна @StreamListener (совпадение на headers['amqp_receivedRoutingKey] `), но вместо этого лучше направлять сообщения в разные очереди.

...