我在我的计算机上本地设置了一个Artemis HA-Custer示例,以了解它的基本工作原理。现在我想准备将其推送到kubernetes集群中。因此,我想改变代理节点的初始成员发现方式,这样我也可以在云中使用它。我想使用带有“jdbc_ping”的JMS和JGroup。实际上我不确定,如果我做得对,所以也许你可以告诉我如果不对。
到目前为止,代理已经成功地将他们的信息放在db-table中,并且显然是连接的。当我从我的java应用程序中尝试以下连接工厂时,它没有错误地启动并与代理连接。但是在某些方面,我不确定它是否正确。
@Bean
public ConnectionFactory connectionFactory() {
TransportConfiguration transportConfiguration = new TransportConfiguration(NettyConnectorFactory.class.getName());
ConnectionFactory cf = ActiveMQJMSClient.createConnectionFactoryWithHA(JMSFactoryType.CF, transportConfiguration);
return cf;
}
所以现在唯一的问题是,如何正确设置连接工厂以使用JGroup。
更新:
INFO 24528 --- [enerContainer-1] o.s.j.l.DefaultMessageListenerContainer : JMS message listener invoker needs to establish shared Connection
ERROR 24528 --- [enerContainer-1] o.s.j.l.DefaultMessageListenerContainer : Could not refresh JMS Connection for destination 'TestA' - retrying using FixedBackOff{interval=5000, currentAttempts=0, maxAttempts=unlimited}. Cause: Failed to create session factory; nested exception is ActiveMQInternalErrorException[errorType=INTERNAL_ERROR message=AMQ219004: Failed to initialise session factory]
ActiveMQ Artemis留档涵盖了以下内容:
最后,支持jgroup
方案,该方案为服务器发现提供了udp
方案的替代方案。URL模式是jgroup://channelName? file=jgroups-xml-conf-filename
其中jgroups-xml-conf-filename
引用了类路径上的XML文件,该文件包含JGroup配置,或者它可以是jgroup://channelName?properties=sole-jgroups-properties
。在这两种情况下,channelName
都是为创建的jgroup通道指定的名称。
在您的代码中,您可以执行如下操作:
@Bean
public ConnectionFactory connectionFactory() {
return new ActiveMQConnectionFactory("jgroups://channelName?file=jgroups-xml-conf-filename");
}
在您的情况下,客户端将需要访问代理正在使用的同一数据库,以便使用该信息进行发现。