ftr*_*ftr 7 java jms message-driven-bean ibm-mq
我要求我需要处理JMS消息(通过MDB),使得属于某个组(设置了组ID)的消息被同一个bean实例使用.我在此要求的行为是,顺序处理具有相同组ID的消息(尽管消息排序无关紧要),并将它们绑定到同一个MDB实例应该提供.
消息不带任何类型的序列号(因为它是无关紧要的),我们不知道组中的第一个或最后一个消息是什么(理论上"永远不会"是组中的最后一个消息).我们希望一旦消费者能够接收它们就能交付它们.
ActiveMQ 通过简单地设置JMSXGroupID来提供这个确切的功能(http://activemq.apache.org/message-groups.html).但是,我们必须使用WebSphere MQ.到目前为止,我发现的是,可以收集队列中同一组的消息,并使用MessageSelector接收"组中的最后一条消息"消息,如http://www.ibm.com/中所述. developerworks/websphere/library/techarticles/0602_currie/0602_currie.html.我们更喜欢更清洁的方式(如在ActiveMQ中).有谁知道如何在WebSphere中实现这种行为?
谢谢!
通常,您在 JMS 的 IBM 产品实现(WebSphere MQ 和 SIBus 实现)中使用 MessageSelector。它们相当于一个过滤器,可以扫描 HTTP 或 SOAP 消息的标头以查找基于 Web 的协议。
尽管它可能不是您想要的,但它实际上是一个干净且经过深思熟虑的设计。
但是,如果您不想使用 MessageSelectors,您可能必须构建自己的消息选择器,并使用扫描标头的前端 MDB“处理”消息,然后将消息转发到适当的队列,其中只有 MDB 关心关于分组消息将处理它们(类似于网关/消息选择器模式)。
如果您使用的是“纯”JMS API,那么您可以要求 Session 对象使用您想要过滤的指定选择器字符串(标头中的值)创建一个 MessageConsumer(同样您必须自己设置)。
//assume we have created a JMS Connection and Session object already.
//and looked up the Queue we want already.
MessageConsumer consumerWithSelector = session.createConsumer(queue, groupId);
Run Code Online (Sandbox Code Playgroud)
这就是纯 JMS API 为您提供的全部内容。其他任何事情都完全取决于消息传递技术的实现者,该技术是其实现所专有的,而不是可移植代码。
| 归档时间: |
|
| 查看次数: |
2527 次 |
| 最近记录: |