我有2个消息驱动的bean。 2这些bean的激活规范。我有一个消息总线,两个激活规范都配置到这一个总线。我为这一条消息总线配置了2个不同的队列和一个队列连接工厂。
现在,我会编写代码,在确定队列后,在运行时向其中一个队列发送消息。但是,我的两个MDB都收到相同的消息。 这种配置一般如何完成?我总是配置1队列 - > 1队列连接工厂 - > 1消息总线 - > 1 MDB?这一切都是一对一的关系吗?
哦,我忘了提到这个:我正在使用Websphere Application Server v6.1
答案 0 :(得分:3)
一般来说,概念是:
这意味着实际上bean通过activationSpec提供的一个间接层链接到一个目标。
总线在哪里--SIBus是使所有这一切成为可能的消息传递基础设施。目的地在公共汽车上。
提出问题 - ActivationSpec将配置为侦听将发送消息的总线上的目标。连接工厂决定将消息发送到的总线。只要目标名称是唯一的并且定位到特定队列(JMS队列链接到总线上的目标),一条消息将仅由一个ActivationSpec接收。
总线上创建了多少个目的地(在WAS管理控制台的SIBus链接下)?你能检查/验证配置是否正确吗?
回答你的问题 - “每个激活规范是一个总线,每个队列是一个队列连接工厂吗?” - 答案是否定的。
答案 1 :(得分:1)
我想你说你希望两个MDB都收到相同的消息,对吗?
如果是这种情况,那么MDB应该监听主题而不是队列。
或者,有一些方法可以配置IBM MQ来转发消息,例如,发布到特定队列的消息可以重新发布到 n 其他< em> queues ,但我只看到在重新发布之前发生某种消息丰富时使用的内容,因此我怀疑你想要达到的目标是否过度。
答案 2 :(得分:1)
为什么需要消息总线?
通常我将MDB与队列关联起来 - 这是1:1的关系。将消息发送到队列,侦听器获取它。你买的公交车是什么?
我已经使用WebLogic完成了JMS,并且没有所需的消息总线这样的构造。我认为这是IBM的事情。
Here's一个如何使用Spring进行JMS的示例。这就是我建议继续进行的方式。
更新:我误解了你的问题。当你说你的两个队列都收到相同的消息时,我认为这不是理想的行为。如果是,那么主题是正确的方法。队列是点对点消息传递;主题是发布/订阅。
答案 3 :(得分:1)
我怀疑你的配置没有像你想象的那样设置。我们使用您描述的相同配置,许多MDB(带有队列和激活规范),单个工厂和消息总线,一切都按预期工作。
除非您向两个队列发送相同的消息,或者定义了主题而不是队列,否则实际上无法获得您所看到的行为。我很确定即使两个MDB都从同一队列中读取,也只有一个会得到消息,因为队列只支持点对点消息传递。您所描述的是基于主题的行为。