14.2.3. 使用基于 JGroups 的动态发现创建代理集群
如果您的环境中已在使用 JGroups,您可以使用它来创建代理集群,在其中代理会动态发现对方。
先决条件
必须安装和配置 JGroups。
如需 JGroups 配置文件的示例,请参阅 clustered
-jgroups
AMQ Broker 示例程序。
流程
-
打开
<broker_instance_dir>/etc/broker.xml
配置文件。 在
<core>
元素中添加连接器。此连接器定义了其他代理可用于连接此连接信息的连接信息。此信息会在发现过程中发送到集群中的其他代理。
<configuration> <core> ... <connectors> <connector name="netty-connector">tcp://localhost:61617</connector> </connectors> ... </core> </configuration>
在
<core>
元素中添加 JGroups 广播组。广播组可让代理将有关集群连接的信息推送到集群中的其他代理。这个广播组使用 JGroups 来广播连接设置:
<configuration> <core> ... <broadcast-groups> <broadcast-group name="my-broadcast-group"> <jgroups-file>test-jgroups-file_ping.xml</jgroups-file> <jgroups-channel>activemq_broadcast_channel</jgroups-channel> <broadcast-period>2000</broadcast-period> <connector-ref>netty-connector</connector-ref> </broadcast-group> </broadcast-groups> ... </core> </configuration>
除非另有说明,否则需要以下参数:
broadcast-group
-
使用
name
属性为广播组指定唯一的名称。 jgroups-file
- 用于初始化 JGroups 频道的 JGroups 配置文件的名称。文件必须位于 Java 资源路径中,以便代理可以加载它。
jgroups-channel
- 要连接进行广播的 JGroups 通道的名称。
broadcast-period
(可选)- 连续广播之间的间隔,以毫秒为单位。默认值为 2000 毫秒。
connector-ref
- 之前配置的群集连接器应广播。
添加 JGroups 发现组。
发现组定义如何接收连接器信息。代理维护连接器列表(每个代理一个条目)。当它从代理接收广播时,它会更新其条目。如果从代理接收广播的时间段长,它会删除该条目。
此发现组使用 JGroups 来发现集群中的代理:
<configuration> <core> ... <discovery-groups> <discovery-group name="my-discovery-group"> <jgroups-file>test-jgroups-file_ping.xml</jgroups-file> <jgroups-channel>activemq_broadcast_channel</jgroups-channel> <refresh-timeout>10000</refresh-timeout> </discovery-group> <discovery-groups> ... </core> </configuration>
除非另有说明,否则需要以下参数:
discovery-group
-
使用
name
属性为发现组指定唯一的名称。 jgroups-file
- 用于初始化 JGroups 频道的 JGroups 配置文件的名称。文件必须位于 Java 资源路径中,以便代理可以加载它。
jgroups-channel
- 用于接收广播的 JGroups 频道名称。
refresh-timeout
(可选)在从特定代理中删除代理连接器对条目前,发现组在从特定代理接收最后一次广播后等待的时间,以毫秒为单位。默认值为 10000 毫秒(10 秒)。
将它设置为比广播组中的
broadcast-period
高得多的值。否则,代理可能会定期从列表中消失(即使它们仍在广播)(因为时间稍有差异)。
创建集群连接并将其配置为使用动态发现。
默认情况下,集群连接将对对称拓扑中所有地址的消息进行负载均衡。
<configuration> <core> ... <cluster-connections> <cluster-connection name="my-cluster"> <connector-ref>netty-connector</connector-ref> <discovery-group-ref discovery-group-name="my-discovery-group"/> </cluster-connection> </cluster-connections> ... </core> </configuration>
cluster-connection
-
使用
name
属性指定集群连接的名称。 connector-ref
- 定义其他代理如何连接到这个连接器的连接器。
discovery-group-ref
- 此代理应该用来查找群集其他成员的发现组。仅当集群使用动态发现时,才需要配置此属性。
为集群连接配置任何附加属性。
这些额外的集群连接属性具有适合大多数常见用例的默认值。因此,当您不想默认行为时,您只需要配置这些属性。如需更多信息,请参阅 附录 C, 集群连接配置元素。
创建集群用户和密码。
AMQ Broker 附带默认集群凭证,但您应该更改这些凭证以防止未经授权的远程客户端使用这些默认凭证连接到代理。
重要群集密码必须在集群中的每个代理上都相同。
<configuration> <core> ... <cluster-user>cluster_user</cluster-user> <cluster-password>cluster_user_password</cluster-password> ... </core> </configuration>
对每个其他代理重复此步骤。
您可以将集群配置复制到每个额外代理中。但是,请勿复制任何其他 AMQ 代理数据文件(如绑定、日志和大型消息目录)。这些文件必须在群集中的节点之间唯一,否则群集无法正确组成。
其它资源
-
有关在 JGroups 中使用动态发现的代理集群示例,请参阅 clustered
-jgroups
AMQ Broker 示例程序。