2015-04-24 40 views
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> 

回答

2

是的,我遇到類似的問題,當VM出站使用它表現得更像流REF與每說,因此沒有重新傳遞機構不涉及「排隊」請求 - 響應交換模式。

所以,如果虛擬機的配置爲單向和流處理策略是同步的(VM入站流量),然後重新傳遞確實一命嗚呼了

達到你願意,你可以使用內until-successful範圍是什麼vmtransactionrollbackFlow1流量,特別是對於間歇性連接損失的情況,這實際上是推薦的方法。其中你根本不需要交易。

是否讓我們知道它是如何發展的,以及是否發現其他解決方法。

+0

感謝您的迴應,但似乎請求回覆無法應用於交易型虛擬機。所以,在我需要回滾的情況下,這對我的情況是沒有用的。 – rst

+0

最初誤導你的道歉,已經更新了我的答案。 – Sudarshan

+0

再次感謝。在試過這個,它似乎工作正常,但是,我確實看到我的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