由于RabbitServiceAutoConfiguration,无法将Spring-boot App部署到PCF

时间:2019-05-23 05:44:08

标签: spring-boot rabbitmq amqp pcf

我遇到以下错误:

  

未找到与org.springframework.amqp.rabbit.connection.ConnectionFactory匹配的唯一服务

说明:

  • RabbitMQ在Dev服务器上的Pivotal Cloud Foundry平台上运行。
  • 在PCF平台上,没有RabbitMQ服务(市场)
  • Springboot应用程序使用spring-cloud-starter-bus-amqp连接到RabbitMQ。
  • 如果Springboot App在本地运行,一切都会按预期运行
  • 但是,当cf push Springboot App到PCF时,出现了上述异常。
  • 根本原因是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

谢谢您的时间。

1 个答案:

答案 0 :(得分:0)

研究了Spring云流源代码之后,我找到了绕过平台上Rabbitmq的云配置的解决方案。这样,如果您在PCF平台上没有Rabbitmq,仍然可以将Spring Boot App部署到PCF上而不会出现任何问题。就我而言,Rabbitmq在平台之外的Dev VM服务器上运行。

在您的application.properties中,设置以下内容:

spring.cloud.stream.override-cloud-connectors=true