【问题标题】:How We can Store JMS Persistence in DIsk Using Wso2我们如何使用 Wso2 将 JMS 持久性存储在磁盘中
【发布时间】:2025-11-24 17:20:13
【问题描述】:

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

消息进程配置是这样的,是否可以将故障消息存储到系统磁盘中。如果服务器崩溃,我的数据丢失了如何实现它

【问题讨论】:

    标签: wso2 activemq wso2esb wso2dss


    【解决方案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]/data/kahadb/

    检查这是否满足您的要求。欲了解更多信息,请参阅ActiveMQ Persistence。后一部分包含 KahaDB 持久化配置。

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

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

    【讨论】:

    • 感谢重播,我会让你知道
    【解决方案2】:

    首先你要了解消息Store在WSO2 esb中的局限性。 消息存储将消息+其他信息序列化为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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 如果我没记错的话,这意味着它只存储在消息代理中。我的问题是它将用于存储系统内存或默认内存,即服务器 ftorge
      • 队列是物理存在的,这意味着我们可以在侧服务器中找到队列文件夹
      【解决方案4】:

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

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

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

      1) 登录 ActiveMQ 控制台。

      2) 点击“队列”。

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

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

      希望这会有所帮助。

      【讨论】:

      • 感谢重播,如果我的 ActiveMQ 服务器在那一刻崩溃,我将丢失我的消息,否则它们仍然存在。
      • 我的问题我不希望依赖服务器,我的消息可以存储在我配置的文件系统中...是否可以使用任何 JMS 存储,如 ActiveMQ 或 WSO2MessageBRoker
      最近更新 更多