Как завершить Spring-Boot Rabbitmq Application, не запуская контейнер Listener и не вызывая Template - PullRequest
0 голосов
/ 27 июня 2019

Я работаю над приложением весенней загрузки, в котором учетные данные кролика считываются из внешнего источника.Мне нужно завершить приложение, когда возникает проблема с чтением учетных данных из этого источника.1. У меня есть слушатель кролика 2. Процессор 3. И издатель с руководством Ack.

**

Проблема

** При возникновении ошибкиЯ звоню ConfigurableApplicationContext.close ().Но мой шаблон кролика все еще создается и пытается подключиться к кролику mq.

Пробные решения

  • Я пытался использовать это в своем приложении @EnableAutoConfiguration (exclude = RabbitAutoConfiguration.class)
  • spring.autoconfigure.exclude = true
  • spring.rabbitmq.listener.simple.auto-startup = false У меня нет ни одной из вышеуказанных опций.Как выйти из приложения Прервать из точки сбоя.

Мой код выглядит следующим образом


@Configuration
public class RabbitMqConfig {

    @PostConstruct
    public void getAIMCredentails() {
        loadAimSecretsForRabbitConfig();
    }
 public void loadAimSecretsForRabbitConfig(ConfigurableApplicationContext ctx){
      // on error 
     cntx.close();
  }
}



     @Configuration
        public class TopicConfiguration {
             @Bean
            public CachingConnectionFactory cachingConnectionFactory() {
                CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
                cachingConnectionFactory.setAddresses(rabbitMqConfig.getPublisherAddresses());
                cachingConnectionFactory.setUsername(rabbitMqConfig.getPublisherUsername());
                cachingConnectionFactory.setPassword(rabbitMqConfig.getPublisherPassword());
                cachingConnectionFactory.setVirtualHost(rabbitMqConfig.getVhost());
                cachingConnectionFactory.createConnection();
                cachingConnectionFactory.setPublisherReturns(true);
                cachingConnectionFactory.setPublisherConfirms(true);
                cachingConnectionFactory.setConnectionNameStrategy(f -> "publisherConnection");
                return cachingConnectionFactory;
            }

            /**
             * Bean RabbitTemplate
             * @return RabbitTemplate
             */
            @Bean
            public RabbitTemplate template(
                    @Qualifier("cachingConnectionFactory") CachingConnectionFactory cachingConnectionFactory) {
                // some code Here 
                return rabbitTemplate;
            }

            /**
             * Bean Jackson2JsonMessageConverter
             * @return Jackson2JsonMessageConverter
             */
            @Bean
            public Jackson2JsonMessageConverter producerJackson2MessageConverter() {
                return new Jackson2JsonMessageConverter();
            }
        } 

Edit1:

Я использую spring-rabbit-2.1.5.RELEASE и spring-starter-amqp-2.1.4.RELEASE Шаблон Rabbit вызывается так:


    @Component
    public class EPPQ2Subscriber {
        private static final Logger LOGGER = LoggerFactory.getLogger(EPPQ2Subscriber.class);
        //@RabbitListener(queues = "#{queue.getName()}") @TODO I wann to use this in later point in time.. !
        @Autowired
        RabbitMqConfig rabbitMqConfig;

        @Autowired
        AppConfig appConfig;

        @Autowired
        EPPQ2PublisherImpl eppQ2Publisher; //which intern calls the Topic config by auto-wiring

    }


    @Component
    public class EPPQ2PublisherImpl implements EPPQ2Publisher{
        @Autowired
        RabbitMqConfig rabbitMqConfig;

        @Autowired
        private RabbitTemplate rabbitTemplate;  // this is ref 

        private Channel channel;

    }

Журналы: Произошла ошибка комментарий

2019-06-27 09: 46: 01,626 INFO scrubber.util.AIMPropertiesUtil [main] ---- Запустить createRequestProperties -----
2019-06-27 09: 46: 01,628 ИНФОРМАЦИЯ scrubber.util.AIMPropertiesUtil [main] ---- Конец createRequestProperties -----
2019-06-27 09: 46: 01,630 ИНФОРМАЦИЯ scrubber.service.AimSecretRequesterService [main] START requestContentвыполнит 3 попытки.
2019-06-27 09: 46: 02,688 ОШИБКА scrubber.service.AimSecretRequesterService [main] Системная ошибка secret.management.SecretRequestException Не удается получить секрет [Retrieve Secret Faile 2019-06-27 09:46:02,693 ОШИБКА scrubber.service.AimSecretRequesterService [main] Стек ошибок {}
secret.management.SecretRequestException: получить секретный сбой не удалось [Получить секретный сбой!]!

вызов функции cntx.close () // комментарий 2019-06-27 09: 46: 02,695 ОШИБКА scrubber.configuration.RabbitMqConfig [main] ****** -------------------------------------------------------- *****
2019-06-27 09: 46: 02,695 ОШИБКА scrubber.configuration.RabbitMqConfig [main] Невозможно получить идентификатор пользователя кролика, секретный из PPM
2019-06-27 09:46: 02,695 ОШИБКА scrubber.configuration.RabbitMqConfig [main] Прервать приложение.вызов ... shutdown Manger
2019-06-27 09: 46: 02,695 ОШИБКА scrubber.configuration.RabbitMqConfig [main] ****** -------------------------------------------------------- *****

Фабрика соединений шаблонов пытается подключиться комментарий 2019-06-27 09: 46: 02,837 ИНФОРМАЦИЯ org.springframework.amqp.rabbit.connection.AbstractConnectionFactory [main] Попытка подключения к: [NCBXMN.cb.domain.com: 5672, Anbasjk.cb.domain.com:5672]

1 Ответ

0 голосов
/ 27 июня 2019

Вы также должны прекратить все, что звонит RabbitTemplate.

Какую версию вы используете?В современных версиях фабрика соединений запрещает создание соединения после того, как оно было destroy() ed - что происходит при закрытии контекста.

        if (this.stopped) {
            throw new AmqpApplicationContextClosedException(
                    "The ApplicationContext is closed and the ConnectionFactory can no longer create connections.");
        }

destroy() устанавливает stopped, если оно вызывается послеон получает ContextClosedEvent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...