Узнайте, как очистить хранилище, если у нас есть исключение между Splitter и Aggregator или списка получателей-маршрутизатора и Aggregator в Spring Integration - PullRequest
0 голосов
/ 08 марта 2019

Я новичок в весенней интеграции, и мы создали поток SI, в котором у нас есть Splitter и Aggregator, а также список получателей-маршрутизатор и агрегатор. Сегодня, проверяя код, я запутался в том, как Aggregator очистит свое хранилище, если между ними возникнет исключение. Меня беспокоит сценарий, в котором мы получили исключение между потоком и тем, что в системе создается объект устаревшего состояния. Я проверил документацию по интеграции пружин, но не повезло (https://docs.spring.io/spring-integration/docs/2.0.0.RC1/reference/html/aggregator.html). Я вижу только одну тему «Управление состоянием в агрегаторе: MessageGroupStore», но это касается «закрытия приложений».

Кроме того, я сделал Google для того же, и я нашел одну ветку https://dzone.com/articles/spring-integration-robust, но не в состоянии много следовать. Конечно, я вернусь, если смогу найти какое-то решение.

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

Можете ли вы направить меня

т.е:

<int:recipient-list-router input-channel="inputChannel" 
        default-output-channel="nullChannel">
        <int:recipient channel="aInputChannel" />
         <int:recipient channel="bInputChannel" />
</int:recipient-list-router>

<int:service-activator ref="aHandler"
        input-channel="aInputChannel" output-channel="aggregatorOutputChannel" />

<!-- we have exception in the bHandler -->
<int:service-activator ref="bHandler"
        input-channel="bInputChannel" output-channel="aggregatorOutputChannel" />


<int:aggregator input-channel="aggregatorOutputChannel"
        output-channel="outputChannel" />

OR

<int-file:splitter id="splitile"
        charset="UTF-8" apply-sequence="true" iterator="false"
        input-channel="inputChannel"
        output-channel="bTransformerChannel" />
<!-- consider we have exception at 4th chunk -->
<int:service-activator ref="transform"
        input-channel="bTransformerChannel" output-channel="aggregatorOutputChannel" />
<int:aggregator input-channel="aggregatorOutputChannel"
            output-channel="outputChannel" />

1 Ответ

0 голосов
/ 08 марта 2019

Да; агрегатор по умолчанию является «пассивным» компонентом - все действия выполняются при поступлении сообщения.

Для тайм-аута устаревших групп вы можете использовать жнеца или, с более поздними версиями, group-timeout.

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