如何使用Wso2在磁盘中存储JMS持久性

如何使用Wso2在磁盘中存储JMS持久性,wso2,activemq,wso2esb,wso2dss,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>

我正在使用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


这里您提到数据存储是一个队列(即:faisal5_队列),因此数据将存储在该队列中。如果它是JMS队列,则只能存储在队列中。而不能存储在文件系统中。

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

在JMS情况下,您可以通过单击每个存储/处理器实例的名称链接来浏览消息存储或消息处理器内的任何挂起消息。为了能够浏览处理器内的消息,处理器应处于非活动状态。但在服务器重新启动时,ESB4.7.0中的消息似乎消失了。我们将进一步关注此事,并随时向您通报

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

1) 登录到ActiveMQ控制台

2) 点击“队列”

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

4) 单击消息id。将显示消息详细信息,包括故障消息


希望这有帮助。

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

使坚持成为可能

1) 转到文件[ActiveMQ_HOME]->conf-->ActiveMQ.xml

2) 检查是否为broker启用了以下配置

<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]/data/kahab/

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

顺便说一句,在ActiveMQ控制台中,被称为“消息排队”的是自上次重置以来的计数。每当重新启动服务器时,该值将设置为0。实际可用的消息计数由“挂起消息数”下的计数显示


我还没有用WSO2 MB尝试过这个。我会在某个时候尝试一下,并随时通知您。

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

此外,ACTIVEMQ[2]、[3]中存在已知的bug。当队列中的消息超过100条时,请尝试手动访问队列。ActiveMQ发生崩溃

[1]

[2]


[3]

如果我没有错,这意味着它只存储在message broker中..我的问题是它将使用哪个内存作为存储系统内存或默认内存(即服务器ftorgequeue)是物理存在的,这意味着我们可以在服务器端找到队列文件夹,以便重播如果我的ActiveMQ服务器在那一刻崩溃,我将丢失消息,否则它们将丢失我的问题我不希望依赖服务器我的消息可以存储在我配置的文件系统中…是否可以使用任何JMS存储,如ActiveMQ或WSO2MessageBrokerAnx进行重播我会让你知道
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" persistent="true" dataDirectory="${activemq.data}">
    <persistenceAdapter>
        <kahaDB directory="${activemq.data}/kahadb"/>
    </persistenceAdapter>