提问者:小点点

使用JMS、Artemis和带有jdbc_ping的JGroup设置spring-boot应用程序


我在我的计算机上本地设置了一个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]

共1个答案

匿名用户

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");
}

在您的情况下,客户端将需要访问代理正在使用的同一数据库,以便使用该信息进行发现。