209.3. Eclipse Kura コンポーネント


Camel 2.15 以降で利用可能

このドキュメントページでは、Camel と Eclipse Kura M2M ゲートウェイの統合オプションについて説明します。Camel ルートを Eclipse Kura にデプロイする一般的な理由は、エンタープライズ統合パターンと Camel コンポーネントをメッセージング M2M ゲートウェイに提供することです。たとえば、Kura を Raspberry PI にインストールし、Kura サービスを使用してその Raspberry PI に取り付けられたセンサーから温度を読み取り、最後に Camel EIP とコンポーネントを使用して現在の温度値をデータセンターサービスに転送することができます。

209.3.1. KuraRouter アクティベーター

Eclipse Kura にデプロイされたバンドルは、通常、バンドルアクティベーターとして開発されます。したがって、Apache Camel ルートを Kura にデプロイする最も簡単な方法は、org.apache.camel.kura.KuraRouter クラスを拡張するクラスを含む OSGi バンドルを作成することです。

public class MyKuraRouter extends KuraRouter {

  @Override
  public void configure() throws Exception {
    from("timer:trigger").
      to("netty-http:http://app.mydatacenter.com/api");
  }

}

KuraRouterorg.osgi.framework.BundleActivator インターフェイスを実装しているため、Kura バンドルコンポーネントクラスを作成する 際に、start および stop ライフサイクルメソッドを登録する必要があることに注意してください。

Kura ルーターは、独自の OSGi 対応の CamelContext を開始します。これは、KuraRouter を拡張するすべてのクラスに対して、専用の CamelContext インスタンスが存在することを意味します。理想的には、OSGi バンドルごとに 1 つの KuraRouter をデプロイすることをお勧めします。

209.3.2. KuraRouter のデプロイ

Kura ルータークラスを含むバンドルは、OSGi マニフェストに次のパッケージをインポートする必要があります。

Import-Package: org.osgi.framework;version="1.3.0",
  org.slf4j;version="1.6.4",
  org.apache.camel,org.apache.camel.impl,org.apache.camel.core.osgi,org.apache.camel.builder,org.apache.camel.model,
  org.apache.camel.component.kura

Camel コンポーネントはランタイムレベルでサービスとして解決されるため、ルートで使用する予定のすべての Camel コンポーネントバンドルをインポートする必要はないことに注意してください。

ルーターバンドルをデプロイメントする前に、次の Camel コアバンドルをデプロイメント (および開始) していることを確認してください (Kura GoGo シェルを使用)…

install file:///home/user/.m2/repository/org/apache/camel/camel-core/2.15.0/camel-core-2.15.0.jar
start <camel-core-bundle-id>
install file:///home/user/.m2/repository/org/apache/camel/camel-core-osgi/2.15.0/camel-core-osgi-2.15.0.jar
start <camel-core-osgi-bundle-id>
install file:///home/user/.m2/repository/org/apache/camel/camel-kura/2.15.0/camel-kura-2.15.0.jar
start <camel-kura-bundle-id>

…そして、ルートで使用する予定のすべてのコンポーネント:

install file:///home/user/.m2/repository/org/apache/camel/camel-stream/2.15.0/camel-stream-2.15.0.jar
start <camel-stream-bundle-id>

最後に、ルーターバンドルをデプロイします。

install file:///home/user/.m2/repository/com/example/myrouter/1.0/myrouter-1.0.jar
start <your-bundle-id>

209.3.3. KuraRouter ユーティリティー 

 Kura ルーターの基本クラスは、多くの便利なユーティリティーを提供します。このセクションでは、それぞれについて説明します。

209.3.3.1. SLF4J ロガー

Kura は、ロギング目的で SLF4J ファサードを使用します。保護されたメンバー log は、指定された Kura ルーターに関連付けられた SLF4J ロガーインスタンスを返します。

public class MyKuraRouter extends KuraRouter {

    @Override
    public void configure() throws Exception {
        log.info("Configuring Camel routes!");
        ...
    }

}

209.3.3.2. BundleContext

保護されたメンバー bundleContext は、指定された Kura ルーターに関連付けられたバンドルコンテキストを返します。

public class MyKuraRouter extends KuraRouter {

    @Override
    public void configure() throws Exception {
        ServiceReference<MyService> serviceRef = bundleContext.getServiceReference(LogService.class.getName());
        MyService myService = bundleContext.getService(serviceRef);
        ...
    }

}

209.3.3.3. CamelContext

保護されたメンバー camelContext は、指定された Kura ルーターに関連付けられた CamelContext です。

public class MyKuraRouter extends KuraRouter {

    @Override
    public void configure() throws Exception {
        camelContext.getStatus();
        ...
    }

}

209.3.3.4. ProducerTemplate

保護されたメンバーの producerTemplate は、指定された Camel コンテキストに関連付けられた ProducerTemplate インスタンスです。

public class MyKuraRouter extends KuraRouter {

    @Override
    public void configure() throws Exception {
        producerTemplate.sendBody("jms:temperature", 22.0);
        ...
    }

}

209.3.3.5. ConsumerTemplate

保護されたメンバーの consumerTemplate は、指定された Camel コンテキストに関連付けられた ConsumerTemplate インスタンスです。

public class MyKuraRouter extends KuraRouter {

    @Override
    public void configure() throws Exception {
        double currentTemperature = producerTemplate.receiveBody("jms:temperature", Double.class);
        ...
    }

}

209.3.3.6. OSGi サービスリゾルバー

OSGi サービスリゾルバー (service(Class<T> serviceType)) を使用すると、OSGi バンドルコンテキストからタイプ別にサービスを簡単に取得できます。

public class MyKuraRouter extends KuraRouter {

    @Override
    public void configure() throws Exception {
        MyService myService = service(MyService.class);
        ...
    }

}

サービスが見つからない場合は、null 値が返されます。サービスが利用できない場合にアプリケーションを失敗させたい場合は、代わりに requiredService(Class) メソッドを使用してください。サービスが見つからない場合、requiredService IllegalStateException を出力します。

public class MyKuraRouter extends KuraRouter {

    @Override
    public void configure() throws Exception {
        MyService myService = requiredService(MyService.class);
        ...
    }

}

209.3.4. KuraRouter アクティベーターのコールバック

Kura ルーターには、Camel ルーターの動作方法をカスタマイズするために使用できるライフサイクルコールバックが付属しています。たとえば、ルーターが開始される直前にルーターに関連付けられた CamelContext インスタンスを設定するには、KuraRouter クラスの beforeStart メソッドをオーバーライドします。

public class MyKuraRouter extends KuraRouter {
 
  ...

  protected void beforeStart(CamelContext camelContext) {
    OsgiDefaultCamelContext osgiContext = (OsgiCamelContext) camelContext;
    osgiContext.setName("NameOfTheRouter");
  }

}

209.3.5. ConfigurationAdmin からの XML ルートのロード

サーバー設定からルートの XML 定義を読み取ることが必要な場合があります。これは、OTA 再デプロイのコストが大きくなる可能性がある IoT ゲートウェイの一般的なシナリオです。この要件に対処するために、各 KuraRouter は、OSGi ConfigurationAdmin を使用して kura.camel PID から kura.camel.BUNDLE-SYMBOLIC-NAME.route プロパティーを探します。このアプローチにより、デプロイされた KuraRouter ごとに Camel XML ルートファイルを定義できます。ルートを更新するには、適切な設定プロパティーを編集し、それに関連付けられたバンドルを再起動するだけです。kura.camel.BUNDLE-SYMBOLIC-NAME.route プロパティーのコンテンツは、次のような Camel XML ルートファイルである必要があります。

<routes xmlns="http://camel.apache.org/schema/spring">
    <route id="loaded">
        <from uri="direct:bar"/>
        <to uri="mock:bar"/>
    </route>
</routes>

 

209.3.6. Kura ルーターを宣言型 OSGi サービスとしてデプロイする

Kura ルーターを宣言型 OSGi サービスとしてデプロイしたい場合は、KuraRouter が提供する activate メソッドと activate メソッドを使用できます。

<scr:component name="org.eclipse.kura.example.camel.MyKuraRouter" activate="activate" deactivate="deactivate" enabled="true" immediate="true">
  <implementation class="org.eclipse.kura.example.camel.MyKuraRouter"/>
</scr:component>

209.3.7. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.