第 10 章 检测重复的信息


您可以将代理配置为自动检测和过滤重复的消息。这意味着您不必实现自己的重复检测逻辑。

如果没有重复的检测,在意外连接失败时,客户端无法确定它发送到代理的消息。在这种情况下,客户端可能会假定代理没有收到消息,并重新发送它。这会生成重复的消息。

例如,假设客户端向代理发送一条消息。如果在代理接收和处理消息 代理失败,则消息永远不会到达其地址。因为失败,客户端不会从代理收到响应。如果在代理接收和处理 消息后 代理失败代理或连接,则会正确路由该消息,但客户端仍然不会再收到响应。

另外,在这种情况下,使用事务来确定是否成功。如果在处理事务提交时代理或连接失败,客户端仍无法确定它能否成功发送该消息。

在这些情况下,为了修正假定的失败,客户端会重新发送最新消息。结果可能是对您的系统有负面影响的重复消息。例如,如果您在订购系统中使用代理,则重复的消息可能意味着对订购的处理两次。

以下流程演示了如何配置重复的消息检测,以防出现这些类型的情况。

10.1. 配置重复的 ID 缓存

要启用代理来检测重复的消息,制作者必须在发送每个消息时为消息属性 _AMQ_DUPL_ID 提供唯一值。代理维护 _AMQ_DUPL_ID 属性的接收值的缓存。当代理在地址上收到新消息时,它会检查该地址的缓存,以确保之前没有处理与此属性相同的值相同的消息。

每个地址都有自己的缓存。每个缓存的大小都是圆形和固定。这意味着新条目会替换最旧的缓存空间需求。

以下流程演示了如何全局配置代理中每个地址使用的 ID 缓存。

流程

  1. 打开 & lt;broker_instance_dir> /etc/broker.xml 配置文件。
  2. core 元素中,添加 id-cache-sizepersist-id-cache 属性并指定值。例如:

    <configuration>
      <core>
        ...
        <id-cache-size>5000</id-cache-size>
        <persist-id-cache>false</persist-id-cache>
      </core>
    </configuration>
    id-cache-size

    ID 缓存的最大大小,指定为缓存中的独立条目数量。默认值为 20,000 个条目。在本例中,缓存大小设置为 5,000 条目。

    注意

    当达到缓存的最大大小时,代理可能会开始处理重复的信息。例如,假设您将缓存大小设置为 3000。如果前面的消息在 arrival 具有相同 _AMQ_DUPL_ID 值相同的新消息前到达了 3,000 多个 消息,则代理无法检测到重复的。这会导致代理处理这两个信息。

    persist-id-cache
    当此属性的值设置为 true 时,代理会在收到该属性时将 ID 持久化到磁盘。默认值为 true。在上例中,您可以通过将值设为 false 来禁用持久性。

其他资源

  • 要了解如何使用 AMQ Core Protocol JMS 客户端设置重复的 ID 消息属性,请参阅 AMQ Core Protocol JMS 客户端文档中的 使用重复消息检测
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.