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;
}

しかし、このコードは私には臭いがして好きではありません。また、このすべての再試行の原因となった例外を収集する方法もここにはありません。

4

2 に答える 2

1

camel 2.11 には、必要なことができる新しいコントロール バス コンポーネントもあります ( source )

template.sendBody("controlbus:route?routeId=foo&action=stop", null);
于 2012-12-09T17:56:27.107 に答える
0

問題のルートだけをシャットダウンしようとはしません...そうすれば、アプリの残りの部分は引き続き機能し、ルート統計を取得したり、メッセージを表示/代替キューに移動したりできます.

https://camel.apache.org/how-can-i-stop-a-route-from-a-route.htmlを参照してください

于 2012-12-07T17:21:18.613 に答える