16.2. 配置代理镜像


您可以使用代理连接在一对代理间镜像信息。任何时候只能有一个代理处于活跃状态。

先决条件

  • 您有两个工作代理。

流程

  1. broker.xml 文件中为第一个代理创建一个 broker-connections 元素,例如:

    <broker-connections>
      <amqp-connection uri="tcp://<hostname>:<port>" name="DC1">
        <mirror/>
      </amqp-connection>
    </broker-connections>
    Copy to Clipboard Toggle word wrap
    <hostname>
    其他代理实例的主机名。
    <port>
    代理在其他主机上使用的端口。

    第一个代理上的所有消息都镜像到第二个代理,但在创建镜像前存在的消息不会被镜像(mirror)。

  2. 如果您希望第一个代理同步镜像消息,以确保镜像代理为 OK-to-date 用于灾难恢复,请在代理的 amqp-connection 元素中设置 sync=true 属性,如下例所示。

    同步镜像要求代理发送到镜像代理的消息同时写入两个代理的卷。在两个代理上完成写入操作后,源代理会确认写入请求已完成,并且控制返回给客户端。

    <broker-connections>
      <amqp-connection uri="tcp://<hostname>:<port>" name="DC2">
        <mirror sync="true"/>
      </amqp-connection>
    </broker-connections>
    Copy to Clipboard Toggle word wrap
    注意

    如果无法在镜像代理上完成写入请求,例如,如果代理不可用,则客户端连接将被阻止,直到镜像可用于完成最新的写入请求。

    注意

    示例 DC1 中的代理连接名称用于创建名为 $ACTIVEMQ_ARTEMIS_MIRROR_mirror 的队列。确保对应的代理配置为接受这些消息,即使队列在该代理中不可见。

  3. broker.xml 文件中为第二个代理创建一个 broker-connections 元素,例如:

    <broker-connections>
      <amqp-connection uri="tcp://<hostname>:<port>" name="DC2">
        <mirror/>
      </amqp-connection>
    </broker-connections>
    Copy to Clipboard Toggle word wrap
  4. 如果您希望第二个代理同步镜像消息,请在代理的 amqp-connection 项中设置 sync=true 属性。例如:

    <broker-connections>
      <amqp-connection uri="tcp://<hostname>:<port>" name="DC2">
        <mirror sync="true"/>
      </amqp-connection>
    </broker-connections>
    Copy to Clipboard Toggle word wrap
  5. (可选)根据需要为镜像配置以下参数。

    queue-removal
    指定是否发送队列或地址删除事件。默认值为 true
    message-acknowledgments
    指定是否发送消息确认。默认值为 true
    queue-creation
    指定是否发送队列或地址创建事件。默认值为 true

    例如:

    <broker-connections>
      <amqp-connection uri="tcp://<hostname>:<port>" name="DC2">
        <mirror sync="true" queue-removal="false" message-acknowledgments ="false" queue-creation="false"/>
      </amqp-connection>
    </broker-connections>
    Copy to Clipboard Toggle word wrap
  6. (可选)自定义代理重试尝试确认目标镜像上的信息。

    对于不在队列内存的消息,可能在目标镜像上收到确认信息。要给代理有足够的时间重试在目标镜像上的信息,您可以为您的环境自定义以下参数:

    mirrorAckManagerQueueAttempts
    代理发出在内存中查找消息的尝试次数。默认值为 5。如果代理在指定次数后没有在内存中找到信息,代理会在页文件中搜索消息。
    mirrorAckManagerPageAttempts
    如果内存中找不到消息,代理在页面文件中查找消息的尝试次数。默认值为 2
    mirrorAckManagerRetryDelay
    代理在尝试代理之间的间隔(以毫秒为单位)查找信息以确认在内存中,然后在页文件中。

    指定 broker-connections 元素之外的任何这些参数。例如:

    <mirrorAckManagerQueueAttempts>8</mirrorAckManagerQueueAttempts>
    
    <broker-connections>
      <amqp-connection uri="tcp://<hostname>:<port>" name="DC2">
        <mirror/>
      </amqp-connection>
    </broker-connections>
    Copy to Clipboard Toggle word wrap
  7. (可选)如果消息在目标镜像上进行分页,如果您希望代理协调将重复检测信息写入页面文件,请将 mirrorPageTransaction 设置为 true

    如果 mirrorPageTransaction 属性设置为 false (默认值),且代理之间发生通信失败,则可能会在个别情况下,重复的信息会被写入目标镜像。

    将此参数设置为 true 可增加代理的内存用量。

  8. 使用 第 15.6 节 “在多站点、容错消息传递系统中配置客户端” 中记录的说明配置客户端,请注意使用代理连接,没有共享存储。
重要

红帽不支持在镜像配置中消耗来自两个代理的客户端应用程序。要防止客户端在两个代理中使用消息,请在其中一个代理中禁用客户端接受器。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat