我们如何使用Wso2将JMS持久性存储在DIsk中

时间:2013-07-31 12:26:51

标签: wso2 activemq wso2esb wso2dss

我正在使用Wso2ESB 4.7.0和ActiveMQ或WSo2message borker 2.1.0

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Message" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <log level="full"/>
         <property name="faisal" value="faisal" scope="default" type="STRING"/>
         <property name="target.endpoint" value="JmsChecking" scope="default" type="STRING"/>
         <store messageStore="faisal5"/>
      </inSequence>
      <outSequence>
         <log level="full"/>
      </outSequence>
   </target>
   <description></description>
</proxy

我希望将我的消息存储在我的系统磁盘中,以便我们可以为任何消息存储提供手动存储

e like active mq or mwso2 message broker
    <messageStore name="faisal5" class="org.wso2.carbon.message.store.persistence.jms.JMSMessageStore" 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">faisal5_Queue</parameter>
       <parameter name="store.jms.JMSSpecVersion">1.1</parameter>
       <parameter name="store.jms.cache.connection">false</parameter>
    </messageStore>

和消息进程配置就像这样可以将失败消息存储到系统磁盘中。如果服务器崩溃,我的数据丢失了,我该如何实现呢?

4 个答案:

答案 0 :(得分:1)

您是否尝试在ActiveMQ中启用持久性?你使用哪个版本的ActiveMQ?我查看了ActiveMQ 5.8,它使用了基于文件的数据库KahaDB作为默认持久性配置。可以根据您的要求更改持久性方法。

启用持久性;

1)转到文件[ActiveMQ_HOME] - &gt; conf - &gt; activemq.xml中

2)检查是否为代理启用了以下配置;

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" persistent="true" dataDirectory="${activemq.data}">
    <persistenceAdapter>
        <kahaDB directory="${activemq.data}/kahadb"/>
    </persistenceAdapter>

  • 在代理商代码中,属性设置为persistent =“true”。
  • 配置指向KahaDB。

默认的KahaDB文件可以在以下位置找到;

[ActiveMQ_HOME] /数据/ kahadb /

检查这是否满足您的要求。有关详细信息,请参阅ActiveMQ Persistence。后一部分包含KahaDB持久性配置。

BTM在ActiveMQ控制台中,被称为“消息入队”是自上次重置后的计数。每次重新启动服务器时,这将设置为0。实际可用的消息计数由“待处理消息数”下的计数显示。

我没有尝试使用WSO2 MB。会尝试一下并让你发布。

答案 1 :(得分:1)

首先,您必须了解WSO2 esb中消息Store的限制。 消息存储将消息+其他信息序列化为java序列化对象并存储在JMS队列中。因此,除了wso2 esb的“消息处理器”和“消息存储”之外,不可能读回任何其他工件。请参考[1]进一步了解我使用插图解释的地方。

此外,ACTIVEMQ中存在已知的错误[2],[3]。当队列中有超过100条消息并尝试手动访问队列时。 ActiveMQ崩溃。

[1] http://vanjikumaran.blogspot.com/2013/08/jms-messagen-store-and-jms-message.html

[2] https://issues.apache.org/jira/browse/AMQ-4372

[3] https://issues.apache.org/jira/browse/AMQ-4595

答案 2 :(得分:0)

这里你提到数据存储为队列(即:faisal5_Queue),SO数据将存储在该队列中。如果是JMS队列,则只能存储在队列中..不能存储在文件系统中..

答案 3 :(得分:0)

如果您正在使用JMS消息存储库,即使服务器崩溃,之前排队的消息(以及尚未完成的处理)仍将存在。这是因为消息持久存储在JMS队列中。如果您使用内存消息存储,则在服务器崩溃时,您的消息将丢失。

在JMS情况下,您可以通过单击每个商店/处理器实例的名称链接来浏览消息存储库或消息处理器内的所有待处理消息。为了能够浏览处理器内的消息,处理器应处于非活动状态。但是在服务器重启时,消息似乎在ESB 4.7.0中消失了。将进一步研究这个并让你发布。

我尝试使用ActiveMQ案例,并认为可以在那里查看错误消息详细信息以查找失败的消息。

1)登录ActiveMQ控制台。

2)点击“队列”。

3)单击您的邮件存储队列名称。将显示待处理消息列表。

4)单击消息ID。将显示消息详细信息,包括失败消息。

希望这会有所帮助。