0

私は最初の本物の Camel ベースの Java アプリを開発していますが、メインの Camel スレッドが死んだ/終了した結果であると思われる奇妙で複雑な問題に直面しています。

基本的に、ルート自体はほんの数個のプロセッサーで構成されており、プロセッサーの 1 つは、完了するまでに 20 秒から 25 秒かかる重い計算を実行します。アプリは全体として、例外/エラー/ログ ステートメントをスローせずに終了しています。これは、何かがうまくいかなかったことを示すその他の兆候であり、これらの高価な計算を実行している間に死んでいます。

問題を診断する人を探しているわけではありません。Camel ルートを強制的に存続させる方法が必要なだけです。なぜなら、メインの Camel スレッドがルートの最後に到達し、それを停止していると私が信じているからです。アプリケーションをシャットダウンします。メインの Camel スレッドを、たとえば 60 秒間存続させて、少なくとも要因として除外できるかどうかを確認したいと思います。

Java DSL を使用している場合は、ルートの最後に次のコードを追加します。

.to(new Processor() {
    @Override
    public void process(Exchange exchange) {
        try {
            Thread.sleep(60000);
        } catch(Throwable t) {
            // ...
        }
    }
})
.to("direct:endOfRoute");

Spring DSL (XML) を使用しています - 何かアイデアはありますか? 前もって感謝します!

4

1 に答える 1

3

ルート フィニッシングは Camel アプリケーション/コンテキストを終了しません。コンテキストをインスタンス化するコンテナが実行され続けていることを確認する必要があるだけです...

http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.htmlを参照してください

つまり、特定の質問に対して、遅延 EIPを使用して、ルートに明示的な遅延を導入できます。

于 2013-03-03T05:48:44.520 に答える