重新启动WSO2服务器后消息正在消失

时间:2017-12-11 13:21:17

标签: wso2 jms activemq

我正在为我的项目使用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>

1 个答案:

答案 0 :(得分:0)

由于内存中消息存储使用内存中队列来存储消息,因此在重新启动或关闭时消息将丢失。

这就是为什么不建议将其用于生产系统或大规模消息处理系统。您可以查看推荐here

考虑使用其他形式的邮件存储,以获得更好的可靠性和有保证的交付。请参阅以下选项: https://docs.wso2.com/display/ESB500/Adding+a+Message+Store

还要考虑使用故障转移消息存储以提高可靠性。 https://docs.wso2.com/display/ESB500/Guaranteed+Delivery+with+Failover+Message+Store+and+Scheduled+Failover+Message+Forwarding+Processor