16.2. 配置代理镜像
您可以使用代理连接在一对代理间镜像信息。任何时候只能有一个代理处于活跃状态。
先决条件
- 您有两个工作代理。
流程
在
broker.xml
文件中为第一个代理创建一个broker-connections
元素,例如:<broker-connections> <amqp-connection uri="tcp://<hostname>:<port>" name="DC1"> <mirror/> </amqp-connection> </broker-connections>
<broker-connections> <amqp-connection uri="tcp://<hostname>:<port>" name="DC1"> <mirror/> </amqp-connection> </broker-connections>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <hostname>
- 其他代理实例的主机名。
<port>
- 代理在其他主机上使用的端口。
第一个代理上的所有消息都镜像到第二个代理,但在创建镜像前存在的消息不会被镜像(mirror)。
如果您希望第一个代理同步镜像消息,以确保镜像代理为 OK-to-date 用于灾难恢复,请在代理的
amqp-connection
元素中设置sync=true
属性,如下例所示。同步镜像要求代理发送到镜像代理的消息同时写入两个代理的卷。在两个代理上完成写入操作后,源代理会确认写入请求已完成,并且控制返回给客户端。
<broker-connections> <amqp-connection uri="tcp://<hostname>:<port>" name="DC2"> <mirror sync="true"/> </amqp-connection> </broker-connections>
<broker-connections> <amqp-connection uri="tcp://<hostname>:<port>" name="DC2"> <mirror sync="true"/> </amqp-connection> </broker-connections>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果无法在镜像代理上完成写入请求,例如,如果代理不可用,则客户端连接将被阻止,直到镜像可用于完成最新的写入请求。
注意示例
DC1
中的代理连接名称用于创建名为$ACTIVEMQ_ARTEMIS_MIRROR_mirror
的队列。确保对应的代理配置为接受这些消息,即使队列在该代理中不可见。在
broker.xml
文件中为第二个代理创建一个broker-connections
元素,例如:<broker-connections> <amqp-connection uri="tcp://<hostname>:<port>" name="DC2"> <mirror/> </amqp-connection> </broker-connections>
<broker-connections> <amqp-connection uri="tcp://<hostname>:<port>" name="DC2"> <mirror/> </amqp-connection> </broker-connections>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您希望第二个代理同步镜像消息,请在代理的
amqp-connection
项中设置sync=true
属性。例如:<broker-connections> <amqp-connection uri="tcp://<hostname>:<port>" name="DC2"> <mirror sync="true"/> </amqp-connection> </broker-connections>
<broker-connections> <amqp-connection uri="tcp://<hostname>:<port>" name="DC2"> <mirror sync="true"/> </amqp-connection> </broker-connections>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)根据需要为镜像配置以下参数。
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>
<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 Copied! Toggle word wrap Toggle overflow (可选)自定义代理重试尝试确认目标镜像上的信息。
对于不在队列内存的消息,可能在目标镜像上收到确认信息。要给代理有足够的时间重试在目标镜像上的信息,您可以为您的环境自定义以下参数:
- mirrorAckManagerQueueAttempts
-
代理发出在内存中查找消息的尝试次数。默认值为
5
。如果代理在指定次数后没有在内存中找到信息,代理会在页文件中搜索消息。 - mirrorAckManagerPageAttempts
-
如果内存中找不到消息,代理在页面文件中查找消息的尝试次数。默认值为
2
。 - mirrorAckManagerRetryDelay
- 代理在尝试代理之间的间隔(以毫秒为单位)查找信息以确认在内存中,然后在页文件中。
指定
broker-connections
元素之外的任何这些参数。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)如果消息在目标镜像上进行分页,如果您希望代理协调将重复检测信息写入页面文件,请将
mirrorPageTransaction
设置为true
。如果
mirrorPageTransaction
属性设置为false
(默认值),且代理之间发生通信失败,则可能会在个别情况下,重复的信息会被写入目标镜像。将此参数设置为
true
可增加代理的内存用量。- 使用 第 15.6 节 “在多站点、容错消息传递系统中配置客户端” 中记录的说明配置客户端,请注意使用代理连接,没有共享存储。
红帽不支持在镜像配置中消耗来自两个代理的客户端应用程序。要防止客户端在两个代理中使用消息,请在其中一个代理中禁用客户端接受器。