9.2.2. 其他代理集群拓扑
代理集群可以在许多不同的拓扑中连接。在 AMQ Broker 7 中,对称和链集群是最常见的。
示例:对称集群
在完整的网格拓扑中,每个代理都连接到集群中的所有其他代理。这意味着集群中的每个代理都不会超过一个与其他代理的跃点。
这个示例使用动态发现功能使集群中的代理可以相互发现。通过将 max-hops 设置为 1,每个代理将连接到其他代理:
<!-- Clustering configuration -->
<broadcast-groups>
<broadcast-group name="my-broadcast-group">
<group-address>${udp-address:231.7.7.7}</group-address>
<group-port>9876</group-port>
<broadcast-period>100</broadcast-period>
<connector-ref>netty-connector</connector-ref>
</broadcast-group>
</broadcast-groups>
<discovery-groups>
<discovery-group name="my-discovery-group">
<group-address>${udp-address:231.7.7.7}</group-address>
<group-port>9876</group-port>
<refresh-timeout>10000</refresh-timeout>
</discovery-group>
</discovery-groups>
<cluster-connections>
<cluster-connection name="my-cluster">
<connector-ref>netty-connector</connector-ref>
<retry-interval>500</retry-interval>
<use-duplicate-detection>true</use-duplicate-detection>
<message-load-balancing>ON_DEMAND</message-load-balancing>
<max-hops>1</max-hops>
<discovery-group-ref discovery-group-name="my-discovery-group"/>
</cluster-connection>
</cluster-connections>示例:链集群
在链集群中,代理形成一个线性"链",每个端有一个代理,另一个代理则连接链中的前一个和下一个代理(例如,A→B→C)。
这个示例使用静态发现功能将三个代理连接到链集群中。每个代理都连接到链中的下一个代理,max-hops 设置为 2 来启用信息流过整个链。
第一个代理配置如下:
<connectors>
<connector name="netty-connector">tcp://localhost:61616</connector>
<!-- connector to broker2 -->
<connector name="broker2-connector">tcp://localhost:61716</connector>
</connectors>
<cluster-connections>
<cluster-connection name="my-cluster">
<address>jms</address>
<connector-ref>netty-connector</connector-ref>
<retry-interval>500</retry-interval>
<use-duplicate-detection>true</use-duplicate-detection>
<message-load-balancing>STRICT</message-load-balancing>
<max-hops>2</max-hops>
<static-connectors allow-direct-connections-only="true">
<connector-ref>broker2-connector</connector-ref>
</static-connectors>
</cluster-connection>
</cluster-connections>第二个代理配置如下:
<connectors>
<connector name="netty-connector">tcp://localhost:61716</connector>
<!-- connector to broker3 -->
<connector name="broker3-connector">tcp://localhost:61816</connector>
</connectors>
<cluster-connections>
<cluster-connection name="my-cluster">
<address>jms</address>
<connector-ref>netty-connector</connector-ref>
<retry-interval>500</retry-interval>
<use-duplicate-detection>true</use-duplicate-detection>
<message-load-balancing>STRICT</message-load-balancing>
<max-hops>1</max-hops>
<static-connectors allow-direct-connections-only="true">
<connector-ref>broker3-connector</connector-ref>
</static-connectors>
</cluster-connection>
</cluster-connections>最后,第三个代理被配置为如下:
<connectors>
<connector name="netty-connector">tcp://localhost:61816</connector>
</connectors>
<cluster-connections>
<cluster-connection name="my-cluster">
<address>jms</address>
<connector-ref>netty-connector</connector-ref>
<retry-interval>500</retry-interval>
<use-duplicate-detection>true</use-duplicate-detection>
<message-load-balancing>STRICT</message-load-balancing>
<max-hops>0</max-hops>
</cluster-connection>
</cluster-connections>