我正在尝试实现更高级的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 :(得分:1)
在camel 2.11中还有一个新的控制总线组件可以做你想做的事情(source)
template.sendBody("controlbus:route?routeId=foo&action=stop", null);
答案 1 :(得分:0)
我不会尝试关闭CamelContext,只是关注相关路线......这样你应用程序的其余部分仍然可以正常运行,你可以获取路由统计信息并查看/移动消息到备用队列等等。
请参阅https://camel.apache.org/how-can-i-stop-a-route-from-a-route.html