Apache camel Camel Artemis连接池不符合JMS 2.0
我正试图让骆驼与阿耳特弥斯和连接池配合得很好。我正在使用以下技术堆栈 Springboot:2.3.1.1版本 骆驼:3.4.1 连接池是使用以下依赖项创建的: org.messaginghub.pooled-jms.JmsPoolConnectionFactory org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory 在启动过程中,我仍然看到以下消息:Apache camel Camel Artemis连接池不符合JMS 2.0,apache-camel,jms,activemq-artemis,Apache Camel,Jms,Activemq Artemis,我正试图让骆驼与阿耳特弥斯和连接池配合得很好。我正在使用以下技术堆栈 Springboot:2.3.1.1版本 骆驼:3.4.1 连接池是使用以下依赖项创建的: org.messaginghub.pooled-jms.JmsPoolConnectionFactory org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory 在启动过程中,我仍然看到以下消息: o.m.pooled.jms.JmsPoolConnectionF
o.m.pooled.jms.JmsPoolConnectionFactory : JMS ConnectionFactory on classpath is not a JMS 2.0+ version
连接工厂来自Artemis代码库,因此不确定JmsPoolConnectionFactory为什么会这样说
请参见下面的我的代码:
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.component.jms.JmsConfiguration;
import org.messaginghub.pooled.jms.JmsPoolConnectionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.jms.JMSException;
@Configuration
public class ApplicationConfiguration {
private ActiveMQConnectionFactory connectionFactory = new org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory();
@Bean
public JmsComponent jms() throws JMSException {
// Create the connectionfactory which will be used to connect to Artemis
connectionFactory.setBrokerURL("(tcp://artemo-activemq-artemis-master-0.artemo-activemq-artemis-master.default.svc.cluster.local:61616,tcp://artemo-activemq-artemis-master-1.artemo-activemq-artemis-master.default.svc.cluster.local:61616)");
connectionFactory.setUseTopologyForLoadBalancing(true);
connectionFactory.setUser("artemis");
connectionFactory.setPassword("artemis");
connectionFactory.setConsumerWindowSize(8388608);
JmsPoolConnectionFactory pooledConnectionFactory = new JmsPoolConnectionFactory();
pooledConnectionFactory.setMaxConnections(16);
pooledConnectionFactory.setConnectionFactory(connectionFactory);
JmsConfiguration jmsConfiguration = new JmsConfiguration();
jmsConfiguration.setConcurrentConsumers(16);
jmsConfiguration.setArtemisStreamingEnabled(true);
jmsConfiguration.setTransacted(true);
jmsConfiguration.setConnectionFactory(pooledConnectionFactory);
// Create the Camel JMS component and wire it to our Artemis connectionfactory
JmsComponent jms = new JmsComponent();
jms.setConfiguration(jmsConfiguration);
return jms;
}
}
我相信这里的消息是指类路径上的javax.jms.ConnectionFactory接口,而不是javax.jms.ConnectionFactory的ActiveMQ Artemis实现。因此,您应该检查类路径上的JMS API版本。这是ActiveMQ Artemis使用的依赖项: org.apache.geronimo.specs geronimo-jms_2.0_规范 1.0-α-2
我相信这里的消息是指类路径上的javax.jms.ConnectionFactory接口,而不是javax.jms.ConnectionFactory的ActiveMQ Artemis实现。因此,您应该检查类路径上的JMS API版本。这是ActiveMQ Artemis使用的依赖项: org.apache.geronimo.specs geronimo-jms_2.0_规范 1.0-α-2
什么是阿耳特弥斯版本?它应该可以工作,因为ActiveMQConnectionFactory上存在createContextint sessionMode,这是JmsPoolConnectionFactory通过反射寻找的。什么是Artemis版本?它应该可以工作,因为ActiveMQConnectionFactory上存在createContextint sessionMode,这是JmsPoolConnectionFactory通过反射寻找的。是的,我做了一些挖掘,似乎Camel中的JMS组件不兼容JMS2,我切换到了兼容JMS 2的SJMS2组件。此组件有自己的连接池,因此也不需要消息中心连接池,这会稍微简化依赖关系。阿耳特弥斯似乎也能更好地发挥作用。当使用JMS 1.0客户端时,一些集群功能没有按预期工作。是的,我做了一些挖掘,似乎Camel中的JMS组件不兼容JMS2,我切换到了与JMS 2兼容的SJMS2组件。此组件有自己的连接池,因此也不需要消息中心连接池,这会稍微简化依赖关系。阿耳特弥斯似乎也能更好地发挥作用。当使用JMS 1.0客户端时,一些集群功能没有按预期工作。