Я работаю над задачей, которая требует отправки запросов на внешний клиент службы мыла после чтения сообщений в канале сообщений запроса (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