kubernetes - 如何在 ActiveMQ Artemis 中形成具有发现组的 3 个节点的对称集群?
问题描述
我在 Kubernetes 中创建了一个包含三个副本的 StatefulSet。覆盖代理 XML 文件如下 -
<configuration xmlns="urn:activemq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd">
<core xmlns="urn:activemq:core" xsi:schemaLocation="urn:activemq:core ">
<cluster-user>admin</cluster-user>
<cluster-password>admin</cluster-password>
<acceptors>
<acceptor name="stomp">tcp://0.0.0.0:61613?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=STOMP;useEpoll=true;stompConsumerCredits=1;stompEnableMessageId=true</acceptor>
</acceptors>
<connectors>
<connector name="$HOSTNAME">tcp://$HOSTNAME.<service>.<namespace>.<domain>:61616</connector>
</connectors>
<broadcast-groups>
<broadcast-group name="my-broadcast-group">
<group-address>231.7.7.7</group-address>
<group-port>9876</group-port>
<broadcast-period>100</broadcast-period>
<connector-ref>$HOSTNAME</connector-ref>
</broadcast-group>
</broadcast-groups>
<discovery-groups>
<discovery-group name="my-discovery-group">
<group-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-artemis-cluster">
<address></address>
<connector-ref>$HOSTNAME</connector-ref>
<check-period>1000</check-period>
<connection-ttl>5000</connection-ttl>
<min-large-message-size>50000</min-large-message-size>
<call-timeout>5000</call-timeout>
<retry-interval>500</retry-interval>
<retry-interval-multiplier>1.0</retry-interval-multiplier>
<max-retry-interval>5000</max-retry-interval>
<initial-connect-attempts>-1</initial-connect-attempts>
<reconnect-attempts>-1</reconnect-attempts>
<use-duplicate-detection>true</use-duplicate-detection>
<message-load-balancing>ON_DEMAND</message-load-balancing>
<max-hops>1</max-hops>
<confirmation-window-size>32000</confirmation-window-size>
<call-failover-timeout>30000</call-failover-timeout>
<notification-interval>1000</notification-interval>
<notification-attempts>10</notification-attempts>
<discovery-group-ref discovery-group-name="my-discovery-group"/>
</cluster-connection>
</cluster-connections>
<address-settings>
<address-setting match="/queue/#">
<default-address-routing-type>ANYCAST</default-address-routing-type>
<default-queue-routing-type>ANYCAST</default-queue-routing-type>
</address-setting>
<address-setting match="/topic/#">
<default-address-routing-type>MULTICAST</default-address-routing-type>
<default-queue-routing-type>MULTICAST</default-queue-routing-type>
</address-setting>
<address-setting match="#">
<auto-delete-queues>false</auto-delete-queues>
<auto-delete-jms-queues>false</auto-delete-jms-queues>
<auto-delete-jms-topics>false</auto-delete-jms-topics>
<auto-delete-addresses>false</auto-delete-addresses>
<max-delivery-attempts>100</max-delivery-attempts>
<expiry-delay>86400000</expiry-delay>
<redelivery-delay>3000</redelivery-delay>
<redelivery-delay-multiplier>1</redelivery-delay-multiplier>
<redelivery-collision-avoidance-factor>0.15</redelivery-collision-avoidance-factor>
<max-redelivery-delay>50000</max-redelivery-delay>
<default-consumer-window-size>0</default-consumer-window-size>
<redistribution-delay>3000</redistribution-delay>
</address-setting>
</address-settings>
<wildcard-addresses>
<routing-enabled>true</routing-enabled>
<delimiter>/</delimiter>
<any-words>#</any-words>
<single-word>*</single-word>
</wildcard-addresses>
</core>
</configuration>
我观察到的问题是,尽管进行了设置max-hops=1
,但Diagram选项卡仅显示了两个相互连接的节点。每个节点中的图表类似于 -
- node-0 : node-0 与 node-1 连接
- node-1 : node-1 与 node-0 连接
- node-2 : node-2 与 node-0 连接
虽然,期望在所有节点中,图表应如下所示 -
- node-<i> : node-0 与 node-1 连接;节点 1 与节点 2 连接;节点 0 与节点 2 连接
解决方案
I could solve this problem by creating a new connector -
<acceptors>
<acceptor name="netty">tcp://$HOSTNAME.<service>.<namespace>.<domain>:61617</acceptor>
</acceptors>
<connectors>
<connector name="netty">tcp://$HOSTNAME.<service>.<namespace>.<domain>:61617</connector>
</connectors>
Then used the netty
connector as the connector-ref
in the discovery-group
and cluster-connection
<configuration xmlns="urn:activemq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd">
<core xmlns="urn:activemq:core" xsi:schemaLocation="urn:activemq:core ">
<cluster-user>admin</cluster-user>
<cluster-password>admin</cluster-password>
<acceptors>
<acceptor name="netty">tcp://$HOSTNAME.<service>.<namespace>.<domain>:61617</acceptor>
</acceptors>
<connectors>
<connector name="netty">tcp://$HOSTNAME.<service>.<namespace>.<domain>:61617</connector>
</connectors>
<broadcast-groups>
<broadcast-group name="my-broadcast-group">
<group-address>231.7.7.7</group-address>
<group-port>9876</group-port>
<broadcast-period>100</broadcast-period>
<connector-ref>netty</connector-ref>
</broadcast-group>
</broadcast-groups>
<discovery-groups>
<discovery-group name="my-discovery-group">
<group-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-artemis-cluster">
<address></address>
<connector-ref>netty</connector-ref>
<check-period>1000</check-period>
<connection-ttl>5000</connection-ttl>
<min-large-message-size>50000</min-large-message-size>
<call-timeout>5000</call-timeout>
<retry-interval>500</retry-interval>
<retry-interval-multiplier>1.0</retry-interval-multiplier>
<max-retry-interval>5000</max-retry-interval>
<initial-connect-attempts>-1</initial-connect-attempts>
<reconnect-attempts>-1</reconnect-attempts>
<use-duplicate-detection>true</use-duplicate-detection>
<message-load-balancing>ON_DEMAND</message-load-balancing>
<max-hops>1</max-hops>
<confirmation-window-size>32000</confirmation-window-size>
<call-failover-timeout>30000</call-failover-timeout>
<notification-interval>1000</notification-interval>
<notification-attempts>10</notification-attempts>
<discovery-group-ref discovery-group-name="my-discovery-group"/>
</cluster-connection>
</cluster-connections>
<address-settings>
<address-setting match="/queue/#">
<default-address-routing-type>ANYCAST</default-address-routing-type>
<default-queue-routing-type>ANYCAST</default-queue-routing-type>
</address-setting>
<address-setting match="/topic/#">
<default-address-routing-type>MULTICAST</default-address-routing-type>
<default-queue-routing-type>MULTICAST</default-queue-routing-type>
</address-setting>
<address-setting match="#">
<auto-delete-queues>false</auto-delete-queues>
<auto-delete-jms-queues>false</auto-delete-jms-queues>
<auto-delete-jms-topics>false</auto-delete-jms-topics>
<auto-delete-addresses>false</auto-delete-addresses>
<max-delivery-attempts>100</max-delivery-attempts>
<expiry-delay>86400000</expiry-delay>
<redelivery-delay>3000</redelivery-delay>
<redelivery-delay-multiplier>1</redelivery-delay-multiplier>
<redelivery-collision-avoidance-factor>0.15</redelivery-collision-avoidance-factor>
<max-redelivery-delay>50000</max-redelivery-delay>
<default-consumer-window-size>0</default-consumer-window-size>
<redistribution-delay>3000</redistribution-delay>
</address-setting>
</address-settings>
<wildcard-addresses>
<routing-enabled>true</routing-enabled>
<delimiter>/</delimiter>
<any-words>#</any-words>
<single-word>*</single-word>
</wildcard-addresses>
</core>
</configuration>
推荐阅读
- angular - 想要使用 Angular 6 和路由根据下拉值显示组件
- c# - 在按钮或框架内显示小图像
- npm - `npm outdated -g` 不起作用,发生错误
- python - 实现类似机器学习的优化器
- c# - CreateInstanceAndUnwrap 无法在新的 appdomain 中加载程序集
- css - Angular Material - 如何设置 mat-horizontal-content-container padding 0
- r - 在 azure 机器学习上计算 R 脚本上的帮助列,以便以后可以将它们添加到表格模型中
- java - 我正在尝试安装 IBM Control Desk
- typescript - 如何强制类为函数成员实现具有正确类型签名的接口
- vue.js - vue-custom 指令调用方法