1
我正在使用mule請求響應虛擬機,並且需要在虛擬機出現一些例外情況(如連接問題)時由VM重新處理回滾消息。但是,當我使用Exchange模式作爲VM的請求響應時,回滾異常策略似乎不起作用。我使用請求響應的原因是我需要知道什麼時候我的所有VM消息都已處理完畢,並在此之後啓動另一個任務。我認爲這種行爲是當有異常時,回滾策略捕獲異常並可能提交它。我沒有看到它嘗試將消息重新傳遞給虛擬機。當交易模式是單向時,它確實有效。爲Mule請求響應回滾異常策略VM
<flow name="vmtransactionrollbackFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/myvm" doc:name="HTTP"/>
<set-payload value="Dummy list payload" doc:name="Set Payload"/>
<foreach doc:name="For Each">
<vm:outbound-endpoint exchange-pattern="request-response" path="myvm" connector-ref="VM" doc:name="VM">
<vm:transaction action="ALWAYS_BEGIN"/>
</vm:outbound-endpoint>
</foreach>
<logger message="DO SOMETHING ONLY AFTER ALL MESSAGES IN VM ARE PROCESSED" level="INFO" doc:name="Logger"/>
</flow>
<flow name="vmtransactionrollbackFlow1">
<vm:inbound-endpoint exchange-pattern="request-response" path="myvm" connector-ref="VM" doc:name="VM">
<vm:transaction action="BEGIN_OR_JOIN"/>
</vm:inbound-endpoint>
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[throw new java.lang.Exception("Test exception");]]></scripting:script>
</scripting:component>
<rollback-exception-strategy maxRedeliveryAttempts="3" doc:name="Rollback Exception Strategy">
<logger message="Rolling back #[payload]" level="INFO" doc:name="Logger"/>
<on-redelivery-attempts-exceeded>
<logger message="Redelivery exhausted:#[payload]" level="INFO" doc:name="Logger"/>
</on-redelivery-attempts-exceeded>
</rollback-exception-strategy>
</flow>
感謝您的迴應,但似乎請求回覆無法應用於交易型虛擬機。所以,在我需要回滾的情況下,這對我的情況是沒有用的。 – rst
最初誤導你的道歉,已經更新了我的答案。 – Sudarshan
再次感謝。在試過這個,它似乎工作正常,但是,我確實看到我的logs.INFO 2015-06-05 10:23:39,499 [[CDS-O] .refresh-item-flow.stage1。 02] org.mule.routing.SynchronousUntilSuccessfulProcessingStrategy:直到成功執行內部異常執行表達式「exception.causedBy(...)」失敗。順便說一句,我想給失敗表達式爲#[exception.causedBy(java.net.SocketException)......]「。 – rst