给定一个配置有任务执行器的发布 - 订阅通道,如果抛出异常,是否有可能中断其订购订阅者的调用?弹簧整合:有序订阅者发布/订阅通道的异常处理
例如,在此示例中,'已处理'消息仍然由序列中的第二个服务激活器发送。我希望这不会发生。
<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上传失败,我不希望该文件被删除,所以不能调用上行通道的第二个用户。
谢谢加里。在我的测试示例中工作,但可悲的是Amol的AWS扩展不支持request-handler-advice-chain呢! –
我对适配器并不熟悉,但是,除非命名空间支持建议链,否则您应该能够使用 s代替它 - 您只需将处理程序(和建议链)注入到ConsumerEndpointFactoryBean中即可。 –
Gary,“ExpressionEvaluatingRequestHandlerAdvice”是不是将原始标头传递给'AdviceMessage'的构造函数?结果,我失去了一个相关标题。 –