【发布时间】:2013-01-23 04:31:19
【问题描述】:
给定一个配置了任务执行器的发布-订阅通道,如果抛出异常,是否可以中断对其有序订阅者的调用?
例如,在此示例中,“工作”消息仍由序列中的第二个服务激活器发送。我希望这不会发生。
<int:publish-subscribe-channel id="input" task-executor="taskExecutor" />
<int:service-activator
input-channel="input"
order="1"
expression="1 / 0"
output-channel="nullChannel"
/>
<int:service-activator
input-channel="input"
order="2"
expression="'worked'"
output-channel="output"
/>
<int:channel id="output">
<int:queue />
</int:channel>
现实世界的用例稍微复杂一些,因为File 被发布给两个订阅者,一个用于解析它的内容,另一个用于归档到 S3。应用了一个序列,以便稍后在两个任务完成后将它们聚合和删除。
S3 上传是通过不返回回复的出站通道适配器实现的。因此,有一个发布-订阅通道首先调用 S3 适配器(使用order 属性),然后将File 发送到网桥,然后将其放置在收集聚合消息的通道上。
如果S3上传失败,我不希望文件被删除,所以不能调用上游频道的第二个订阅者。
【问题讨论】:
标签: java spring spring-integration enterprise-integration