簡體   English   中英

WSO2中的JMS消費者事務

[英]JMS consumer transactions in WSO2

我正在嘗試將WSO2配置為使用來自ActiveMQ的消息,並在處理期間引發錯誤時重新排隊 - 通常是在對遠程Web服務的調用失敗時。

<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>

在axis2.xml中配置Activemq,並將屬性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事務按順序保持打開狀態,以便在后期發生錯誤時可以回滾?

最后,如果在處理期間關閉WSO2服務,則不會將消息重新排隊。 是否有替代這里提出的配置: http//docs.wso2.org/wiki/display/ESB460/JMS+FAQ#JMSFAQ-Howtopreventmessagelossduetounavailabilityofadatasource

紀堯姆

使用已在wso2 ESB中實現的Messagestore和MessageProcessor您可以使用Store和process Technic實現給定的方案! 更多信息可以在保證交付文章[1],DCL的EIP文章[2],消息轉發procssor [3]中找到。

[1] http://wso2.com/library/articles/2014/01/guaranteed-delivery-with-Message-Store-Message-Processor%20/

[2] http://docs.wso2.org/display/IntegrationPatterns/Dead+Letter+Channel

[3] http://docs.wso2.org/display/ESB481/Sample+702%3A+Introduction+to+Message+Forwarding+Processor

我剛遇到同樣的問題。 問題是send mediator是非阻塞的。 將以下屬性添加到您的序列中以使其成為阻塞調用,從而允許會話在失敗后回滾。

<property name="ClientApiNonBlocking" action="remove" scope="axis2"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM