networking - 如何在 Kubernetes 网络中使用 Apache ActiveMQ Artemis
问题描述
我已经使用 jgroups 在 kubernetes 中设置了一个集群,并且集群似乎形成正确,每个节点都有一个本地 ip 和一个公共 ip,当我使用公共 ip 连接到其中一个节点时一切都很好,但是可用节点列表返回给客户端(wildfly实例)包含节点的本地ip而不是它们的公共ip,我已经定义了带有公共ip的连接器
<connectors>
<connector name="netty-connector">tcp://{public ip}:61616</connector>
</connectors>
然后将广播配置为
<broadcast-groups>
<broadcast-group name="my-broadcast-group">
<broadcast-period>5000</broadcast-period>
<jgroups-file>jgroups-file_ping.xml</jgroups-file>
<jgroups-channel>activemq_broadcast_channel</jgroups-channel>
<connector-ref>netty-connector</connector-ref>
</broadcast-group>
</broadcast-groups>
然后将发现配置为
<discovery-groups>
<discovery-group name="my-discovery-group">
<jgroups-file>jgroups-file_ping.xml</jgroups-file>
<jgroups-channel>activemq_broadcast_channel</jgroups-channel>
<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>STRICT</message-load-balancing>
<max-hops>1</max-hops>
<discovery-group-ref discovery-group-name="my-discovery-group"/>
</cluster-connection>
</cluster-connections>
每当我强制节点关闭客户端重新连接但失败并报告节点的本地 ip 时,我的印象是代理中定义的连接器用于向集群的其他成员广播但它使用本地 ip 是对吗?
Wildfly 运行并发送和接收消息,但每隔几分钟我就会收到以下日志
14:27:31,463 WARN [org.apache.activemq.artemis.service.extensions.xa.recovery] (Periodic Recovery) AMQ122015: Can not connect to XARecoveryConfig [transportConfiguration=[TransportConfiguration(name=, factory=org-apache-activemq-artemis-core-remoting-impl-netty-NettyConnectorFactory) ?trustStorePassword=****&port=61616&sslEnabled=true&host=x-x-x-x&trustStorePath=client-ts], discoveryConfiguration=null, username=username, password=****, JNDI_NAME=java:/RemoteJmsXA] on auto-generated resource recovery: ActiveMQNotConnectedException[errorType=NOT_CONNECTED message=AMQ119007: Cannot connect to server(s). Tried with all available servers.]at org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:797)
at org.apache.activemq.artemis.service.extensions.xa.recovery.ActiveMQXAResourceWrapper.connect(ActiveMQXAResourceWrapper.java:311)
at org.apache.activemq.artemis.service.extensions.xa.recovery.ActiveMQXAResourceWrapper.getDelegate(ActiveMQXAResourceWrapper.java:239)
at org.apache.activemq.artemis.service.extensions.xa.recovery.ActiveMQXAResourceWrapper.recover(ActiveMQXAResourceWrapper.java:69)
at org.apache.activemq.artemis.service.extensions.xa.ActiveMQXAResourceWrapperImpl.recover(ActiveMQXAResourceWrapperImpl.java:106)
at com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.xaRecoveryFirstPass(XARecoveryModule.java:634)
at com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.periodicWorkFirstPass(XARecoveryModule.java:226)
at com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.periodicWorkFirstPass(XARecoveryModule.java:171)
at com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery.doWorkInternal(PeriodicRecovery.java:770)
at com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery.run(PeriodicRecovery.java:382)
解决方案
通过为每个 pod 创建一个服务并将公共 ip 放入每个节点的连接器定义中,最终让它工作
推荐阅读
- python - 尝试从带有熊猫的对象数据类型的csv中导入所有列
- swift - 按子节点快速过滤firebase数据
- javascript - 如何运行 php 函数并使用 javascript/jquery 在页面上显示内容?
- reactive-programming - Mono\Flux 上的地图和订阅之间的区别?
- redux - 如何枚举给定关系模式的所有可能关联?
- r - 使用 data.table 根据另一列重新分配一列
- r - 提供更多独特价值的列表的最佳组合
- kubernetes - 是否有选择 Ingress 规则的顺序?
- xamarin.forms - Xamarin iOS NFC 会话意外失效
- shell - Shell 脚本调度程序