より高度な 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;
}
しかし、このコードは私には臭いがして好きではありません。また、このすべての再試行の原因となった例外を収集する方法もここにはありません。