16.2. 配置代理连接
以下流程演示了如何配置代理连接以在代理间镜像信息。任何时候只有一个代理处于活跃状态,所有信息都会镜像到另一个代理。
先决条件
- 您有两个工作代理。
流程
在
broker.xml
文件中为第一个代理创建一个broker-connections
元素,例如:<broker-connections> <amqp-connection uri="tcp://<hostname>:<port>" name="DC1"> <mirror/> </amqp-connection> </broker-connections>
<hostname>
- 其他代理实例的主机名。
<port>
- 其他主机上代理使用的端口。
第一个代理上的所有消息都会镜像到第二个代理,但创建镜像前存在的消息不会被镜像(mirror)。
如果您希望第一个代理同步镜像消息,以确保镜像代理在灾难恢复时处于最新状态,请在代理的
amqp-connection
元素中设置sync=true
属性,如下例所示。同步镜像要求代理发送到镜像代理的消息同时写入两个代理的卷。两个代理上完成写入操作后,源代理确认写入请求已完成,并返回给客户端。
<broker-connections> <amqp-connection uri="tcp://<hostname>:<port>" name="DC2"> <mirror sync="true"/> </amqp-connection> </broker-connections>
注意如果无法在镜像代理上完成写入请求,例如,如果代理不可用,则客户端连接会被阻断,直到镜像可用来完成最新的写入请求。
您还可以配置以下额外功能:
-
queue-removal
:指定是否发送 queue- 或 address-removal 事件。默认值为true
。 -
Message-acknowgments
:指定是否发送消息确认。默认值为true
。 -
queue-creation
:指定是否发送队列或地址创建事件。默认值为true
。
注意示例中的代理连接名称
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>
- 使用 第 15.6 节 “在多站点、容错消息传递系统中配置客户端” 中记录的说明配置客户端,请注意,使用代理连接,没有共享存储。
红帽不支持在镜像配置中使用来自这两个代理的客户端应用程序。要防止客户端在这两个代理上消耗消息,请在其中一个代理中禁用客户端 acceptors。