Ошибка отправки RabbitTemplate после удаления обмена - PullRequest
0 голосов
/ 23 января 2019

У меня следующая проблема. Я использую класс RabbitTemplate из spring-rabbit-2.0.5.RELEASE. И отправлять сообщения на разные биржи, используя его. По умолчанию все работает нормально. Но когда одна из бирж удаляется, и нужно обработать много сообщений, возникает проблема с отправкой сообщений на существующую биржу, но не выдается ошибка - сообщения просто отбрасываются.

Код можно упростить до этого. В данном сценарии после удаления обмена EX2 - только часть сообщений будет отправлена ​​на EX1. Простым решением этой проблемы будет добавление Thread.sleep (50) после каждой отправки, но это, очевидно, недопустимо.

    RabbitTemplate rabbitTemplate = new RabbitTemplate();
    for (int i = 0; i < 1000; i++) {
        rabbitTemplate.send("EX1", "RK1", someMessage);
        rabbitTemplate.send("EX2", "RK2", someMessage);
    }

После некоторых исследований я пришел к следующим выводам:

1) Я повторно использую существующий канал - что очевидно

2) После отправки сообщения на несуществующий обменный канал закрывается и, к сожалению, кажется, что он закрывается самим Кроликом, а сообщение о завершении работы отправляется асинхронно драйверу

3) После получения сообщения о закрытом соединении драйвер воссоздает канал, но сообщения, отправленные за это время, теряются

Одним из возможных решений было бы иметь разные каналы для каждого обмена (в моем случае это будет работать, так как я отправляю сообщения только на пару обменов (менее 10)).

Но в целом кажется, что это просто ожидаемое поведение RabbitTemplate (когда вы не используете подтверждения)

1 Ответ

0 голосов
/ 23 января 2019

Я думаю, вам нужно изучить, что такое Издатель подтверждает и возвращает : https://docs.spring.io/spring-amqp/docs/2.1.3.RELEASE/reference/html/_reference.html#cf-pub-conf-ret

Также перейдите по ссылке о Операции с областями действия .

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