Проблема при остановке сервера Tomcat, на котором запущено веб-приложение, с циклом while (true)

m разработка веб-приложения для развертывания на Tomcat. Когда Tomcat запускается, я использую сервлет (в web.xml) для вызова класса Java:


    Consumer
    
        start
        com.test.sample.Consumer
        1
    

Мой Consumer.java подписывается на очередь на сервере AMQP. Я достигаю этого с помощьюwhile (true) цикл, который отлично работает в автономной программе Java. Itt также работает в контексте веб-приложения, но я никогда не смогу остановить свой сервер Tomcat (в моей среде IDE NetBeans), и я считаю, что цикл while является виновником. Вот некоторый код:

public class Consumer {
    public Consumer()
        consume();
    }

    private void consume()

        ...

        while (true) {
            // Await incoming messages from queue
            // Process message
        }

    }

}

Есть ли лучший способ справиться с этим? Или сигнализировать об остановке, чтобы выйти из цикла?

Спасибо!

Обновлено для использования ServletContextListener:

public final class ApplicationListener implements ServletContextListener {

    private ScheduledExecutorService scheduler;

    public ApplicationListener() {
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        System.out.println("***** Stopping Consumer *****");
        scheduler.shutdownNow();
    }

    @Override
    public void contextInitialized(ServletContextEvent event) {

        System.out.println("***** Starting Consumer *****");

        scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(new ScheduledConsumer(), 0, 15000, TimeUnit.MILLISECONDS);

    }

    public class ScheduledConsumer implements Runnable {
        @Override
        public void run() {
            Consumer k = new Consumer();
            k.consumeOnce();
        }
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос