Apache camel Camel Artemis连接池不符合JMS 2.0

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

我正试图让骆驼与阿耳特弥斯和连接池配合得很好。我正在使用以下技术堆栈

Springboot:2.3.1.1版本 骆驼:3.4.1 连接池是使用以下依赖项创建的:

org.messaginghub.pooled-jms.JmsPoolConnectionFactory org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory 在启动过程中,我仍然看到以下消息:

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客户端时,一些集群功能没有按预期工作。