給定一個配置有任務執行器的發佈 - 訂閱通道,如果拋出異常,是否有可能中斷其訂購訂閱者的調用?彈簧整合:有序訂閱者發佈/訂閱通道的異常處理
例如,在此示例中,'已處理'消息仍然由序列中的第二個服務激活器發送。我希望這不會發生。
<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'的構造函數?結果,我失去了一個相關標題。 –