Циклический канал для обновления заголовка, чтобы разместить файл в нескольких целях - PullRequest
0 голосов
/ 12 ноября 2018

Попытка поместить файл в несколько каталогов, используя один исходящий шлюз, используя spring -gration-file.I Я знаю, что с таким канальным адаптером невозможно отправлять несколько каталогов одновременно.

Чтобы добиться этого, необходимо иметь цикл перед файлом: outbound-gateway, чтобы изменять целевой каталог заголовка сообщения на каждой итерации и отправлять их все в один и тот же канал снова и снова.

Но получаю исключение, как указано ниже.

Любое предложение, как зациклить его или обновить заголовок и снова запустить адаптер

файл: Исходящий шлюз:

<!-- header enricher -->
    <integration:header-enricher input-channel="filesHeaderEnricherChannel" output-channel="filesOut">
       <integration:header name="TARGET_COUNT" method="getTargetCount" ref="headerEnricher"/>
            <integration:header name="TARGET_DIR" method="getTargetPath" ref="headerEnricher"/>     
    </integration:header-enricher>

    <integration:chain id="filesOutChain" input-channel="filesOut">
        <integration:transformer expression="headers.FILE"/>
            <file:outbound-adapter id="fileMover" 
                auto-create-directory="true"
                directory-expression="headers.TARGET_DIR"
                mode="REPLACE">
                <file:request-handler-advice-chain>
                    <ref bean="retryAdvice" />
                </file:request-handler-advice-chain>
            </file:outbound-adapter>    
       </integration:chain> 

<!-- decreasing the count on each loop -->
<!-- looping to header enricher channel again as output channel to update the target directory -->
           <integration:filter input-channel="filesOut"  expression="headers.TARGET_COUNT != 0" output-channel="filesHeaderEnricherChannel"
                    discard-channel="filesArchiveChannel" throw-exception-on-rejection="true">
                    <integration:request-handler-advice-chain>
                    <ref bean="retryAdvice" />
                    </integration:request-handler-advice-chain>
        </<integration:filter>

1 Ответ

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

Вам не нужно иметь <integration:gateway request-channel="filesOutChainChannel" в конце вашей цепочки. вам просто нужно настроить цепочку для вывода в filesOutChainChannel, и там в фильтре кажется, что вы все делаете правильно.

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

...