0

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

4 回答 4

1

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

启用持久性;

1) 转到文件 [ActiveMQ_HOME] --> conf --> 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 持久性。后一部分包含 KahaDB 持久性配置。

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

我还没有用 WSO2 MB 试过这个。有时间会尝试并随时通知您。

于 2013-08-01T10:06:56.693 回答
1

首先你要了解 WSO2 esb 中消息 Store 的限制。消息存储将消息+其他信息序列化为java序列化对象并存储在JMS Queue中。因此,除了 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

于 2013-08-14T18:52:41.760 回答
0

如果您使用 JMS 消息存储,即使服务器崩溃,之前排队的消息(并且处理尚未完成)仍然存在。这是因为消息保留在 JMS 队列中。如果您使用 In Memory Message Store,则在服务器崩溃时,您的消息将丢失。

在 JMS 案例中,您可以通过单击每个存储/处理器实例的名称链接来浏览消息存储或消息处理器中的任何待处理消息。为了能够浏览处理器内部的消息,处理器应该处于非活动状态。但是在服务器重新启动时,消息似乎在 ESB 4.7.0 中消失了。将进一步调查这一点,并随时通知您。

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

1) 登录 ActiveMQ 控制台。

2) 点击“队列”。

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

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

希望这有帮助。

于 2013-08-01T07:04:40.567 回答
0

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

于 2013-07-31T12:59:37.960 回答