【问题标题】:WSO2 Message Broker Transaction RollbackWSO2 消息代理事务回滚
【发布时间】:2023-03-05 17:09:01
【问题描述】:

我制作了一个简单的代理服务,它正在侦听 Message Broker 上的队列。我已经成功实现了 JMS 事务,如果服务遇到任何错误,消息就会成功回滚。默认情况下,最大重新传递次数为 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] -wso2.com/library/articles/2011/12/…
  • 我正在使用 WSO2 Message Broker(2.2.0)。我的问题特定于此消息代理。我知道我必须更改配置,但我找不到可以进行更改以进行上述调整的地方。还是您的意思是说除此之外我还必须使用单独的消息存储。但这没有任何意义吗?请原谅我的无知。

标签: transactions jms wso2 wso2esb


【解决方案1】:

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

(或者,您可以设置 maxAckWaitTime,这意味着它会在两次重新发送尝试之间等待至少 'maxAckWaitTime' 秒)

【讨论】:

    猜你喜欢
    • 2018-10-24
    • 2015-07-17
    • 2016-03-07
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    相关资源
    最近更新 更多