1

以前のプロジェクトでは、キャメルと組み合わせて Guice をよく使用していました。私のアプローチは、Camel の Main クラスを拡張し、そこに構成済みのコンテキストを注入することでした。コンテキストの開始を制御する必要がありました。コンテキストを開始する前に、いくつかの準備を行いました (たとえば、hawtio やその他のセットアップを開始します)。

同じことをRouteBuilderで行いました。中央の RouteBuilder の 1 つが onException などを設定し、RoutePolicies を追加し、他のルートで autostart を構成し、もちろん他のすべてのルートを追加しました。

その間、私は CDI を愛することを学び、camel の 2.17 (および fuse 6.3) での CDI サポートは完了したようです。

  • では、camel-cdi を使用して camel コンテキストの開始を制御するための適切なアプローチは何でしょうか (fuse で osgi バンドルとしてデプロイされます)。

  • RouteBuilder (およびまたはその他のもの) の自動検出を無効または制御する方法は?

4

1 に答える 1

2

では、camel-cdi を使用してキャメル コンテキストの開始を制御するための適切なアプローチは何でしょうか (fuse で osgi バンドルとしてデプロイされます)。

Camel CDI は常に、自動構成された Camel コンテキストを開始します。そうは言っても、PostConstructたとえば次のようにライフサイクル イベントを宣言することで、ルートが開始されないようにこれらをカスタマイズすることができます。

@ApplicationScoped
class CustomCamelContext extends DefaultCamelContext {

    @PostConstruct
    void customize() {
        setAutoStartup(false);
    }
}

その例では、その Camel コンテキストに追加されたルートは、コンテキストとともに開始されません。

これは、その段階で行われたすべての検証でコンテキストを開始するというキャメルの原則を尊重します。まだルーティングを開始しない機能を備えています。

RouteBuilder (およびまたはその他のもの) の自動検出を無効または制御する方法は?

RoutesBuilderで修飾されたBean は、Camel CDI によって@ContextName対応する Bean に自動的に追加されます。CamelContextそのようなCamelContextBean が存在しない場合は、自動的に作成されます。一方、RoutesBuilderユーザー定義の修飾子で修飾された Bean は、Bean の自動作成をトリガーしませんCamelContext。これは、後でアプリケーションの実行中に追加する必要がある Camel ルートに使用できます。たとえば、次のようにします。

@DoNotDiscover
class MyRouteBuilder extends RouteBuilder {
    // ...
}

修飾された Camel コンテキスト Bean@DoNotDiscoverが明示的に宣言されていない場合、MyRouteBuilderBean は自動検出されません。それでも、後でアプリケーションの実行中に使用できます。たとえば、次のようになります。

@Inject
@DoNotDiscover
Instance<RouteBuilder> routes;

@Inject
CamelContext context;

for (RouteBuilder route : routes)
    route.addRoutes(route);
于 2016-10-12T09:24:10.000 に答える