16.2. 配置代理镜像


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

先决条件

  • 您有两个工作代理。

流程

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

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

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

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

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

    <broker-connections>
      <amqp-connection uri="tcp://<hostname>:<port>" name="DC2">
        <mirror sync="true"/>
      </amqp-connection>
    </broker-connections>
    注意

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

    注意

    示例 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>
  4. 如果您希望第二个代理同步镜像消息,请在代理的 amqp-connection 元素中设置 sync=true 属性。例如:

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

    如果 mirrorPageTransaction 属性设置为 false,这是默认值,且代理之间发生通信失败,则会在个别情况下写入目标镜像。

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

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.