首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMS5集群作为JBoss服务器持久问题

JMS5集群作为JBoss服务器持久问题
EN

Stack Overflow用户
提问于 2009-12-22 16:12:03
回答 1查看 1.8K关注 0票数 3

我有一对JMS5.1服务器聚集在一起,作为容错的JBoss服务器。

我将它们配置为使用MySQL数据存储(在service.xml中启用了集群设置),通过定义:

代码语言:javascript
复制
   <mbean code="org.jboss.jms.server.destination.TopicService" name="jboss.messaging.destination:service=Topic,name=ECM-PRM-Topic" xmbean-dd="xmdesc/Topic-xmbean.xml">
    <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
    <depends>jboss.messaging:service=PostOffice</depends>
    <attribute name="Clustered">true</attribute>
    <attribute name="SecurityConfig">
            <security>
                    <role name="ecm-role" write="true" />
                    <role name="prm-role" read="true" create="true" />
            </security>
    </attribute>

我的客户(J2SE!)正在使用以下方法连接到此JMS服务器:

代码语言:javascript
复制
            // Step 1. Create an initial context to perform the JNDI lookup.
        initialContext = new InitialContext(p);
        // Step 3. Perform a lookup on the Connection Factory
        ConnectionFactory cf = (ConnectionFactory)initialContext.lookup("/ClusteredConnectionFactory");
        // Step 2. Perfom a lookup on the queue
        Destination target = (Destination)initialContext.lookup("/topic/ECM-PRM-Topic");

当发生下列一系列事件时:

  1. Node1上升了,Node2下降了。
  2. 客户端连接到JMS,并创建主题为“ECM topic”的持久订阅服务器。
  3. 客户端断开连接,留下持久订阅。
  4. 其他一些客户端发布关于“ECM-PRM-主题”主题的消息。
  5. Node1倒下了。
  6. Node2上升了。
  7. 另一些客户端再次发布关于"ECM-PRM- topic“主题的消息。
  8. 客户端再次连接到持久订阅。
  9. 客户端断开连接
  10. 节点1上升。
  11. 客户端再次连接到持久订阅。

步骤4中发布的消息存储在数据库中,并等待客户机重新连接(我可以在MySQL中看到它们)。(没关系)

步骤6中启动的节点不知道有关该主题的任何持久订阅。(为什么?)

步骤7中发布的消息立即消失。(因为没有已知的持久客户,也没有任何客户连接)

当客户端在步骤8中连接时,它会创建一个新的持久的、没有消息传递给它的消息(但是,MySQL中仍然有消息)。

在步骤10中,客户端接收来自持久的所有消息,排除来自步骤7的消息,女巫完全丢失。

我希望100%的保证不会丢失任何信息。所有消息都应该存储在持久的MySQL数据库中,直到客户端使用为止。

有什么建议吗?

是否有任何方法在JBoss文件中配置持久的DurableSubscriber订阅(在任何客户端创建DurableSubscriber之前)?

我使用的完整客户端代码是这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-23 14:23:48

我们发现JBoss不可能正确地处理这种情况。

“持久订阅”创建的事实被广播到所有节点。如果其中一个节点关闭,它将不会知道在另一个节点上创建的持久订阅。这将导致上述情况下的数据丢失。

http://community.jboss.org/message/517448#517448

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1947363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档