Повторная попытка является частью адаптера исходящего канала, когда вы пытаетесь отправить сообщение внешней службе. См. RequestHandlerRetryAdvice
и как его настроить в Справочном руководстве .
Для задачи ожидания подтверждения я бы предложил агрегатор с MessageCountReleaseStrategy(2)
и некоторыми CorrelationStrategy
, которые могут группировать запрос и подтверждать его. Таким образом, вы не покинете агрегатор, пока не придет подтверждение.
Этот агрегатор должен быть вторым подписчиком PublishSubscribeChannel
, где первым из них будет адаптер исходящего канала для отправки запроса во внешнюю систему.
Теперь хитрость.
Чтобы заблокировать вашего отправителя до получения подтверждения, вам нужно обернуть вызов в @MessagingGateway
, и ответ (ответ) должен прийти из этого агрегатора.
Я бы посоветовал сделать replyChannel
шлюза также PublishSubscribeChannel
. Таким образом, второй подписчик будет вашим активатором службы для обработки подтверждения из освобожденной группы в агрегаторе. Между тем, первый подписчик - это шлюз, ожидающий ответа.
Процесс вызова не сможет отправить следующее сообщение, пока не ответит на предыдущее.
Я знаю, что это сложно, но с вашим требованием заблокировать отправку делает слишком сложно.