我希望在我的文件入站通道适配器的处理程序中发送另一个通道,如果某些条件值得信息。有时入站文件超出了规范值,我想将文件发送到错误目录,但不会中断入站流向出站,因为即使超出规范文件仍需要转到辅助位置。
我的配置示例:
<int-file:inbound-channel-adapter id="filesIn"
directory="${input.path}"
filename-regex="\\d{8}-\\d+\\.txt">
<int:poller id="poller" fixed-rate="500"/>
</int-file:inbound-channel-adapter>
<int-file:file-to-string-transformer input-channel="filesIn"
output-channel="strings"
delete-files="true" />
<int:channel id="strings"/>
<int:channel id="errorChannel" />
<int:exception-type-router input-channel="strings"
default-output-channel="output">
<int:mapping exception-type="ca.uhn.hl7v2.HL7Exception"
channel="errorChannel"/>
</int:exception-type-router>
<int:service-activator input-channel="output"
output-channel="archive"
ref="handler" method="handleString"/>
<int:service-activator input-channel="errorChannel"
output-channel="errorOutput"
ref="handler" method="handleError" />
<int-file:outbound-channel-adapter id="archive"
directory="${archive.path}"
delete-source-files="true"/>
<int-file:outbound-channel-adapter id="errorOutput"
directory="${hl7.error.path}"/>
<bean id="handler" class="com.giotta.service.Hl7MessageConsumer"/>
答案 0 :(得分:1)
从术语的角度来看,入站适配器没有“处理程序”。根据类型,它们可以是消息源或消息生成器。
也就是说,您可以在入站适配器后立即添加路由器,并根据您想要的任何条件路由到不同的渠道。
修改强>
在尝试将String解析为HL7消息时,Hl7MessageConsumer中抛出异常
但你现在有
...&GT;变压器 - &GT; etr-&GT; handler-&GT; ...
即。 etr在之前处理程序。
你需要像...这样的东西。
<int-file:inbound-channel-adapter id="filesIn"
directory="${input.path}"
filename-regex="\\d{8}-\\d+\\.txt">
<int:poller id="poller" fixed-rate="500" error-channel="errorChannel" />
</int-file:inbound-channel-adapter>
<int-file:file-to-string-transformer input-channel="filesIn"
output-channel="strings"
delete-files="true" />
<int:channel id="strings"/>
<int:service-activator input-channel="strings"
output-channel="archive"
ref="handler" method="handleString"/>
<int-file:outbound-channel-adapter id="archive"
directory="${archive.path}"
delete-source-files="true"/>
<int:channel id="errorChannel" />
<int:service-activator input-channel="errorChannel"
output-channel="errorOutput"
ref="handler" method="handleError" />
<int-file:outbound-channel-adapter id="errorOutput"
directory="${hl7.error.path}"/>
<bean id="handler" class="com.giotta.service.Hl7MessageConsumer"/>
即。轮询器捕获异常并将ErrorMessage
路由到错误通道。错误消息有效内容是MessagingException
,包含两个属性(cause
和failedMessage
)。
<强> EDIT2 强>
除了“errorOutput”适配器之外,我仍然希望字符串转到“archive”适配器。
在那种情况下......
<int:publish-subscribe-channel id="errorChannel" />
<int:service-activator input-channel="errorChannel"
output-channel="errorOutput"
ref="handler" method="handleError" />
<int:transformer input-channel="errorChannel"
output-channel="archive" expression="payload.failedMessage" />