第 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>
    Copy to Clipboard Toggle word wrap
    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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

Theme

© 2025 Red Hat