Я пытаюсь избежать ситуации, когда поток, читающий сообщения из очереди, не работает, но приложение запущено и работает, поэтому трудно обнаружить проблему.
Позволяет иметь код:
@RabbitListener(queues = "${enc-correlation.correlation-request-queue}")
public void takeIndexTask(@Payload ConversationList list) throws InterruptedException {
//just simulation of failure
throw new OutOfMemoryError();
}
Это приведет к запуску приложения, но не к обработке новых сообщений.
Я попытался параметр jvm:
-XX:OnOutOfMemoryError="kill -9 %p"
, который не остановил приложение.Это потому, что он внутри потока?
Так что единственное решение, которое уродливо и работает:
Thread.setDefaultUncaughtExceptionHandler((thread, t) -> {
if (t instanceof OutOfMemoryError) {
System.exit(1);
}
});
Есть ли способ, как spring amqp будет отслеживать потоки слушателей ив случае «исчезновения» он запустит новый?
Или, по крайней мере, есть возможность остановить целое приложение в случае какого-то исключения?