Как работает механизм связывания Spring-Cloud-Stream-Rabbit-Binder, если активирован сигнал тревоги диска или памяти RabbitMQ? - PullRequest
0 голосов
/ 14 февраля 2019

Версии:

Spring-cloud-stream-starter-rabbit -> 2.1.0.RELEASE

RabbitMQ -> 3.7.7

Erlang -> 21,1


(1) Я создал образец mq-publisher-demo & mq-subscriber-демо репозитории на github для справки.

image

Когда был активирован сигнал тревоги памяти

Publisher : удалось опубликовать сообщения.

Подписчик : похоже, подписчик получал сообщения в пакете с небольшими задержками.

При активации Disk Alarm

Publisher : удалось публиковать сообщения.

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

Будут ли буферизованы сообщения где-нибудь?

Это ожидаемоеповедение?(поскольку я ожидал, что RabbitMQ прекратит получать сообщения от издателя, и подписчик никогда не получит никаких последующих сообщений после активации любого из сигналов тревоги.)

(2) SpringДокумент Cloud Stream говорит ниже.Означает ли это вышеупомянутое поведение?(избегая взаимоблокировок и продолжайте публиковать сообщения издателем)

Начиная с версии 2.0, RabbitMessageChannelBinder устанавливает для свойства RabbitTemplate.userPublisherConnection значение true, чтобы не транзакционные производители избегали взаимных блокировок для потребителей, что может произойти, есликэшированные соединения блокируются из-за тревоги памяти на брокере.

(3) Есть ли у нас что-то подобное для Disk alarm, чтобы избежать взаимоблокировок?

(4) Если сообщение производителя не будет принято RabbitMQ, то возможно ли выдать определенное исключение издателю из Spring-Cloud-Stream (о том, что активированы аварийные сигналы и произошла ошибка публикации)?

Я в новинку об этих тревогах в весеннем облачном потоке, пожалуйста, помогите мне разобраться ясно.Благодарю вас.

1 Ответ

0 голосов
/ 14 февраля 2019

Лучше задать вопросы о поведении самого RabbitMQ (и Java-клиента, который использует Spring) в группе Google rabbitmq-users;вот где тусуются инженеры RabbitMQ.

(2) В документе Spring Cloud Stream говорится ниже.Означает ли это вышеупомянутое поведение?

Это изменение было сделано так, что если производители заблокированы от производства, потребители все равно могут потреблять.

(4) Если сообщение производителя не будет принято RabbitMQ,тогда возможно ли выдать определенное исключение издателю из весеннего облачного потока (говоря, что тревоги активированы и публикация сообщения не удалась)?

Публикация по умолчанию асинхронная;вы можете включить транзакции (которые могут сильно снизить производительность; или включить ошибки для производителя, и вы получите асинхронное сообщение в канале ошибок, если вы включите подтверждение издателя и возврат.

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