1 回答
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
添加回答
举报