Camel ActiveMQ + Spring boot 不读取 spring activemq 配置

Posted

技术标签:

【中文标题】Camel ActiveMQ + Spring boot 不读取 spring activemq 配置【英文标题】:Camel ActiveMQ + Spring boot not reading spring activemq configurations 【发布时间】:2018-01-31 13:48:16 【问题描述】:

我正在尝试使用 Spring Boot 1.5.2.RELEASE + Camel (Spring Boot Starter) + ActiveMQ 的非常简单的路线,即从特定队列中读取然后记录它。但是,它似乎没有为 URL 获取我的 spring.activemq 配置,因为我在日志中看到它正在尝试连接到不同的 url,并且它继续连接它并且我的 spring boot 应用程序永远不会启动。这些问题基于我在下面提供的配置,我该如何执行以下操作:

    修复配置以允许 spring 的 activemq 配置 配置 maxReconnectAttempts 以便在无法访问 URL 时不会尝试永远连接,如果 ActiveMQ 实例出现故障则可能发生这种情况

任何帮助将不胜感激。我确实在 *** 上搜索了相关问题,但没有一个能解决我面临的问题

我在控制台上看到的错误,这继续像 60-70 次尝试和计数一样。如您所见,camel 获取的代理 URL 是 spring 可能默认配置的一些默认 URL

Failed to connect to [tcp://localhost:61616] after: 10 attempt(s) continuing to retry.

这是我当前的配置/代码:

pom.xml - 相关部分

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
</parent>

<dependencyManagement>
    <dependencies>
        <!-- Spring Cloud is part of the project where I am configuring camel routes -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Camden.SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot-dependencies</artifactId>
            <version>2.19.2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <!-- I have this as the same project works as a web app as well 
    and therefore I do not need the 
    camel.springboot.main-run-controller=true configuration to be set
    which is as per camel's spring boot documentation-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Camel - start -->
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-camel</artifactId>
    </dependency>
    <!-- Camel - end -->

</dependencies>

application.yml (Spring Boot ActiveMQProperties)

spring:
  activemq:
    brokerUrl: tcp://my.company.host:[port] //This port is up and running
    user: user
    password: password

JAVA中的骆驼路线

package com.mycamel.route;

import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;

@Component
public class SampleAmqCamelRouter extends RouteBuilder 

    @Override
    public void configure() throws Exception 
        from("activemq:some.queue").to("log:com.mycamel.route?level=INFO&groupSize=10");
    


【问题讨论】:

【参考方案1】:

首先,您应该将 spring-boot-starter-activemq 依赖项添加到您的 pom.xml。然后你可以使用它的 AutoConfiguration 功能,它会根据你在 application.yml 中指定的属性创建一个ConnectionFactory

之后,您还必须配置 Camel 的ActiveMQComponent。如果您想重用ConnectionFactory(由自动配置创建),则可以通过以下方式实现:

@Configuration
public class ActiveMQComponentConfig 

    @Bean(name = "activemq")
    public ActiveMQComponent createComponent(ConnectionFactory factory) 
        ActiveMQComponent activeMQComponent = new ActiveMQComponent();
        activeMQComponent.setConnectionFactory(factory);
        return activeMQComponent;
    

您可以在Camel's ActiveMQ documentation找到更多信息。

【讨论】:

非常感谢!!添加“activemq”bean 就成功了。我确实添加了 spring-boot-starter-activemq 依赖项,但效果不佳。两者的结合实际上起到了作用。

以上是关于Camel ActiveMQ + Spring boot 不读取 spring activemq 配置的主要内容,如果未能解决你的问题,请参考以下文章

使用 ActiveMQ、Camel 和 Spring 实现请求-回复模式

ActiveMQ(07):ActiveMQ结合Spring开发--建议

如何延迟spring bean启动?

用 Camel 拦截 ActiveMQ 消息

Camel ActiveMQ 性能调优

带有 ActiveMQ 集群的 Apache Camel