Я получил следующую ошибку:
Не найден уникальный интерфейс сопоставления служб org.springframework.amqp.rabbit.connection.ConnectionFactory
Описание:
- RabbitMQ работает на платформе Pivotal Cloud Foundry на сервере разработки.
- На платформе 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'
...
Трассировка стека:
s.c.a.AnnotationConfigApplicationContext: Исключение во время инициализации контекста — отмена попытки обновления: org.springframework.beans.factory.BeanCreationException: Ошибка создания bean-компонента с именем «rabbitConnectionFactory», определенным в org.springframework.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
Спасибо за ваше время.