Интеграция Spring Внедрите повтор для неудачного сообщения с экспоненциальным откатом в Serviceactivator - PullRequest
0 голосов
/ 04 июля 2018

Я работаю над задачей, которая требует отправки запросов на внешний клиент службы мыла после чтения сообщений в канале сообщений запроса (Queuechannel) с исходным источником ibm mq.
Каналы сообщений получают данные из ibm mq с помощью адаптера, управляемого сообщениями.
Канал сообщений опрашивается poller (включая регулирование, требуемое поставщиком мыльных услуг maxmessagesperchannel), который отправляет эти сообщения моему активатору службы.
Serviceactivator (мыльный клиент), в свою очередь, подключается к сервису soap и возвращает ответ после выполнения некоторой логики на основе значения заголовка в сообщении.
Когда я получаю определенный код ошибки, мне нужно выполнить повторную обработку этого конкретного сообщения.
У меня есть требование от этого внешнего поставщика услуг мыла, чтобы мы повторили или повторно отправили это сообщение экспоненциальным образом, например, 1 с, 1 минуту, 1 час, если последовательные сбои происходят при повторной попытке через 1 с, 1 м и 1 час.
Если по истечении 1 часа повторная попытка не удалась, мы помещаем ее в очередь на ручную проверку, которая в настоящее время не имеет значения.
Чтобы повторить запросы, мы реализовали RequestHandlerCircuitBreakerAdvice в весенней интеграции и добавили пользовательский reprocessingexception (runtimex), который вызывает circuitbreaker и динамически изменяет значение circuitbreakers halfOpenAfter, но это не решает нашу цель.
Как мы удостоверимся, что наш неудавшийся запрос - только тот, который повторяется после размыкания цепи.
Еще одна проблема - poller постоянно работает, когда открыто circuitbreaker, что приводит к сбою других сообщений.
Все сообщения с ошибками идут по умолчанию errorChannel для получения дополнительной информации. Ritesh

1 Ответ

0 голосов
/ 04 июля 2018

Используйте рекомендацию для повторных попыток с ExponentialBackOffPolicy вместо автоматического выключателя.

...