3

以下のような FTP サイトからファイルをダウンロードするコードを書きました。

CamelContext context = new DefaultCamelContext();
    context.addRoutes(new RouteBuilder() {
          public void configure() {
              from( uri ).to( localBox );
          }
      });
    context.start();
    // a tedious sleepy thread !?
    // TODO: work around for a better solution
    Thread.sleep(20000);
    context.stop();

Thread.sleep メソッドの代わりに、より良い解決策を探しています。また、転送完了までの残り時間を取得することはできますか?

ありがとう

4

2 に答える 2

1

主な回答

以下の構文は、Thread.sleepを使用せずに必要なものを取得します。

context.getShutdownStrategy().setTimeout(20000);

その他の提案

このページには、camel をシャットダウンする方法の他の例がいくつかあります。ただし、これらのアプローチを使用している場合は、キャメルを意図したとおりに使用していない可能性があります。@Petter が言ったように、Camel は通常、継続的に実行されるサーバーで使用されます。

ここで、"1 回限りの" 方法でルートを実行したい場合、通常はProducerを次のように使用します。

@Required
protected ProducerTemplate producer;

public Object getObjectFromRoute(String routeId, Object payloadBody) {
    return producer.requestBody(routeId, payloadBody);
}

同様の手法を使用して、DSL を使用して物事をシャットダウンする責任があるルートにメッセージを送信しshutdownRouteたり、アプリを正常に終了しshutdownRunningTaskたりすることができます。processor

そのようなルートを用意したら、このルートを呼び出して正常に終了する適切なメッセージをアプリケーションに送信できます (または、Camel のMainクラスのインスタンスを使用してハングアップ サポートCtrlを有効にすると、+ に+Cを送信するときにこれが処理されます)。実行中のアプリケーション)。

于 2012-12-14T21:47:38.230 に答える