Java Spring boot 2通过Apache Camel连接到rabbitmq

Java Spring boot 2通过Apache Camel连接到rabbitmq,java,spring,spring-boot,rabbitmq,apache-camel,Java,Spring,Spring Boot,Rabbitmq,Apache Camel,我在SpringBoot2上通过ApacheCamel连接到rabbitmq时遇到问题 我采取了以下步骤: 我的依赖项: 应用程序.yaml spring: rabbitmq: dynamic: true host: 192.168.1.1 port: 5672 username: X password: Y 我有以下路线: @Component public class BasicRoute extends RouteB

我在SpringBoot2上通过ApacheCamel连接到rabbitmq时遇到问题

我采取了以下步骤:

我的依赖项:

应用程序.yaml

spring:
      rabbitmq:
      dynamic: true
      host: 192.168.1.1
      port: 5672
      username: X
      password: Y
我有以下路线:

@Component
public class BasicRoute extends RouteBuilder {

@Override
public void configure() throws Exception {

    from("direct:loggerQueue")
            .id("loggerQueue")
            .to("rabbitmq://TEST-QUEUE.exchange?queue=TEST-QUEUE.queue&autoDelete=false&connectionFactory=#rabbitConnectionFactory")
            .end();
}
}

最后,我还有以下问题:

2019-03-06 12:46:05.766警告19464---[restartedMain]o.a.c.c.rabbitmq.RabbitMQProducer:无法创建连接。它将在发布消息时再次尝试连接。 java.net.ConnectException:连接被拒绝:连接

连接看起来不错,我测试过了。兔子连接工厂有点不好


我不知道我有什么不好的地方。

问题似乎是RabbitMQComponent希望找到com.rabbitmq.client.ConnectionFactory类型的连接工厂

但是,springboot自动配置正在创建类型为org.springframework.amqp.rabbit.connection.CachingConnectionFactory的连接工厂

因此,每当RabbitMQComponent尝试查找适当的连接工厂时,由于它正在查找特定类型,并且由于它没有子类化rabbitmq ConnectionFactory,它将返回空值,并且无法使用application.yml中指定的适当主机名和配置参数

You should also see the following in your log if you have debug level set:
2019-12-15 17:58:53.631 DEBUG 48710 --- [           main] o.a.c.c.rabbitmq.RabbitMQComponent       : Creating RabbitMQEndpoint with host null:0 and exchangeName: asterix
2019-12-15 17:58:55.927 DEBUG 48710 --- [           main] o.a.c.c.rabbitmq.RabbitMQComponent       : Creating RabbitMQEndpoint with host null:0 and exchangeName: asterix-sink
编辑: 作为自动配置的一部分,CachingConnectionFactory配置了所需的Rabbit连接工厂。但是,您需要提供指向正确工厂的链接

因此,您需要添加@Bean来消除歧义

@Configuration
@RequiredArgsConstructor
public class CamelConfig {

  private final CachingConnectionFactory rabbitConnectionFactory;

  @Bean
  com.rabbitmq.client.ConnectionFactory rabbitSourceConnectionFactory() {
    return rabbitConnectionFactory.getRabbitConnectionFactory();
  }
}
在端点配置中:

rabbitmq:asterix?connectionFactory=#rabbitSourceConnectionFactory
注意,#是可选的,因为当它试图找到兔子连接工厂bean时,它在代码中被剥离

在application.yml中,配置连接参数(url不再包含在端点URI中)


您是否尝试将属性前缀从
spring.rabbit
更改为
camel.component.rabbitmq
?仍然存在相同的错误。
rabbitmq:asterix?connectionFactory=#rabbitSourceConnectionFactory
spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest