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