Я пытаюсь внедрить более совершенную обработку ошибок Apache Camel: в случае, если слишком много ожидающих повторений, то прекратите обработку вообще и запишите все собранные исключения где-нибудь.Остановить верблюд после слишком большого количества попыток
Первая часть (остановка слишком много попыток) уже реализован следующий вспомогательный метод, который получает размер очереди повторных попыток, и я просто остановить контекст, если очередь превышает некоторый предел:
static Long getToRetryTaskCount(CamelContext context) {
Long retryTaskCount = null;
ScheduledExecutorService errorHandlerExecutor = context.getErrorHandlerExecutorService();
if (errorHandlerExecutor instanceof SizedScheduledExecutorService)
{
SizedScheduledExecutorService svc = (SizedScheduledExecutorService) errorHandlerExecutor;
ScheduledThreadPoolExecutor executor = svc.getScheduledThreadPoolExecutor();
BlockingQueue<Runnable> queue = executor.getQueue();
retryTaskCount = (long) queue.size();
}
return retryTaskCount;
}
Но этот код запахи мне и мне это не нравится, и также я не вижу здесь никакого способа собрать исключения, вызвавшие все эти попытки.