重试太多后停止Camel

时间:2012-12-07 16:28:15

标签: apache-camel

我正在尝试实现更高级的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;
}

但是这段代码闻到了我的味道并且我不喜欢它,而且我也没有看到任何方法来收集导致所有这些重试的异常。

2 个答案:

答案 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