2015-10-31 41 views
0

我有一個騾子流,我與交易範圍和回滾例外策略回滾異常及返還的消息再次啓動交易配置多資源交易。但回滾異常策略不會重新傳遞消息。以下是流程配置。騾子事務範圍與回滾例外策略不工作

<ee:multi-transactional action="ALWAYS_BEGIN" doc:name="Transactional"> 
    <db:insert config-ref="MySQL_Configuration" autoGeneratedKeys="true" autoGeneratedKeysColumnIndexes="1" autoGeneratedKeysColumnNames="generated_key" 
    doc:name="Database" transactionalAction="ALWAYS_JOIN"> 
     <db:parameterized-query> 
      <![CDATA[INSERT INTO DEMO(NAME, AGE) VALUES(#[payload.customer.name],#[payload.customer.age])]]> 
     </db:parameterized-query> 
    </db:insert> 
    <component class="org.ram.BusinessComponent" doc:name="Throw Exception" /> 
    <jms:outbound-endpoint queue="${queue.name}" connector-ref="Active_MQ" doc:name="JMS"> 
     <ee:multi-transaction action="ALWAYS_JOIN" /> 
    </jms:outbound-endpoint> 
    <rollback-exception-strategy doc:name="Rollback Exception Strategy" maxRedeliveryAttempts="3"> 
     <logger doc:name="Logger" /> 
     <on-redelivery-attempts-exceeded> 
      <logger level="INFO" doc:name="Logger"/> 
     </on-redelivery-attempts-exceeded> 
    </rollback-exception-strategy> 
</ee:multi-transactional> 

任何人都可以請解決這個問題嗎?

回答

1

您分享的代碼是完整的流程嗎? 您正在計劃在數據庫中插入一些值。因此,事務範圍應該是流程的一部分。 事務範圍將確保範圍內的操作全部成功或將全部失敗。

所以你的情況的DB插入部分轉到OK,出現錯誤,信息無法在JMS隊列來把這麼數據庫插入操作被回滾,這意味着未提交。

像文檔所說: 在這種情況下,提交要麼完全完成,要麼成功,要麼不完整,並且失敗。即使部分完成,提交或交易也會失敗。在交易失敗的情況下,Mule會回滾交易中的操作,以便任何人都不會導致部分完成。

如果你想還船消息應該被保留的地方,嘗試使用虛擬機隊列,並把它們作爲一個「緩衝」。

看一看這兩個例子: https://www.mulesoft.com/exchange#!/using-transactional-scope-in-jms-to-database

https://www.mulesoft.com/exchange#!/jms-message-rollback-redelivery