Я получил следующую ошибку:
Нет уникального интерфейса, соответствующего сервису org.springframework.amqp.rabbit.connection.ConnectionFactory найден
Описание:
- RabbitMQ работает на платформе Pivotal Cloud Foundry на сервере Dev.
- На платформе PCF НЕТ службы RabbitMQ (торговая площадка)
- Приложение Springboot использует
spring-cloud-starter-bus-amqp
для подключения к RabbitMQ. - Если приложение Springboot работает локально, все работает как положено
- Однако, когда
cf push
Приложение Springboot для PCF, я получил указанное выше исключение. - Основной причиной было то, что PCF использовал автоконфигурацию
RabbitServiceAutoConfiguration.CloudProfile.CloudConnectors.UseCloudConnectors
для создания rabbitmqConnectionFactory
, и это, конечно, не удалось, поскольку в моем пространстве PCF вообще не было службы RabbitMQ.
Вопрос: Как настроить приложение Springboot и его можно без проблем развернуть на 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'
...
Стекtrace:
scaAnnotationConfigApplicationContext: Исключительная ситуация, возникшая во время инициализации контекста - отмена попытки обновления: org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем rabbitConnectionFactory, определенного в org.springfrawork.cloud.stream.binder.rabbit.config.RabbitServiceAutoConfiguration $ CloudProfile $ CloudConnectors $ UseCloudConnectors: не удалось создать экземпляр компонента с помощью метода фабрики;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.amqp.rabbit.connection.ConnectionFactory]: метод фабрики 'rabbitConnectionFactory' вызвал исключение;вложенным исключением является org.springframework.cloud.CloudException: не найдено ни одного уникального сервиса, соответствующего интерфейсу org.springframework.amqp.rabbit.connection.ConnectionFactory.Ожидается 1, найдено 0
Спасибо за ваше время.