使用Spring Boot设置Camel和Activemq

zac*_*ung 11 java activemq-classic apache-camel spring-boot

我在几个例子中注意到,使用camel配置activemq的常用方法是使用以下bean.我想知道Spring Boot是否已经默认配置了这些bean.我知道如果activemq jar在类路径上,则会创建一个默认的连接工厂,但是下面的内容呢?

<bean id="jmsConnectionFactory"
        class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="tcp://localhost:61616"/>
  </bean>

  <bean id="pooledConnectionFactory"
        class="org.apache.activemq.pool.PooledConnectionFactory"
        init-method="start" destroy-method="stop">
    <property name="maxConnections" value="8"/>
    <property name="connectionFactory" ref="jmsConnectionFactory"/>
  </bean>

  <bean id="jmsConfig"
        class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="pooledConnectionFactory"/>
    <property name="concurrentConsumers" value="10"/>
  </bean>

  <bean id="jms"
        class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="configuration" ref="jmsConfig"/>
    <property name="transacted" value="true"/>
    <property name="cacheLevelName" value="CACHE_CONSUMER"/>
  </bean>
Run Code Online (Sandbox Code Playgroud)

要么

@Bean
    public ActiveMQConnectionFactory getConnectionFactory() {
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
        connectionFactory.setBrokerURL(brokerURL);
        return connectionFactory;
    }

    @Bean(initMethod = "start", destroyMethod = "stop")
    public PooledConnectionFactory getPooledConnectionFactory() {
        PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory();
        pooledConnectionFactory.setMaxConnections(maxConnections);
        pooledConnectionFactory.setConnectionFactory(getConnectionFactory());
        return pooledConnectionFactory;
    }

    @Bean
    public JmsConfiguration getJmsConfiguration() {
        JmsConfiguration jmsConfiguration = new JmsConfiguration();
        jmsConfiguration.setConnectionFactory(getPooledConnectionFactory());
        return jmsConfiguration;
    }

    @Bean
    public JmsConfiguration getJmsHighPriorityConfiguration() {
        JmsConfiguration jmsConfiguration = new JmsConfiguration();
        jmsConfiguration.setConnectionFactory(getPooledConnectionFactory());
        jmsConfiguration.setPriority(8);
        return jmsConfiguration;
    }

    @Override
    protected void setupCamelContext(CamelContext camelContext) throws Exception {
        ActiveMQComponent activeMQComponent = new ActiveMQComponent();
        activeMQComponent.setConfiguration(getJmsConfiguration());
        camelContext.addComponent("activemq", activeMQComponent);

        ActiveMQComponent activeMQHighPriorityComponent = new ActiveMQComponent();
        activeMQHighPriorityComponent.setConfiguration(getJmsHighPriorityConfiguration());
        camelContext.addComponent("activemq-high-priority", activeMQHighPriorityComponent);
    }
Run Code Online (Sandbox Code Playgroud)

gto*_*nic 3

同时还有一些spring-boot-starters可用于让 ActiveMQ 和 Camel 在 Spring Boot 中运行。

ActiveMQ

从你的 pom开始spring-boot-starter-activemq

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

配置

看看可以通过此配置什么 - 其记录在附录 A 中。常见应用程序属性(搜索“activemq”和“jms”)。

替代方法:从我的角度来看,确定 Sprint Boot 中哪些可配置、哪些不可配置的最好方法是查看其auto-configuration机制:

骆驼

Apache Camel 提供了自己的Spring Boot 集成。基本上你还必须添加camel-spring-boot-starter

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-spring-boot-starter</artifactId>
    <version>2.17.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

配置

我还没有找到一个好的示例配置文件,所以再次查看一下通过CamelConfigurationProperties类公开的配置。

一般来说 - 就像您提到的 - 如果您没有找到通过此配置公开的所有属性,您可能最终会手动注册一些 bean。