Tomcat долго отключается, если создан SubscriptionClient - PullRequest
0 голосов
/ 20 марта 2019

У нас есть сервер Tomcat, использующий Azure ServiceBus для получения сообщений от другой службы. Мы обнаруживаем, что простое создание SubscriptionClient приводит к тому, что отключение tomcat занимает более минуты - т.е. нам не нужно ничего делать с SubscriptionClient, нам просто нужно создать его, чтобы вызвать проблема случиться Ничего необычного в журналах не видно.

SubscriptionClient создается следующим образом:

    @Component
    @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
    public class UserSyncListener implements InitializingBean, DisposableBean, ApplicationContextAware
    {
        private ApplicationContext applicationContext;
        private SubscriptionClient client;

        @Override
        public void afterPropertiesSet() throws ServiceBusException, InterruptedException
        {
            /* ... obtain connectionString and entityPath ... */
            client = new SubscriptionClient(
                new ConnectionStringBuilder(connectionString, 
                                            entityPath, 
                                            ReceiveMode.PEEKLOCK);
        }

        @Override
        public void destroy() throws Exception
        {
            if (client != null) {
                client.close();
            }
        }

        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
        {
            this.applicationContext = applicationContext;
            if (applicationContext instanceof AbstractApplicationContext) {
                ((AbstractApplicationContext)applicationContext).registerShutdownHook();
            }
        }

Мы можем успешно получать сообщения с этим, поэтому connectionString и entityPath верны. Но, как я уже говорил, нам даже не нужно отправлять или потреблять какие-либо сообщения - этого кода достаточно, чтобы tomcat очень медленно закрывался.

[отредактировано] Я думаю, проблема в том, что мой хук отключения никогда не регистрируется. Если я добавлю запись в журнал или точку останова в метод destroy (), он никогда не будет достигнут.

В нашей среде есть сценарии, которые иногда требуют перезапуска tomcat, поэтому tomcat, требующий более 60 секунд для отключения, вызовет у нас настоящие проблемы.

Любая помощь приветствуется!

...