2012-12-07 16 views
1

Я пытаюсь внедрить более совершенную обработку ошибок 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; 
} 

Но этот код запахи мне и мне это не нравится, и также я не вижу здесь никакого способа собрать исключения, вызвавшие все эти попытки.

ответ

0

Я бы не пытался отключить CamelContext, только этот маршрут ... таким образом, все остальное приложение может работать, вы можете получить статистику маршрута и просмотреть/переместить сообщения в альтернативные очереди и т. Д.

см https://camel.apache.org/how-can-i-stop-a-route-from-a-route.html

1

Существует также новый компонент шины управления в верблюд 2.11, который может делать то, что вы хотите (source)

template.sendBody("controlbus:route?routeId=foo&action=stop", null); 
Смежные вопросы