0

カスタムキャメルコンポーネントを開発しています。コンシューマー サポートのみを備えているため、エンドポイントからのみ呼び出すことができます。カスタム コンポーネントが「mycomp」スキームに登録されているとします。

要件 1:以下のルートをサポートする必要があるユースケースがあります。

from("mycomp:Something").to("file:data/outbox");

エンドポイントに createConsumer() の実装を提供したため、上記のルートは機能しています

Req 2:ここで、特定の時間にルートの上を開始するという別の要件があります。(毎日 08:00 AM と仮定)

Req2 では、camel-quartz コンポーネントを使用することにしました。私たちが知っているように、Quartzはエンドポイントからのみサポートし、私のreq2のエンドポイントからは..

from("quartz://myTimer?cron=0+0+8+*+*+*")

さて、問題:

カスタム コンポーネントには from() エンドポイントが必要で、特定の時間にトリガーする必要もあります。ただし、クォーツは from() エンドポイントのみでも機能します。Camel では、.. from("xxx").from("yyy") .. のような 2 つの from を持つルートを持つことはできません。

回避策の 1 つ:

「mycomp」に定義された開始ルートと最終ルートが次のようなプロセッサを開発できます..

from("quartz://myTimer?cron=0+0+8+*+*+*").process(ProcessorWhich_StartsMyRoute ) ;

from("mycomp:何か")。noAutoStartup ()。routeId (" MyRoute ").to("file:data/outbox");

しかし、再び、クォーツスケジューリングを使用して特定の時間にMyRouteを停止するプロセッサを考え出す必要があります..それは次のようなものになります..

from("quartz://myTimerStop?cron=0+30+8+*+*+*").process(ProcessorWhich_ StopsMyRoute );

上記では、午前 8 時 30 分に停止しています。しかし、これはこのソリューションの制限であり、実際にはいつ MyRoute を安全に停止できるかわかりません。

Req1 と Req2 の両方を達成する方法について、アイデアや情報を共有してください。私のユースケースについてさらに詳細が必要な場合はお尋ねください。

4

2 に答える 2

0

2 番目の回避策/解決策:

一方、これを達成する別の方法を見つけました。

最初に suspendRoute() を呼び出し、すぐに「mycomp」スキームを使用してルートの resumeRoute() メソッドを呼び出すプロセッサを開発しました..以下のようなもの..

ルート:

from("quartz://myTimer?cron=0+0+8+*+*+*").process(ProcessorWhich_SuspendResumeMyRoute ) ;

from("mycomp:Something").noAutoStartup().routeId("MyRoute").to("file:data/outbox");

プロセッサ

    public void process(Exchange exchange) throws Exception {
        CamelContext ctx = exchange.getContext();
        ctx.suspendRoute(routeName);
        ctx.resumeRoute(routeName);
    }

さて、上記の2つのうち; 2 つ目は、理想的なソリューションにより近いように見えます。上記の suspend() および resume() ルートに必要なもの (パフォーマンスとデザインに関して) を共有できますか。2 番目のソリューションでは、MyRoute は午前 8:00 に開始され、2 日目は再び午前 8:00 に開始されます。最初は一時停止されてから再開され、3 日目は午前 8:00 に再び一時停止され、その後再開されます。

于 2013-04-18T02:50:12.170 に答える