我有2个消息驱动的bean。 2这些bean的激活规范。我有一个消息总线,两个激活规范都配置到这一个总线。我为这一条消息总线配置了2个不同的队列和一个队列连接工厂。

现在,我会编写代码,在确定队列后,在运行时向其中一个队列发送消息。但是,我的两个MDB都收到相同的消息。 这种配置一般如何完成?我总是配置1队列 - > 1队列连接工厂 - > 1消息总线 - > 1 MDB?这一切都是一对一的关系吗?

哦,我忘了提到这个:我正在使用Websphere Application Server v6.1

有帮助吗?

解决方案

一般来说,概念是:

  1. 将消息发送(队列)/发布(主题)到目的地(队列/主题)
  2. ActivationSpec侦听特定目标(队列/主题)
  3. 的消息
  4. ActivationSpec:目标是1:1的关系
  5. bean(作为消费者的MDB)配置为侦听ActivationSpec。
  6. 这意味着实际上bean通过activationSpec提供的一个间接层链接到一个目标。

    总线在哪里--SIBus是使所有这一切成为可能的消息传递基础设施。目的地在公共汽车上。

    提出问题 - ActivationSpec将配置为侦听将发送消息的总线上的目标。连接工厂决定将消息发送到的总线。只要目标名称是唯一的并且定位到特定队列(JMS队列链接到总线上的目标),一条消息将仅由一个ActivationSpec接收。

    总线上创建了多少个目的地(在WAS管理控制台的SIBus链接下)?你能检查/验证配置是否正确吗?

    回答你的问题 - “每个激活规范是一个总线,每个队列是一个队列连接工厂吗?” - 答案是否定的。

    1. 总线是可以托管“n”的底层基础设施。目的地。一个ActivationSpec侦听一个目标。
    2. 使用队列连接工厂是用于创建队列的工厂(J2EE工厂模式)。

其他提示

我想你说你希望两个MDB都收到相同的消息,对吗?

如果是这种情况,那么MDB应该监听主题而不是队列

或者,有一些方法可以配置IBM MQ来转发消息,例如,发布到特定队列的消息可以重新发布到 n 其他< em> queues ,但我只看到在重新发布之前发生某种消息丰富时使用的内容,所以我怀疑你想要达到的目标是否过度。

为什么需要消息总线?

通常我将MDB与队列关联起来 - 这是1:1的关系。将消息发送到队列,侦听器获取它。你买的公交车是什么?

我已经使用WebLogic完成了JMS,并且没有所需的消息总线这样的构造。我认为这是IBM的事情。

这里是一个如何使用Spring进行JMS的示例。这就是我建议继续进行的方式。

更新:我误解了你的问题。当你说你的两个队列都收到相同的消息时,我认为这不是理想的行为。如果是,那么主题是正确的方法。队列是点对点消息传递;主题是发布/订阅。

我怀疑你的配置没有像你想象的那样设置。我们使用您描述的相同配置,许多MDB(带有队列和激活规范),单个工厂和消息总线,一切都按预期工作。

除非您向两个队列发送相同的消息,或者定义了主题而不是队列,否则实际上无法获得您所看到的行为。我很确定即使两个MDB都从同一队列中读取,也只有一个会得到消息,因为队列只支持点对点消息传递。您所描述的是基于主题的行为。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top