【发布时间】:2019-01-07 23:54:13
【问题描述】:
在 wso2esb-5.0.0 中使用代理服务侦听 jms 队列,如何使用 activemq consumer.exclusive=true 属性? 我在axis2.xml中有以下配置:
<transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
<parameter name="default" locked="false">
<parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
<parameter name="java.naming.provider.url" locked="false">failover:(tcp://V1-AMQ01:61616,tcp://V1-AMQ02:61616)?jms.nonBlockingRedelivery=true&nested.consumer.exclusive=true</parameter>
<parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
<parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
<parameter name="transport.jms.SessionTransacted">true</parameter>
<parameter name="transport.jms.SessionAcknowledgement" locked="true">CLIENT_ACKNOWLEDGE</parameter>
<parameter name="transport.Transactionality" locked="true">local</parameter>
<parameter name="redeliveryPolicy.maximumRedeliveries" locked="true">-1</parameter>
<parameter name="redeliveryPolicy.redeliveryDelay">4000</parameter>
<parameter name="transport.jms.CacheLevel" locked="true">consumer</parameter>
<parameter name="redeliveryPolicy.initialRedeliveryDelay">4000</parameter>
<parameter name="redeliveryPolicy.maximumRedeliveryDelay">864000</parameter>
<parameter name="redeliveryPolicy.useExponentialBackOff">true</parameter>
<parameter name="redeliveryPolicy.backOffMultiplier">3</parameter>
</parameter>
</transportReceiver>
我在 jms 队列上侦听的所有代理服务都使用此配置。 esb 不使用任何消息。当我删除“&nested.consumer.exclusive=true”时,它会正确使用消息。 如果我查看 activemq 控制台,我会在队列中看到 0 个消费者(通常为 1 个) 如果我删除队列并重新启动 esb,则不会重新创建队列(通常是)
【问题讨论】:
-
目标是在故障转移配置中有 2 个 esb,但消息的处理只发生在一个 esb 上,而其他的只是等到出现问题。还有其他方法可以实现吗?