【问题标题】:Spring-boot App can't be deployed to PCF due to RabbitServiceAutoConfiguration由于 RabbitServiceAutoConfiguration,Spring-boot App 无法部署到 PCF
【发布时间】:2019-05-23 05:44:07
【问题描述】:

我收到以下错误:

没有找到唯一的服务匹配接口org.springframework.amqp.rabbit.connection.ConnectionFactory

说明:

  • RabbitMQ 在开发服务器上运行 Pivotal Cloud Foundry 平台。
  • 在 PCF 平台上,没有 RabbitMQ 服务(市场)
  • Springboot App 使用spring-cloud-starter-bus-amqp 连接RabbitMQ。
  • 如果 Springboot App 在本地运行,一切都会按预期运行
  • 但是,当cf push Springboot App to 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'
...

堆栈跟踪:

s.c.a.AnnotationConfigApplicationContext :上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.BeanCreationException:在 org.springframework.cloud.stream.binder.rabbit.config 中创建名称为“rabbitConnectionFactory”的 bean 时出错。 RabbitServiceAutoConfiguration$CloudProfile$CloudConnectors$UseCloudConnectors:通过工厂方法进行 Bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.springframework.amqp.rabbit.connection.ConnectionFactory]:工厂方法“rabbitConnectionFactory”抛出异常;嵌套异常是 org.springframework.cloud.CloudException: No unique service matching interface org.springframework.amqp.rabbit.connection.ConnectionFactory found。预期 1,找到 0

感谢您的宝贵时间。

【问题讨论】:

    标签: spring-boot rabbitmq amqp pcf


    【解决方案1】:

    在查看Spring cloud stream源码后,我发现了绕过平台上Rabbitmq的云配置的解决方案。这样,如果您在 PCF 平台上没有 Rabbitmq,您仍然可以将 Spring Boot 应用程序部署到 PCF 上而不会出现任何问题。在我的例子中,Rabbitmq 在平台外的 Dev VM 服务器上运行。

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-22
      • 2018-03-09
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多