循环通道更新 header enricher 以将文件放置在多个目标中
Looping channel to update the header enricher to place file in multiple targets
尝试使用 spring-integration-file 使用单个出站网关将文件放置在多个目录中。我知道使用这样的通道适配器不可能一次发送到多个目录。
为了实现这一点,在 file:outbound-gateway 前面有一个循环,以在每次迭代时修改消息 header 目标目录,并一次又一次地将所有消息发送到同一个通道.
但如下所述出现异常。
关于如何循环它或更新 header 并再次执行适配器的任何建议
文件:出站网关:
<!-- 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>
您不需要在链的末尾有一个 <integration:gateway request-channel="filesOutChainChannel"
。您应该只配置一个链以输出到 filesOutChainChannel
并且在过滤器中看起来您做对了。
网关等待回复的问题,但由于您将其循环到 filesHeaderEnricherChannel
后面,您会一次又一次地增加等待网关的调用堆栈。
尝试使用 spring-integration-file 使用单个出站网关将文件放置在多个目录中。我知道使用这样的通道适配器不可能一次发送到多个目录。
为了实现这一点,在 file:outbound-gateway 前面有一个循环,以在每次迭代时修改消息 header 目标目录,并一次又一次地将所有消息发送到同一个通道.
但如下所述出现异常。
关于如何循环它或更新 header 并再次执行适配器的任何建议
文件:出站网关:
<!-- 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>
您不需要在链的末尾有一个 <integration:gateway request-channel="filesOutChainChannel"
。您应该只配置一个链以输出到 filesOutChainChannel
并且在过滤器中看起来您做对了。
网关等待回复的问题,但由于您将其循环到 filesHeaderEnricherChannel
后面,您会一次又一次地增加等待网关的调用堆栈。