2015-02-23 79 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' 两次重新传递尝试之间秒)