【问题标题】:MDB deployed on WAS 7 cluster部署在 WAS 7 集群上的 MDB
【发布时间】:2014-02-05 14:23:45
【问题描述】:

我在 Jboss 上部署了一个 MDB,它从 Websphere MQ 队列获取消息,在每个消息头中查找 GroupId 和序列信息。一旦它获得了组的所有序列,将接收到的每条消息的有效负载放在一起形成一条大消息并将其发送到另一个系统。

现在 MDB 将部署在 Websphere Application Server 7 集群环境中,我不确定是否有任何缓存/配置可用于通过集群的一个实例收集一组的所有消息序列(否则,如果一个实例接收到一些消息部分而另一个实例接收其余部分,最终 MDB 将无法组合一个大消息)

我读到 jms-ra 资源适配器可以使用 con.sun.genericra.loadbalancing.selector= 进行配置(例如,其他实例的 JMSType = 'Instance1' 等等) JMSType 标头应该出现在消息中并且应该是“Instance1”,例如 1 来处理此消息。

但我不确定将消息放入队列中的系统是否会在消息头中发送此类信息。

有没有办法配置集群来实现这一点?

【问题讨论】:

    标签: java jms cluster-computing websphere-7 message-driven-bean


    【解决方案1】:

    在集群环境中工作时,MDB 独立工作。有几种方法可以实现同步。

    1) 您可以使用选择器在集群节点之间划分消息流。这是文档http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/index.jsp?topic=%2Fcom.ibm.mq.csqzal.doc%2Ffg20180_.htm 主要问题是选择器需要消息属性中的一些信息才能完成工作。必须有人把它们放在那里。

    2) 您可以在“共享”数据收集器上进行同步,例如 DB。您会将收到的消息放在那里。进一步的处理可以异步或基于最后一条消息。

    3) 你可以自己做一个“代理”。您可以制作额外的“内部”队列。由多个 MDB 从外部队列中获取消息,对它们进行任何处理并放入第 1 点所需的属性。然后将消息放入内部队列中,并使用不同节点的选择器像第 1 点一样读取它们。

    【讨论】:

    • 我想过做一些类似于第二点描述的事情,但最终决定遵循这个(图 6)pic.dhe.ibm.com/infocenter/wasinfo/v8r0/…
    • 此变体可能需要在您的软件中进行一些结构更改。在您的情况下,只有一个 MDB 将同时工作,所以如果工作是在 MDB 的进程中进行的,那么您将同时只有一个工作服务器。您必须使架构类似于第 3 点,以使应用程序在集群上运行良好。
    • 阅读 ibm.com/developerworks/websphere/library/techarticles/… 让事情变得容易多了(通过在 Websphere 中定义的激活规范上设置消息选择器 JMS_IBM_Last_Msg_In_Group=TRUE)
    猜你喜欢
    • 1970-01-01
    • 2015-02-23
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2014-12-25
    相关资源
    最近更新 更多