Как сообщить моему приложению (производителю), что оно заблокировано сервером ActiveMQ?

Я использую Artemis ActiveMQ для внутренних асинхронных процессов моего приложения.
Вся логика подключения обрабатывается Spring Integration.
Я столкнулся со сценарием нехватки дискового пространства на сервере artemis. Это привело к тому, что сервер artmeis заблокировал моих производителей сообщений без каких-либо предупреждений (кроме предупреждения в журнале сервера artemis). Однако это может быть любой другой сценарий блокировки.
Приложение продолжало создавать сообщения, не зная, что сообщения не записываются в очередь.
Как мое приложение (производитель) может быть проинформировано о такой проблеме инфраструктуры , поэтому я могу генерировать исключение или регистрировать ошибку, которая будет видна в конце моих приложений.


person madarinho    schedule 25.04.2018    source источник


Ответы (2)


Если ваше приложение отправляет сообщения асинхронно, у него нет возможности узнать о проблемах с отправкой сообщения (за исключением проблем, которые возникают конкретно на клиенте). Асинхронная отправка сообщений - это «выстрелил и забыл»; клиент просто отправляет их и не заботится о том, что с ними происходит. Вам нужно будет отправить их синхронно, чтобы получить какое-либо указание на проблему у брокера.

person Justin Bertram    schedule 25.04.2018

Как и ActiveMQ, сервер Artemis поддерживает управление потоком производителей ( лично никогда не пользовался). Хотя в документации по ActiveMQ прямо указано, что это также относится к производителям асинхронного кода при условии, что вы установили Размер окна производителя на фабрике соединений, в документации Artemis об этом ничего не говорится. Но концепция окон остается прежней. Вероятно, тебе стоит попробовать.

person Ralf    schedule 26.04.2018