2015-02-23 109 views
2

我做了一個簡單的代理服務,它正在Message Broker上的隊列上進行偵聽。我已經成功實現了JMS事務,如果服務遇到任何錯誤,則消息成功回滾。默認情況下,最大重發次數爲10次,之後將消息發送到死信通道。WSO2 Message Broker事務回滾

問題:

我希望能夠改變以下兩種配置:

1)重新交付的最大數量

2)每個時間重新傳遞嘗試之間

我將在哪裏做這些配置,在我的{ESB_HOME}/repository/co nf/axis2/axis2.xml文件或在我的Message Broker中。

以下是我目前的axis2.xml的配置

<!--Uncomment this and configure as appropriate for JMS transport support with WSO2 MB 2.x.x --> 
    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener"> 
     <parameter name="myTopicConnectionFactory" locked="false"> 
      <parameter name="java.naming.factory.initial" locked="false">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter> 
      <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter> 
      <parameter name="transport.jms.SessionTransacted">true</parameter> 
      <parameter name="transport.jms.SessionAcknowledgement" locked="true">CLIENT_ACKNOWLEDGE</parameter> 
      <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">TopicConnectionFactory</parameter> 
      <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter> 
     </parameter> 

     <parameter name="myQueueConnectionFactory" locked="false"> 
      <parameter name="java.naming.factory.initial" locked="false">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter> 
      <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter> 
      <parameter name="transport.jms.SessionTransacted">true</parameter> 
      <parameter name="transport.jms.SessionAcknowledgement" locked="true">CLIENT_ACKNOWLEDGE</parameter> 
       <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter> 
      <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> 
     </parameter> 

     <parameter name="default" locked="false"> 
      <parameter name="java.naming.factory.initial" locked="false">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter> 
      <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter> 
      <parameter name="transport.jms.SessionTransacted">true</parameter> 
      <parameter name="transport.jms.SessionAcknowledgement" locked="true">CLIENT_ACKNOWLEDGE</parameter> 
      <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter> 
      <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> 
     </parameter> 
    </transportReceiver> 

注: 我使用WSO2 4.8.1和WSO2 Message Broker的2.2.0。

我發現:

我已經找到了解決方案,即再交付的最大數量第一個值,我們可以配置通過編輯這個數值在{$ MB_HOME}標籤/庫/ conf/advanced/andes-config.xml文件。

<maximumNumberOfMessageDeliveryAttempts>10</maximumNumberOfMessageDeliveryAttempts> 

無法找到: 什麼,我無法找到是,我可以改變每個交還嘗試之間的延遲時間的配置。之前我使用ActiveMQ作爲消息代理,在其中我們可以在我們的{$ ESB_HOME} /repository/conf/axis2/axis2.xml文件中添加以下參數。

<parameter name="redeliveryPolicy.redeliveryDelay" locked="true">1200000</parameter> 

我想在WSO2 Message Broker中做同樣的事情,但我無法找到任何配置。我嘗試了上面提到的參數,但它不適用於WSO2 MB。

+0

在這種情況下,您可能需要使用消息存儲來配置這些參數。 [1] -http://wso2.com/library/articles/2011/12/implementing-store-forward-messaging-patterns-wso2esb-part-2/ – harsha89 2015-02-23 11:43:41

+0

我正在使用WSO2 Message Broker(2.2.0)。我的問題是特定於此Message Broker。我知道我必須改變配置,但我沒有找到我可以做出上述調整的地方。或者你的意思是說,除此之外,我必須使用單獨的消息存儲。但這沒有任何意義?請原諒我的無知。 – 2015-02-23 11:57:48

回答

0

據我所知在WSO2 MB的情況下不能這樣做。您必須設置一個消息存儲和一個消息處理器來保護該消息存儲。當你有一個消息處理器時,它可以配置間隔和最大發送次數。

(或者,也可以設置在maxAckWaitTime,這意味着它將等待至少 'maxAckWaitTime' 兩次重新傳遞嘗試之間秒)