16.2. 配置代理镜像
您可以使用代理连接来镜像一对代理之间的消息。任何时候只能有一个代理处于活跃状态。
先决条件
- 您有两个工作代理。
流程
在
broker.xml
文件中为第一个代理创建一个broker-connections
元素,例如:<broker-connections> <amqp-connection uri="tcp://<hostname>:<port>" name="DC1"> <mirror/> </amqp-connection> </broker-connections>
<hostname>
- 其他代理实例的主机名。
<port>
- 在其他主机上代理使用的端口。
第一个代理中的所有消息都会镜像到第二个代理,但创建镜像前存在的消息不会被镜像(mirror)。
如果您希望第一个代理同步镜像信息,以确保镜像代理为灾难恢复的 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
的队列。确保对应的代理被配置为接受这些消息,即使队列在该代理上不可见。在
broker.xml
文件中为第二个代理创建一个broker-connections
元素,例如:<broker-connections> <amqp-connection uri="tcp://<hostname>:<port>" name="DC2"> <mirror/> </amqp-connection> </broker-connections>
如果您希望第二个代理同步镜像消息,请在代理的
amqp-connection
元素中设置sync=true
属性。例如:<broker-connections> <amqp-connection uri="tcp://<hostname>:<port>" name="DC2"> <mirror sync="true"/> </amqp-connection> </broker-connections>
(可选)根据需要为镜像配置以下参数。
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>
(可选) 自定义代理重试尝试确认目标镜像上的信息。
对于不在队列内存中的消息,目标镜像上可能会收到确认。要给代理有足够的时间在目标镜像上重试确认消息,您可以为您的环境自定义以下参数:
- 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>
(可选)如果在目标镜像上对信息进行分页,如果您希望代理协调将消息写入页面文件的重复检测信息,请将
mirrorPageTransaction
设置为true
。如果
mirrorPageTransaction
属性设置为false
,这是默认值,且代理之间发生通信失败,则会在个别情况下写入目标镜像。将此参数设置为
true
可增加代理的内存用量。- 使用 第 15.6 节 “在多站点、容错消息传递系统中配置客户端” 中记录的说明配置客户端,请注意,没有共享存储。
红帽不支持在镜像配置中使用来自这两个代理的客户端应用程序。要防止客户端在这两个代理上消耗消息,请在其中一个代理中禁用客户端 acceptors。