【发布时间】:2018-05-25 00:48:18
【问题描述】:
我正在为我的项目使用 WSO2 ESB 5.0.0 和 Apache activeMQ 5.14。我正在使用正在侦听队列的 jms 代理,并且代理正在使用 jms 消息存储来存储消息。还有一个消息处理器将从该消息存储中获取这些消息以进行进一步处理。
但是在重新启动 WSO2 服务器后,卡在队列中的消息正在出队并消失。
WSO2 有没有办法存储这些消息?
这是我的代理服务:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="abcMQ"
startOnLoad="true"
statistics="disable"
trace="disable"
transports="jms">
<target>
<inSequence>
<log level="full" separator="**Consumed from abc IN Seq**"/>
<property name="DISABLE_CHUNKING"
scope="axis2"
type="STRING"
value="true"/>
<store messageStore="TEST"/>
</inSequence>
<outSequence>
<send/>
</outSequence>
<faultSequence/>
</target>
<parameter name="transport.jms.Destination">req.Q</parameter>
<parameter name="transport.jms.ContentType">application/XML</parameter>
<description/>
</proxy>
消息存储TEST如下:
<messageStore name="TEST" class="org.apache.synapse.message.store.impl.jms.JmsStore" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
<parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
<parameter name="store.jms.destination">TEST.Q</parameter>
<parameter name="store.jms.username">admin</parameter>
<parameter name="store.jms.password">admin</parameter>
<parameter name="store.jms.JMSSpecVersion">1.1</parameter>
<parameter name="store.producer.guaranteed.delivery.enable">true</parameter>
<parameter name="store.failover.message.store.name">fail</parameter>
</messageStore>
失败消息存储是:
<messageStore name="fail" class="org.apache.synapse.message.store.impl.jms.JmsStore" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
<parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
<parameter name="store.jms.destination">fail.Q</parameter>
<parameter name="store.jms.username">admin</parameter>
<parameter name="store.jms.password">admin</parameter>
<parameter name="store.jms.JMSSpecVersion">1.1</parameter>
<parameter name="store.producer.guaranteed.delivery.enable">false</parameter>
<parameter name="store.failover.message.store.name">fail</parameter>
</messageStore>
消息处理器是:
<messageProcessor name="TestProcessor" class="org.apache.synapse.message.processor.impl.sampler.SamplingProcessor" messageStore="TEST" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="interval">1000</parameter>
<parameter name="concurrency">1</parameter>
<parameter name="sequence">DemoSequence</parameter>
<parameter name="is.active">true</parameter>
</messageProcessor>
【问题讨论】:
-
尝试将 startonload 更改为 false 并重新启动并进行相同的测试并让我知道行为
-
@Muralidharan.rade 尝试将 startonload 更改为 false 并重新启动并进行了相同的测试。但是遇到了同样的问题,并且在重新启动服务器后 startonload 的值也更改为 true。 org.wso2.carbon.mediation.initializer.handler.ProxyLogHandler.handleLogAppenderSetter(ProxyLogHandler.java:41) 的 JMSMessageReceiver 未知错误处理消息 java.lang.NullPointerException ( ProxyLogHandler.java:14)
-
我想这是 startonload 的一个已知问题。 stackoverflow.com/questions/46353468/… 但是对于你的原始问题,尝试停用代理并在重新启动后启动,应该不会遇到这个问题..