WSO2消息代理事务回滚

时间:2015-02-23 10:35:06

标签: transactions jms wso2 wso2esb

我已经创建了一个简单的代理服务,它正在侦听Message Broker上的队列。我已经成功实现了JMS Transaction,如果服务遇到任何错误,则消息成功回滚。默认情况下,最大重新发送的数量为10,之后将消息发送到死信通道。

问题:

我希望能够更改以下两种配置:

1)最多重发次数

2)每次重新投放尝试之间的时间

我将在{ESB_HOME} /repository/conf/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} / repository / 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。

1 个答案:

答案 0 :(得分:0)

据我所知,在WSO2 MB的情况下不能这样做。您必须在该消息存储库上设置消息存储库和消息处理器。当你有一个消息处理器时,它可以配置间隔和最大传送尝试。

(或者,您可以设置maxAckWaitTime,这意味着它将至少等待两次重新传递尝试之间的maxAckWaitTime&#39;秒)