第 11 章 消息组


消息组是有以下特征的一组消息:

  • 消息组中的消息共享相同的组 ID,即它们具有相同的组标识符属性。对于 JMS 消息,属性是 JMSXGroupID
  • 消息组中的消息始终由同一消费者使用,即使队列中有多个使用者也是如此。如果原始消费者关闭,选择另一消费者接收消息组。

当您希望对某个属性值的所有消息由同一消费者按顺序处理时,消息组很有用。例如,您可能希望订购任何特定的库存购买,以便由相同的消费者按顺序处理。为此,您可以创建使用者池,然后将库存名称设置为 message 属性的值。这样可确保特定库存的所有消息始终由同一消费者处理。

注意

分组的消息可能会影响队列的底层 FIFO 语义的并发处理非组消息。例如,如果队列头有 100 个组消息的块,并且后接 1,000 个非组消息,则所有分组的消息都将发送到适当的客户端,然后再使用任何非组的消息。这种情况下的功能影响是并发消息处理的临时挂起,同时处理所有分组的消息。在确定您的消息组大小时,请记住这种潜在的性能瓶颈。考虑是否要将分组的消息与您的非组消息隔离。

11.1. 客户端消息组

以下示例演示了如何使用核心 JMS 客户端的消息分组。

步骤

  • 设置组 ID。

    • 如果您使用 JNDI 为 JMS 客户端建立 JMS 连接工厂,请添加 groupID 参数并提供一个值。使用此连接工厂发送的所有消息都将属性 JMSXGroupID 设置为指定的值。

      java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory
      connectionFactory.myConnectionFactory=tcp://localhost:61616?groupID=MyGroup
    • 如果您不使用 JNDI,请使用 setStringProperty() 方法设置 JMSXGroupID 属性。

       Message message = new TextMessage();
       message.setStringProperty("JMSXGroupID", "MyGroup");
       producer.send(message);

相关信息

请参阅 INSTALL_DIR/examples/features/standard 下的 mesagge-groupmessage-group2,以了解如何配置和使用消息组的示例。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.