7.3. 使用消息组
消息组是具有以下特征的信息集合:
-
消息组中的消息共享同一组 ID。也就是说,它们具有相同的组标识符属性。对于 JMS 消息,属性是
JMSXGroupID
。 - 消息组中的消息始终供同一使用者使用,即使队列中有许多消费者。如果原始消费者关闭,则可以选择另一消费者接收消息组。
如果您希望同一使用者以序列方式处理属性的特定值的所有消息,则消息组很有用。例如,您可能希望订单让同一消费者序列处理任何特定股票购买。为此,您可以创建一个消费者池,然后将库存名称设置为消息属性的值。这可确保特定库存的所有消息始终由同一消费者处理。
设置组 ID
以下示例演示了如何将消息组与 AMQ 核心协议 JMS 一起使用。
流程
如果您使用 JNDI 为您的 JMS 客户端建立 JMS 连接工厂,请添加
groupID
参数并提供值。使用此连接工厂发送的所有消息均将属性JMSXGroupID
设置为指定的值。java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory connectionFactory.myConnectionFactory=tcp://localhost:61616?groupID=MyGroup
java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory connectionFactory.myConnectionFactory=tcp://localhost:61616?groupID=MyGroup
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您不使用 JNDI,请使用
setStringProperty()
方法设置JMSXGroupID
属性。Message message = new TextMessage(); message.setStringProperty("JMSXGroupID", "MyGroup"); producer.send(message);
Message message = new TextMessage(); message.setStringProperty("JMSXGroupID", "MyGroup"); producer.send(message);
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
有关如何配置和使用消息组的工作示例,请参阅 <install-dir>/examples/features/standard
下的 message-group
和 message-group2
。