我遇到以下错误:
未找到与org.springframework.amqp.rabbit.connection.ConnectionFactory匹配的唯一服务
说明:
spring-cloud-starter-bus-amqp
连接到RabbitMQ。cf push
Springboot App到PCF时,出现了上述异常。RabbitServiceAutoConfiguration.CloudProfile.CloudConnectors.UseCloudConnectors
创建了rabbitmqConnectionFactory
,但由于我的PCF空间根本没有RabbitMQ服务而失败了。问题:如何配置Springboot App,它可以毫无问题地部署到PCF?
我尝试过的...(如下),但是没有用。
@Profile("cloud")
@Configuration
@EnableConfigurationProperties(RabbitmqInfo.class)
@Slf4j
public class RabbitmqConfig extends AbstractCloudConfig {
@Bean
public ConnectionFactory rabbitmqConnectionFactory(@Autowired RabbitmqInfo rabbitmq) {
CachingConnectionFactory factory = new CachingConnectionFactory();
factory.setHost(rabbitmq.getHost());
factory.setPort(rabbitmq.getPort());
factory.setUsername(rabbitmq.getUsername());
factory.setPassword(rabbitmq.getPassword());
log.info("[*] rabbitmqConnectionFactory uses CachingConnectionFactory");
log.info("[*] rabbitmq.host: {}", factory.getHost());
return factory;
}
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory rabbitmqConnectionFactory) {
return new RabbitTemplate(rabbitmqConnectionFactory);
}
}
我的build.gradle
依赖项:
...
compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-bus-amqp', version: '2.1.1.RELEASE'
...
堆栈跟踪:
scaAnnotationConfigApplicationContext:上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建名称为“ rabbitConnectionFactory”的Bean的错误定义在org.springframework.cloud.stream.binder.rabbit.config中。 RabbitServiceAutoConfiguration $ CloudProfile $ CloudConnectors $ UseCloudConnectors:通过工厂方法实例化Bean失败;嵌套的异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.springframework.amqp.rabbit.connection.ConnectionFactory]:工厂方法'rabbitConnectionFactory'抛出了异常;嵌套的异常是org.springframework.cloud.CloudException:找不到与接口org.springframework.amqp.rabbit.connection.ConnectionFactory匹配的唯一服务。预期1,找到0
谢谢您的时间。
答案 0 :(得分:0)
研究了Spring云流源代码之后,我找到了绕过平台上Rabbitmq的云配置的解决方案。这样,如果您在PCF平台上没有Rabbitmq,仍然可以将Spring Boot App部署到PCF上而不会出现任何问题。就我而言,Rabbitmq在平台之外的Dev VM服务器上运行。
在您的application.properties
中,设置以下内容:
spring.cloud.stream.override-cloud-connectors=true