我在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实例处理所有消息。
答案 0 :(得分:0)
您可以尝试使用JMS消息选择器来确保特定MDB处理特定类型的消息。
例如,如果您在JMS消息上设置属性,如下所示:
message.setStringProperty("mdbType", "orderMDB")
或
message.setStringProperty("mdbType", "registrationMDB")
然后,对于每个MDB,您可以通过以下内容对其进行注释来指定它感兴趣的消息:
@ActivationConfigProperty(propertyName = "messageSelector",
propertyValue = "mdbType= 'orderMDB' OR mdbType= 'registrationMDB'")