为了账号安全,请及时绑定邮箱和手机立即绑定

Spring boot 2 通过 Apache Camel 连接到 rabbitmq

Spring boot 2 通过 Apache Camel 连接到 rabbitmq

富国沪深 2022-07-20 17:05:02
我在 Spring Boot 2 上通过 Apache Camel 连接到 rabbitmq 时遇到问题。我做了以下步骤:我的依赖:implementation "org.apache.camel:camel-spring-boot-starter:${camelVersion}"implementation "org.apache.camel:camel-jackson-starter:${camelVersion}"implementation "org.apache.camel:camel-core:${camelVersion}"implementation "org.apache.camel:camel-rabbitmq-starter:${camelVersion}"implementation "org.springframework.boot:spring-boot-starter-amqp"应用程序.yamlspring:      rabbitmq:      dynamic: true      host: 192.168.1.1      port: 5672      username: X      password: Y我有以下路线:@Componentpublic class BasicRoute extends RouteBuilder {@Overridepublic void configure() throws Exception {    from("direct:loggerQueue")            .id("loggerQueue")            .to("rabbitmq://TEST-QUEUE.exchange?queue=TEST-QUEUE.queue&autoDelete=false&connectionFactory=#rabbitConnectionFactory")            .end();}}Finnaly我仍然有以下问题:2019-03-06 12:46:05.766 WARN 19464 --- [restartedMain] oaccrabbitmq.RabbitMQProducer:无法创建连接。发布消息时它将尝试再次连接。java.net.ConnectException:连接被拒绝:连接连接似乎没问题,我测试了它。rabbitConnectionFactory 出了点问题。我不知道我有什么不好。
查看完整描述

1 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

问题似乎是 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

请注意,# 是可选的,因为当它试图查找 rabbit 连接工厂 bean 时,它会在代码中被删除。


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


spring:

  rabbitmq:

    host: localhost

    port: 5672

    username: guest

    password: guest


查看完整回答
反对 回复 2022-07-20
  • 1 回答
  • 0 关注
  • 272 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信