在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,则不会重新创建队列(通常是)
需要在代理服务上设置该选项:
<proxy name="Myqueue?consumer.exclusive=true&consumer.prefetchSize=0" startOnLoad="true" transports="jms" xmlns="http://ws.apache.org/ns/synapse">
但是,这会在日志中产生错误:
2018-07-31 18:50:02,981 WARN JMSListener - Error registering a MBean with objectname ' org.apache.axis2:Type=Transport,ConnectorName=jms-listener-1065586266,Group=Services,Service=JMS_SMS_MainNotification?consumer.exclusive=true&consumer.prefetchSize=0 ' for JMX management
javax.management.MalFormedObjectNameException:在javax.management.objectName.Construct(objectName.java:618)的属性值部分中的字符“=”无效
但据我所知,替代方案是使用transport.jms.destination(参见https://docs.wso2.com/display/esb490/jms+transport),但这重复了Axis2.xml配置??是这样吗?