我在Jboss上部署了一个MDB,它从Websphere MQ队列获取消息,在每个消息头中查找GroupId和Sequence信息。一旦获得组的所有序列,将它收到的每条消息的有效负载放在一起一条大消息并将其发送到另一个系统。
现在MDB将部署在Websphere Application Server 7集群环境中,我不确定是否有任何缓存/配置可用于通过集群的一个实例收集组的所有消息序列(否则,如果一个实例接收到一些消息部分而另一个实例接收其余部分,那么最终MDB将无法将一个大消息放在一起)
我读到jms-ra资源适配器可以配置con.sun.genericra.loadbalancing.selector =(例如JMSType ='Instance1'等等其他实例) JMSType头应该出现在消息中,并且应该是'Instance1',例如1来处理此消息。
但是我不确定将消息放入队列中的系统是否会从MDB选择它们的队列中发送这些信息。
有没有办法配置群集来实现这个目标?
答案 0 :(得分:0)
在群集环境中工作时,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所需的属性。然后将消息放入内部队列,并按照不同节点使用选择器的方式读取它们。