类似消息的{MD}实例

时间:2017-03-21 11:19:55

标签: java-ee instance message-queue message-driven-bean

我在Wildfly 8.2(具有默认HornetQ的JMS)上有一个队列,它接收与不同实体相关的消息,这些实体具有不同的MDB类作为消费者(每个实体一个MDB类)。

我使用JMSType将相对于实体A的消息发送到MDB_A,依此类推。

现在我希望所有与实体A相同实例相关的消息都由同一个MDB_A实例管理。在我在队列中插入消息之前,我为相对于同一个A实例的消息设置了属性JMSXGroupID的相同值。

然后我在MDB中打印出MDB的identifier和消息的JMSXGroupID,但我看到具有相同JMSXGroupID的消息由不同的MDB管理。

我发现this线程正在讨论AciveMQ的这个问题,但我正在使用HornetQ,所以我不知道在这种情况下是什么行为。

在那个帖子中,答案是

  

在这种情况下,Message Listener是MDB容器而不是   单个MDB实例。 MDB容器可以自由选择任何mdb   实例来处理它收到的消息。所以我认为是JMSXGroupID   这里没有意义。

但是如果具有相同JMSXMessageID的消息由不同的实例处理,则此属性的用途是什么?是否与为消息设置JMSType相同?

我还发现,在没有选择器的情况下为队列上的消息设置JMSXMessageID,即使我有多个可用实例,也可以让同一个MDB实例处理所有消息。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用JMS消息选择器来确保特定MDB处理特定类型的消息。

例如,如果您在JMS消息上设置属性,如下所示:

message.setStringProperty("mdbType", "orderMDB")

message.setStringProperty("mdbType", "registrationMDB")

然后,对于每个MDB,您可以通过以下内容对其进行注释来指定它感兴趣的消息:

@ActivationConfigProperty(propertyName = "messageSelector",
        propertyValue = "mdbType= 'orderMDB' OR mdbType= 'registrationMDB'")