我試圖將WSO2配置爲使用來自ActiveMQ的消息,並且在處理過程中出現錯誤時(通常是對遠程Web服務的調用失敗時)重新進行請求。WSO2中的JMS消費者事務
<proxy name="SimpleStockQuoteService" transports="jms" startOnLoad="true">
<target>
<inSequence onError="JSMErrorHandling">
<log level="full"/>
<send>
<endpoint>
<address uri="http://localhost/testapp"/>
</endpoint>
</send>
<log level="full"/>
<log level="custom">
<property name="Custom log" value="End In Sequence"/>
</log>
</inSequence>
<outSequence>
...
</outSequence>
</target>
</proxy>
<sequence name="JSMErrorHandling">
<log level="custom">
<property name="Error" value="Error executing sequence"/>
</log>
<property name="SET_ROLLBACK_ONLY" value="true" scope="axis2"/>
<drop/>
</sequence>
ActiveMQ是在axis2.xml配置成與屬性transport.jms.SessionTransacted設置爲true。
當遠程URL的格式無效(例如使用錯誤的協議)時,JMS回滾/重新傳送/ [重定向到死信]功能將按預期工作。 但是,如果我停止遠程Web服務器或使用invlaid服務器名稱,則不會重新發送消息,儘管錯誤由JMSErrorHandling序列處理。
下面是從日誌
[2013-06-04 12:17:47,810] INFO - LogMediator To: , WSAction: urn:mediate, SOAPAction: urn:mediate, MessageID: ID:GCHESNEL764-57101-1370344525419-9:1:1:1:1, Direction: request, Envelope: <?xml ver
[2013-06-04 12:17:47,813] INFO - LogMediator To: , WSAction: urn:mediate, SOAPAction: urn:mediate, MessageID: ID:GCHESNEL764-57101-1370344525419-9:1:1:1:1, Direction: request, Envelope: <?xml ver
[2013-06-04 12:17:47,814] INFO - LogMediator Custom log = End In Sequence
[2013-06-04 12:17:48,818] WARN - ConnectCallback Connection refused or failed for : localhost/127.0.0.1:80
[2013-06-04 12:17:48,821] WARN - EndpointContext Endpoint : endpoint_413907dd1d4e2370ea0ae277fbfebcaf6504f196a11459bb will be marked SUSPENDED as it failed
[2013-06-04 12:17:48,823] WARN - EndpointContext Suspending endpoint : endpoint_413907dd1d4e2370ea0ae277fbfebcaf6504f196a11459bb - current suspend duration is : 30000ms - Next retry after : Tue J
[2013-06-04 12:17:48,824] INFO - LogMediator Error = Error executing sequence
它看起來像WSO2正在HTTP調用和異步請求之前,是失敗的JMS事務被提交一個摘錄。這種行爲可以配置嗎?
如果需要進一步處理 - 即鏈接遠程服務調用 - 如何確保JMS事務在out序列中保持打開狀態,以便在後期發生錯誤時可以回滾它?
最後,如果WSO2服務在處理過程中被關閉,則不會重新發送消息。有沒有在這裏提出的配置的替代方法:http://docs.wso2.org/wiki/display/ESB460/JMS+FAQ#JMSFAQ-Howtopreventmessagelossduetounavailabilityofadatasource
紀堯姆
這不回答這個問題,它只是一個推WSO2 EIP模式。 – SKYWALKR