Nano Hash - криптовалюты, майнинг, программирование

Приложение Spring-boot не может быть развернуто в PCF из-за RabbitServiceAutoConfiguration

Я получил следующую ошибку:

Не найден уникальный интерфейс сопоставления служб 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

Спасибо за ваше время.


Ответы:


1

Изучив исходный код облачного потока Spring, я обнаружил решение, которое позволяет обойти настройку облака для Rabbitmq на платформе. Таким образом, если у вас нет Rabbitmq на платформе PCF, вы все равно можете без проблем развернуть свое приложение Spring Boot на PCF. В моем случае Rabbitmq работает на сервере Dev VM вне платформы.

В вашем application.properties установите следующее:

spring.cloud.stream.override-cloud-connectors=true
23.05.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..