14.5. 配置集群消息分组


消息分组可让客户端发送特定类型的消息组,由同一消费者按顺序处理。通过向集群中的每个代理添加分组处理器,您可以确保客户端可以将分组的消息发送到集群中的任何代理,并且仍然使这些消息被同一消费者的正确顺序使用。

注意

分组和集群技术总结如下:

  • 消息分组对消息消耗施加一个顺序。在组中,必须完全消耗和确认每个消息,然后才能继续下一消息。这个方法会导致串行消息处理,其中 concurrency 不是一个选项。
  • 集群旨在水平扩展代理,以提高消息吞吐量。通过添加额外的可同时处理消息的消费者来实现水平扩展。

由于这些技术相互冲突,因此请避免将集群和分组一起使用。

有两种分组处理程序:local handlersremote handlers。它们使代理集群能够将特定组中的所有消息路由到适当的队列,以便预期的消费者可以按照正确的顺序消耗它们。

先决条件

  • 集群中每个代理均应至少有一个消费者。

    当消息固定到队列中的消费者时,具有相同组 ID 的所有消息都将路由到该队列。如果删除了消费者,队列将继续接收消息,即使没有消费者也是如此。

流程

  1. 在集群中的一个代理上配置本地处理程序。

    如果您使用高可用性,这应该是 master 代理。

    1. 打开代理的 < broker_instance_dir&gt; /etc/broker.xml 配置文件。
    2. 在 &lt ;core&gt; 元素中,添加一个本地处理器:

      本地处理程序充当远程处理程序的仲裁程序。它存储路由信息并将其与其他代理通信。

      <configuration>
          <core>
              ...
              <grouping-handler name="my-grouping-handler">
                  <type>LOCAL</type>
                  <timeout>10000</timeout>
              </grouping-handler>
              ...
          </core>
      </configuration>
      grouping-handler
      使用 name 属性为分组处理程序指定唯一名称。
      type
      把它设置为 LOCAL
      timeout

      决定在何处路由消息的时间(以毫秒为单位)。默认值为 5000 毫秒。如果在做出路由决策前达到超时,则会抛出异常,以确保严格的消息排序。

      当代理收到带有组 ID 的消息时,它会提议一个到消费者附加到队列的路由。如果路由被集群中其他代理上的处理程序分组,则建立路由:集群中的所有代理会将具有此组 ID 的消息转发到该队列。如果代理的路由提议被拒绝,则它会提议一个备用路由,重复该过程,直到接受路由为止。

  2. 如果您使用高可用性,请将本地处理器配置复制到主代理的 slave 代理。

    将本地处理器配置复制到 slave 代理可防止本地处理器的单点故障。

  3. 在集群的每个剩余的代理上,配置远程处理器。

    1. 打开代理的 < broker_instance_dir&gt; /etc/broker.xml 配置文件。
    2. 在 &lt ;core&gt; 元素中,添加一个远程处理器:

      <configuration>
          <core>
              ...
              <grouping-handler name="my-grouping-handler">
                  <type>REMOTE</type>
                  <timeout>5000</timeout>
              </grouping-handler>
              ...
          </core>
      </configuration>
      grouping-handler
      使用 name 属性为分组处理程序指定唯一名称。
      type
      将它设置为 REMOTE
      timeout
      决定在何处路由消息的时间(以毫秒为单位)。默认值为 5000 毫秒。将此值设置为本地处理程序的至少一半。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.