Spring Integration отправляет сообщение, пока не произойдет пользовательское событие - PullRequest
0 голосов
/ 07 ноября 2018

Я не хочу отправлять некоторые данные во внешнее программное обеспечение, имеющее собственный протокол связи.

Это абстрактный рабочий процесс.

Отправка событий приложения

  1. Отправить сообщение
  2. Ожидать сообщение ACK
  3. Обработать ACK (сообщить, если что-то не так в сообщении, с помощью кодов возврата в ACK)
  4. Отправить следующее сообщение

Обработка ACK

  1. Обработка ACK
  2. Отчет
  3. Отправить полученное событие ACK для разблокировки отправителя, чтобы следующее сообщение могло быть отправлено

Итак, какая конечная точка или канал является правильным выбором для этой цели?

SI - ПОТОК

1 Ответ

0 голосов
/ 08 ноября 2018

Повторная попытка является частью адаптера исходящего канала, когда вы пытаетесь отправить сообщение внешней службе. См. RequestHandlerRetryAdvice и как его настроить в Справочном руководстве .

Для задачи ожидания подтверждения я бы предложил агрегатор с MessageCountReleaseStrategy(2) и некоторыми CorrelationStrategy, которые могут группировать запрос и подтверждать его. Таким образом, вы не покинете агрегатор, пока не придет подтверждение.

Этот агрегатор должен быть вторым подписчиком PublishSubscribeChannel, где первым из них будет адаптер исходящего канала для отправки запроса во внешнюю систему.

Теперь хитрость.

Чтобы заблокировать вашего отправителя до получения подтверждения, вам нужно обернуть вызов в @MessagingGateway, и ответ (ответ) должен прийти из этого агрегатора.

Я бы посоветовал сделать replyChannel шлюза также PublishSubscribeChannel. Таким образом, второй подписчик будет вашим активатором службы для обработки подтверждения из освобожденной группы в агрегаторе. Между тем, первый подписчик - это шлюз, ожидающий ответа.

Процесс вызова не сможет отправить следующее сообщение, пока не ответит на предыдущее.

Я знаю, что это сложно, но с вашим требованием заблокировать отправку делает слишком сложно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...