Red Hat build of Apache Camel のツールガイド


Red Hat build of Apache Camel 4.8

Red Hat が提供するツールガイド

概要

ツールガイドでは、Red Hat build for Apache Camel に使用されるツール拡張機能を説明します。

はじめに

Red Hat build of Apache Camel ドキュメントに関するフィードバック

エラーを報告したり、ドキュメントの改善を提案したりするには、Red Hat Jira アカウントにログインし、課題を送信してください。Red Hat Jira アカウントをお持ちでない場合は、アカウントを作成するように求められます。

手順

  1. 次のリンクをクリックして チケットを作成 します。
  2. Summary に課題の簡単な説明を入力します。
  3. Description に課題や機能拡張の詳細な説明を入力します。問題があるドキュメントのセクションへの URL も記載してください。
  4. Submit をクリックすると、課題が作成され、適切なドキュメントチームに転送されます。

第1章 ツールガイド

1.1. ツールガイドについて

このガイドでは、Red Hat build of Apache Camel 用の VS Code エクステンションと、Camel CLI のインストールおよび使用方法を紹介します。

重要

Apache Camel の VS Code エクステンションは開発サポートとしてリストされています。開発サポートの対象範囲の詳細は、Red Hat Build of Apache Camel の開発サポート対象範囲 を参照してください。

第2章 ツールガイド拡張パック

重要

Apache Camel の VS Code エクステンションは開発サポートとしてリストされています。開発サポートの対象範囲の詳細は、Red Hat Build of Apache Camel の開発サポート対象範囲 を参照してください。

2.1. Red Hat による Apache Camel のエクステンションパックのインストール

このセクションでは、Red Hat による Apache Camel のエクステンションパックをインストールする方法を説明します。

手順

  1. VS Code エディターを開きます。
  2. VS Code エディターで、View > Extensions を選択します。
  3. 検索バーに Camel を入力します。検索結果から Extension Pack for Apache Camel by Red Hat オプションを選択し、Install をクリックします。

これにより、VS Code エディターに Apache Camel のエクステンションを含むエクステンションパックがインストールされます。

第3章 Camel の言語サポート

重要

Apache Camel の VS Code エクステンションは開発サポートとしてリストされています。開発サポートの対象範囲の詳細は、Red Hat Build of Apache Camel の開発サポート対象範囲 を参照してください。

3.1. Apache Camel エクステンションの言語サポートについて

Visual Studio Code 言語サポートエクステンションにより、XML DSL および Java DSL コード用の Apache Camel の言語サポートが追加されます。

このエクステンションは、Apache Camel URI 要素の補完、検証、ドキュメント化の機能を Visual Studio Code エディターで直接提供します。これは、Microsoft 言語サーバープロトコルを使用してクライアントとして機能し、Camel 言語サーバーと通信してすべての機能を提供します。

3.1.1. Apache Camel エクステンションの言語サポートの機能

言語サポートエクステンションの重要な機能を以下に示します。

  • Apache Camel URI の言語サービスのサポート
  • クイックリファレンスドキュメント (Camel コンポーネントにカーソルを置くと表示される)
  • Camel URI の診断
  • Java および XML 言語のナビゲーション
  • Camel CLI を使用して、Yaml DSL で指定された Camel Route の作成
  • Camel Quarkus プロジェクトの作成
  • SpringBoot プロジェクトでの Camel の作成
  • 特定の Camel カタログのバージョン
  • Camel カタログの特定のランタイムプロバイダー

3.1.2. 要件

Apache Camel Language Server を使用する場合は、次の点を考慮する必要があります。

  • 現在、Apache Camel Language Server を起動するには Java 17 が必要です。java.home VS Code オプションは、マシンにインストールされているデフォルトの JDK とは異なるバージョンの JDK を使用するために使用されます。
  • 一部の機能は、JBang がシステムコマンドラインで利用可能である必要があります。
  • XML DSL ファイルの場合:

  • Java DSL ファイルの場合:

    • .java ファイル拡張子を使用します。
    • Camel パッケージ (通常はインポートされたパッケージから) を指定します (例: import org.apache.camel.builder.RouteBuilder)。
    • Camel コンポーネントを参照するには、from または to とスペースを含まない文字列を使用します。文字列に、変数を指定できません。たとえば、from("timer:timerName") は機能しますが、from("timer:timerName")from(aVariable) は機能しません。

3.1.3. Apache Camel エクステンションの言語サポートのインストール

VS Code Extension Marketplace および Open VSX Registry から、Apache Camel エクステンションの Language サポートをダウンロードできます。Language Support for Apache Camel エクステンションを Microsoft VS Code に直接インストールすることもできます。

手順

  1. VS Code エディターを開きます。
  2. VS Code エディターで、View > Extensions を選択します。
  3. 検索バーに Camel を入力します。検索結果から Apache Camel の言語サポート オプションを選択し、インストールをクリックします。

これにより、エディターに言語サポート拡張機能がインストールされます。

3.1.4. 特定の Camel カタログバージョンの使用

特定の Camel カタログバージョンを使用できます。File > Preferences > Settings > Apache Camel Tooling > Camel catalog version をクリックします。バージョン識別子に redhat が含まれる Red Hat 製品化バージョンの場合、Maven Red Hat リポジトリーが自動的に追加されます。

注記

バージョンを初めて使用する場合、バックグラウンドで依存関係をダウンロードする時間に応じて、そのバージョンが使用可能になるまでに数秒または数分かかります。

3.1.5. 制限

  • 使用する Kamelet カタログは、コミュニティーでサポートされているバージョンのみです。サポートされている Kamelet のリストは、サポートされている Kamelet を参照してください。
  • モードライン設定はコミュニティーのみに基づいています。すべての特性とモードラインパラメーターがサポートされているわけではありません。

第4章 Camel のデバッグサポート

重要

Apache Camel の VS Code エクステンションは開発サポートとしてリストされています。開発サポートの対象範囲の詳細は、Red Hat Build of Apache Camel の開発サポート対象範囲 を参照してください。

4.1. Apache Camel ルートのデバッグアダプターについて

VS Code デバッグアダプターは、Java、Yaml、または XML DSL で記述された実行中の Camel ルートをデバッグするために使用できる Visual Studio Code 拡張機能です。

4.1.1. デバッグアダプターの特徴

Apache Camel エクステンション用 VS Code デバッグアダプターは、次の機能をサポートしています。

  • XML のみの Camel Main モード。
  • JMX URL を使用して Java、Yaml、または XML で記述された実行中の Camel ルートに Camel デバッガーを接続することによる Camel デバッガーの使用。
  • PID を使用して、Java、Yaml、または XML で記述された実行中の Camel ルートに Camel デバッガーを接続することによる、Camel デバッガーのローカル使用。
  • 単一の Camel コンテキストに使用可能。
  • ブレークポイントの追加または削除。
  • シンプルな言語による条件付きブレークポイント。
  • 一時停止されたブレークポイント変数値の検査。
  • 単一のルートインスタンスの再開および、すべてのルートインスタンスの再開。
  • ルート定義が同じファイル内にある場合のステップ実行。
  • Debugger スコープ、メッセージ本文、String 型のメッセージヘッダー、および String 型の Exchange プロパティー内の変数を更新可能に。
  • Run Camel Application with JBang and Debug コマンドのサポート。

    • このコマンドを使用すると、簡単な場合にワンクリックで起動して Camel デバッグを行うことができます。このコマンドは次の方法で利用できます。

      • コマンドパレット。現在のエディターで有効な Camel ファイルを開く必要があります。
      • ファイルエクスプローラーのコンテキストメニュー。これは、すべての *.xml*.java*.yaml、および *.yml に表示されます。
      • Camel ファイルの先頭にある Codelens (codelens のヒューリスティックは、javaxml、および yaml ファイルに from と to またはログがあることを確認することです)。
  • Run Camel application with JBang コマンドのサポート。

    • エディターで開かれた Yaml DSL (.yaml|.yml) で定義された有効な Camel ファイルが必要です。
  • Camel デバッガー起動設定の設定スニペット。
  • JBang を使用した Camel デバッガー接続、または Camel Maven プラグインを使用した Maven を受け入れる準備ができた Camel アプリケーションを起動するための設定スニペット。

4.1.2. 要件

Apache Camel 拡張機能用の VS Code デバッグアダプターを使用する場合は、次の点を考慮する必要があります。

前提条件

  • Java ランタイム環境:

    • 17 以降
    • com.sun.tools.attach.VirtualMachine がインストールされました。
  • Camel インスタンス:

    • Camel バージョン 3.16 以降
    • クラスパスに camel-debug
    • JMX が有効です。
注記

一部の機能では、JBang をシステムコマンドラインで使用できる必要があります。

4.1.3. Apache Camel 用の VS Code デバッグアダプターのインストール

Apache Camel エクステンションの VS Code Debug Adapter は、VS Code Extension Marketplace および Open VSX Registry からダウンロードできます。Debug Adapter for Apache Camel 拡張機能を Microsoft VS Code に直接インストールすることもできます。

手順

  1. VS Code エディターを開きます。
  2. VS Code エディターで、View > Extensions を選択します。
  3. 検索バーに Camel Debug と入力します。検索結果から Debug Adapter for Apache Camel オプションを選択し、インストールをクリックします。

これにより、VS Code エディターに Apache Camel のデバッグアダプターがインストールされます。

4.1.4. デバッグアダプターの使用

デバッグアダプターを使用して Camel アプリケーションをデバッグできます。

手順

  1. jbang バイナリーがシステムコマンドラインで利用できることを確認してください。
  2. Camel CLI で開始できる Camel ルートを開きます。
  3. Ctrl + Shift + P キーを使用して コマンドパレット を呼び出して、Run Camel Application with JBang and Debug コマンドを選択するか、ファイル上部に表示される Camel Debug with JBang をクリックします。
  4. ルートが開始され、デバッガーが接続されるまで待ちます。
  5. Camel ルートにブレークポイントを置きます。
  6. デバッグします。

第5章 Red Hat build of Apache Camel for Quarkus で Camel CLI の使用

5.1. Camel CLI のインストール

前提条件

  1. JBang がマシンにインストールされている必要があります。JBang をダウンロードしてインストールする方法は、手順 を参照してください。

JBang をインストールした後、コマンドシェルから次のコマンドを実行して、JBang が動作していることを確認できます。

jbang version

これにより、インストールされている JBang のバージョンが出力されます。

手順

  1. オプション: Camel CLI の以前のバージョンをアンインストールします。

    jbang app uninstall camel
  2. 次のコマンドを実行して、Camel CLI アプリケーションをインストールします。

    jbang app install -Dcamel.jbang.version=4.8.2 camel@apache/camel

製品の camel バージョンと一致する camel.jbang.version を使用する

これにより、Apache Camel が JBang 内に camel コマンドとしてインストールされます。これは、camel コマンドを実行するだけでコマンドラインから Camel を実行できることを意味します。

5.2. Camel CLI の使用

Camel CLI は複数のコマンドをサポートしています。camel help コマンドを使用すると、使用可能なすべてのコマンドを表示できます。

camel --help
注記

このコマンドを初めて実行するときは、依存関係がキャッシュされるため、実行に数秒余分に時間がかかる場合があります。すでに JBang を使用していて、Exception in thread "main" java.lang.NoClassDefFoundError: "org/apache/camel/dsl/jbang/core/commands/CamelJBangMain" での例外などのエラーが発生した場合は、JBang キャッシュをクリアして再試行し、インストールし直してください。

すべてのコマンドは --help をサポートし、フラグが指定されている場合に適切なヘルプを表示します。

5.2.1. Camel CLI のユーザー設定

Camel CLI の config コマンドは、ユーザー設定を保存および使用するために使用します。これにより、毎回 CLI オプションを指定する必要がなくなります。たとえば、別の Camel バージョンを実行するには、次を使用します。

camel run * --camel-version=4.8.3.redhat-00004

camel-version は次のようなユーザー設定に追加できます。

camel config set camel-version=4.8.3.redhat-00004

これは、camel run コマンドの使用時に使用される Camel バージョンを設定します。以下の run コマンドはユーザー設定を使用します。

camel run *

ユーザー設定ファイルは ~/.camel-jbang-user.properties に保存されます。

5.2.2. シェル補完の有効化

Camel CLI は、すぐに bash および zsh のシェル補完を提供します。Camel CLI のシェル補完を有効にするには、次を実行します。

source <(camel completion)

これを永続的にするには、次を実行します。

echo 'source <(camel completion)' >> ~/.bashrc

5.3. Camel ルートの作成と実行

init コマンドを使用して、新しい基本ルートを作成できます。たとえば、XML ルートを作成するには、次のコマンドを実行します。

camel init cheese.xml

これにより、サンプルルートを含むファイル cheese.xml (現在のディレクトリー内) が作成されます。

ファイルを実行するには、次のコマンドを実行します。

camel run cheese.xml
注記

Camel では、YAML、XML、Java、Groovy など、サポートされている DSL を作成して実行できます。

新しい .java ルートを作成するには、次を実行します。

camel init foo.java

init コマンドを使用すると、Camel はデフォルトで現在のディレクトリーにファイルを作成します。ただし、--directory オプションを使用すると、指定したディレクトリーにファイルを作成できます。たとえば、foobar という名前のフォルダーに作成するには、次を実行します。

camel init foo.java --directory=foobar
注記

--directory オプションを使用すると、このディレクトリーがすでに存在する場合、Camel は自動的に削除します。

5.3.1. 複数のファイルからのルート実行

たとえば、2 つの YAML ファイルを実行するなど、複数のファイルからルートを実行できます。

camel run one.yaml two.yaml

yaml と Java などの 2 つの異なるファイルからルートを実行できます。

camel run one.yaml hello.java

ワイルドカード (つまり *) を使用して、すべての yaml ファイルを実行するなど、複数のファイルに一致させることができます。

camel run *.yaml

foo* で始まるすべてのファイルを実行できます。

camel run foo*

ディレクトリー内のすべてのファイルを実行するには、次を使用します。

camel run *
注記

run ゴールは、application.properties などの properties のあるファイルも検出できます。

5.3.2. 入力パラメーターからのルート実行

非常に小さな Java ルートの場合、以下に示すように、ルートを CLI 引数として指定できます。

camel run --code='from("kamelet:beer-source").to("log:beer")'

CLI 引数はファイルよりも使用が少し面倒であるため、これは非常に制限されています。入力パラメーターからルートを実行する場合は、以下の点に留意してください。

  • Java DSL コードのみがサポートされています。
  • コードは一重引用符で囲まれているため、Java DSL では二重引用符を使用できます。
  • コードは、端末および JBang から提供できるリテラル値に制限されます。
  • すべてのルートは単一の --code パラメーターで定義する必要があります。
注記

--code の使用は、非常に迅速で小規模なプロトタイプにのみ使用できます。

5.3.3. ライブリロードを備えた開発モード

次に示すように --dev オプションを使用して、ソースファイルの更新 (保存) 時にルートのライブリロードに伴う開発モードを有効にできます。

camel run foo.yaml --dev

Camel インテグレーションの実行中に、YAML ルートを更新し、保存時に更新できます。このオプションは、java を含むすべての DLS で機能します。次に例を示します。

camel run hello.java --dev
注記

ライブリロードオプションは開発目的のみを目的としており、JVM クラスのロードの問題など、リロードに関する問題が発生した場合は、インテグレーションを再起動する必要がある場合があります。

5.3.4. 開発者コンソール

開発者にさまざまな情報を表示する開発者コンソールを有効にすることができます。開発者コンソールを有効にするには、次を実行します。

camel run hello.java --console

これにより、Web ブラウザーから http://localhost:8080/q/dev (デフォルト) にあるコンソールにアクセスできるようになります。このリンクは、Camel の起動時にログにも表示されます。

コンソールでは、メッセージの処理に最も時間がかかる上位ルートのレポートなど、実行中の Camel インテグレーションに関する洞察を得ることができます。その後、これらのルート内で最も時間がかかっている EIP を個別に特定できます。

開発者コンソールはデータを JSON 形式で出力することもでき、サードパーティーのツールで情報を取得するために使用できます。たとえば、curl 経由で上位のルートを出力するには、次を実行します。

curl -s -H "Accept: application/json"  http://0.0.0.0:8080/q/dev/top/

JSON データをカラーでフォーマットして出力できる jq がインストールされている場合は、次を実行します。

curl -s -H "Accept: application/json"  http://0.0.0.0:8080/q/dev/top/ | jq

5.3.5. プロファイルの使用

Camel CLI の profile は Camel CLI で自動的にロードされる設定を参照する名前 (ID) です。デフォルトのプロファイルは、application という名前が付けられ、これは (スマートデフォルト) で Camel CLI が application.properties (存在する場合) を自動的にロードできるようにします。これは、同じ名前の特定のプロパティーファイルに一致するプロファイルを作成できることを意味します。

たとえば、local という名前のプロファイルを使用して実行すると、Camel CLI は application.properties の代わりに local.properties をロードします。プロファイルを使用するには、次のようにコマンドラインオプション --profile を指定します。

camel run hello.java --profile=local

一度に指定できるプロファイル名は 1 つだけです。たとえば、--profile=local,two は無効です。

properties ファイルでは、Camel Main のすべての設定を行えます。ログマスキングをオフにして有効にするには、次のコマンドを実行します。

camel.main.streamCaching=false
camel.main.logMask=true

また、camel-kafka などの Camel コンポーネントを設定して、URL をブローカーに宣言することもできます。

camel.component.kafka.brokers=broker1:9092,broker2:9092,broker3:9092
注記

camel.jbang で始まるキーは、Camel CLI によって内部的に使用される予約キーであり、Camel CLI コマンドの引数を事前に設定できます。

5.3.6. インターネット経由での JAR のダウンロード

デフォルトでは、Camel CLI は Camel の実行に必要な依存関係を自動的に解決します。これは、JBang と Camel によってそれぞれ実行されます。Camel 自体は、クラスパス上で現在利用できない JAR がコンポーネントに必要かどうかを実行時に検出し、JAR を自動的にダウンロードできます。

Camel はこれらの JAR を次の順序でダウンロードします。

  1. ~/.m2/repository のローカルディスク
  2. インターネット上の Maven Central
  3. インターネット上のカスタムサードパーティー Maven リポジトリー
  4. ~/.m2/settings.xml のアクティブなプロファイル、または --maven-settings オプションを使用して指定された設定ファイルにあるすべてのリポジトリー

Camel CLI をインターネット経由でダウンロードしない場合は、次のように --download オプションを使用してこれをオフにできます。

camel run foo.java --download=false

5.3.7. カスタム JAR の追加

Camel CLI は、独自のリリースからの Camel コンポーネント、言語、データ形式の依存関係を自動的に検出します。これは、使用する JAR を指定する必要がないことを意味します。ただし、サードパーティーのカスタム JAR を追加する必要がある場合は、次のように、Maven GAV 構文 (groupId:artifactId:version) の CLI 引数として --dep を使用してこれらを指定できます。

camel run foo.java --dep=com.foo:acme:1.0
To add a Camel dependency explicitly you can use a shorthand syntax (starting with `camel:` or `camel-`):
camel run foo.java --dep=camel-saxon

複数の依存関係をコンマで区切って指定できます。

camel run foo.java --dep=camel-saxon,com.foo:acme:1.0

5.3.8. サードパーティーの Maven リポジトリーの使用

Camel CLI は、まずローカルリポジトリーからダウンロードし、次にオンラインの Maven Central リポジトリーからダウンロードします。サードパーティーの Maven リポジトリーからダウンロードするには、これを CLI 引数として、または application.properties ファイルで指定する必要があります。

camel run foo.java --repos=https://packages.atlassian.com/maven-external
注記

複数のリポジトリーをコンマで区切って指定できます。

サードパーティーの Maven リポジトリーの設定は、次に示すように、camel.jbang.repos キーを使用して application.properties ファイルで設定されます。

camel.jbang.repos=https://packages.atlassian.com/maven-external

Camel ルートを実行すると、application.properties が自動的に読み込まれます。

camel run foo.java

使用するプロパティーファイルを明示的に指定することもできます。

camel run foo.java application.properties

または、これをプロファイルとして指定することもできます。

camel run foo.java --profile=application

ここで、プロファイル ID はプロパティーファイルの名前です。

5.3.9. Maven の使用設定

デフォルトでは、既存の ~/.m2/settings.xml ファイルがロードされるため、Maven 解決プロセスの動作を変更することができます。Maven 設定ファイルは、Maven ミラー、認証情報設定 (暗号化される可能性がある)、またはアクティブなプロファイル、および追加のリポジトリーに関する情報を提供します。

Maven リポジトリーは認証を使用でき、Maven で認証情報を設定するには <server> 要素を使用します。

<server>
    <id>external-repository</id>
    <username>camel</username>
    <password>{SSVqy/PexxQHvubrWhdguYuG7HnTvHlaNr6g3dJn7nk=}</password>
</server>

パスワードはプレーンテキストを使用して指定できますが、最初に Maven マスターパスワードを設定してから、それを使用してリポジトリーパスワードを設定することを推奨します。

$ mvn -emp
Master password: camel
{hqXUuec2RowH8dA8vdqkF6jn4NU9ybOsDjuTmWvYj4U=}

上記のパスワードは、次のように ~/.m2/settings-security.xml ファイルに追加する必要があります。

<settingsSecurity>
  <master>{hqXUuec2RowH8dA8vdqkF6jn4NU9ybOsDjuTmWvYj4U=}</master>
</settingsSecurity>

その後、通常のパスワードを設定できます。

$ mvn -ep
Password: camel
{SSVqy/PexxQHvubrWhdguYuG7HnTvHlaNr6g3dJn7nk=}

その後、このパスワードを <server>/<password> 設定で使用できます。

デフォルトでは、Maven は ~/.m2/settings-security.xml ファイルからマスターパスワードを読み取りますが、これをオーバーライドすることもできます。settings.xml ファイル自体の場所は、次のように指定できます。

camel run foo.java --maven-settings=/path/to/settings.xml --maven-settings-security=/path/to/settings-security.xml

場所 (~/.m2/settings.xml であっても) を想定せずに Camel アプリケーションを実行したい場合は、このオプションを使用します。

camel run foo.java --maven-settings=false

5.3.10. GitHub でホストされているルートの実行

Camels リソースローダーを使用して、GitHub でホストされているルートを実行できます。たとえば、Camel K サンプルの 1 つを実行するには、次を使用します。

camel run github:apache:camel-kamelets-examples:jbang/hello-java/Hey.java

GitHub の https URL を使用することもできます。たとえば、Web ブラウザーからサンプルを参照し、ブラウザーウィンドウから URL をコピーして、Camel CLI でサンプルを実行できます。

camel run https://github.com/apache/camel-kamelets-examples/tree/main/jbang/hello-java

すべての groovy ファイルを実行するなど、ワイルドカード (つまり \*) を使用して複数のファイルと一致させることもできます。

camel run https://github.com/apache/camel-kamelets-examples/tree/main/jbang/languages/*.groovy

または、rou* で始まるすべてのファイルを実行することもできます。

camel run https://github.com/apache/camel-kamelets-examples/tree/main/jbang/languages/rou*
5.3.10.1. GitHub Gist からのルート実行

GitHub の要点を使用すると、簡単に実行できる小さな Camel ルートを共有する簡単な方法です。たとえば、Gist を実行するには、次を使用します。

camel run https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92

Gist には 1 つ以上のファイルを含めることができ、Camel CLI はすべての関連ファイルを収集するため、Gist には複数のルート、プロパティーファイル、および Java Bean を含めることができます。

5.3.11. GitHub でホストされているルートのダウンロード

Camel CLI を使用すると、既存のサンプルを GitHub からローカルディスクにダウンロードできます。これにより、サンプルを変更してローカルで実行できるようになります。たとえば、次のコマンドを実行して dependency injection 例をダウンロードできます。

camel init https://github.com/apache/camel-kamelets-examples/tree/main/jbang/dependency-injection

次に、ファイル (サブフォルダーではなく) が現在のディレクトリーにダウンロードされます。次に、次のようにしてサンプルをローカルで実行できます。

camel run *

--directory オプションを使用してファイルを新しいフォルダーにダウンロードすることもできます。たとえば、ファイルを myproject という名前のフォルダーにダウンロードするには、次のコマンドを実行します。

camel init https://github.com/apache/camel-kamelets-examples/tree/main/jbang/dependency-injection --directory=myproject
注記

--directory オプションを使用すると、このディレクトリーがすでに存在する場合、Camel は自動的に削除します。

この例を開発モードで実行して、ソースコードの変更をホットデプロイすることができます。

camel run * --dev

単一のファイルをダウンロードできます。たとえば、Camel K サンプルの 1 つをダウンロードするには、次を実行します。

camel init https://github.com/apache/camel-k-examples/blob/main/generic-examples/languages/simple.groovy

これは素晴らしいルートで、次のように実行できます (または * を使用します)。

camel run simple.groovy
5.3.11.1. GitHub Gist からのルートのダウンロード

次のように Gist からファイルをダウンロードできます。

camel init https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92

これにより、ファイルがローカルディスクにダウンロードされ、後で実行できるようになります。

camel run *

--directory オプションを使用して新しいフォルダーにダウンロードできます。たとえば、foobar という名前のフォルダーにダウンロードするには、次のコマンドを実行します。

camel init https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92 --directory=foobar
注記

--directory オプションを使用すると、このディレクトリーがすでに存在する場合、Camel は自動的に削除します。

5.3.12. Camel K インテグレーションまたはバインディングの実行

Camel は、CRD 形式 (Kubernetes カスタムリソース定義) の Camel K インテグレーションとバインディングファイルの実行をサポートしています。たとえば、joke.yaml という名前の kamelet バインディングファイルを実行するには、次のようにします。

#!/usr/bin/env jbang camel@apache/camel run
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: joke
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1
      name: chuck-norris-source
    properties:
      period: 2000
  sink:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1
      name: log-sink
    properties:
      show-headers: false
camel run joke.yaml

5.3.13. クリップボードから実行

Camel ルートは OS クリップボードから直接実行できます。これにより、コードをコピーして、ルートをすぐに実行できます。

camel run clipboard.<extension>

ここで、<extension> は、クリップボードのコンテンツのタイプ (javaxmlyaml など) です。

たとえば、これをクリップボードにコピーして、ルートを実行できます。

<route>
  <from uri="timer:foo"/>
  <log message="Hello World"/>
</route>
camel run clipboard.xml

5.3.14. ローカルの Camel インテグレーションの制御

現在実行中の Camel インテグレーションをリスト表示するには、ps オプションを使用します。

camel ps
  PID   NAME                          READY  STATUS    AGE
 61818  sample.camel.MyCamelApplica…   1/1   Running  26m38s
 62506  test1                          1/1   Running   4m34s

これには、PID、インテグレーションの名前、経過時間がリストされます。

stop コマンドを使用すると、これらの実行中の Camel インテグレーションを停止できます。たとえば、test1 を停止するには、次を実行します。

camel stop test1
Stopping running Camel integration (pid: 62506)

PID を使用してインテグレーションを停止できます。

camel stop 62506
Stopping running Camel integration (pid: 62506)
注記

stop コマンドは入力で始まるインテグレーションと一致するため、フルネームを入力する必要はありません。たとえば、camel stop t と入力すると、t で始まるすべてのインテグレーションを停止できます。

すべてのインテグレーションを停止するには、次のように --all オプションを使用します。

camel stop --all
Stopping running Camel integration (pid: 61818)
Stopping running Camel integration (pid: 62506)

5.3.15. Quarkus 統合の制御

Camel CLI は、デフォルトでは、CLI を使用して実行されている Camel インテグレーション (camel run foo.java など) のみを制御します。

CLI が Quarkus アプリケーションを制御および管理できるようにするには、これらのプロジェクトに依存関係を追加して Camel CLI と統合する必要があります。

Quarkus

Quarkus アプリケーションに、次の依存関係を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-cli-connector</artifactId>
</dependency>

5.3.16. Camel インテグレーションのステータスの取得

Camel CLI の get コマンドは、稼働中の Camel インテグレーションの 1 つまたはすべてに関する Camel 固有のステータスを取得するために使用されます。実行中の Camel インテグレーションの状態を表示するには、以下を実行します。

camel get
  PID   NAME      CAMEL            PLATFORM            READY  STATUS    AGE    TOTAL  FAILED  INFLIGHT  SINCE-LAST
 61818  MyCamel   3.20.1-SNAPSHOT  Quarkus v3.2         1/1   Running  28m34s    854       0         0     0s/0s/-
 63051  test1     3.20.1-SNAPSHOT  JBang                1/1   Running     18s     14       0         0     0s/0s/-
 63068  mygroovy  3.20.1-SNAPSHOT  JBang                1/1   Running      5s      2       0         0     0s/0s/-

camel get コマンドは、デフォルトのインテグレーションを表示します。これは、camel get integrations コマンドまたは camel get int コマンドの入力と同じです。

これにより、すべての Camel インテグレーションに関する全体的な情報が表示されます。ここでは、処理されたメッセージの合計数を確認できます。列 Since Last は、3 つのステージ (started/completed/failed) の最後の処理済みメッセージの前に時間を示します。

0s/ 0s/- の値は、最後に開始および完了したメッセージが発生したこと (0 秒前)、および失敗したメッセージがまだないことを意味します。この例では、9s/9s/1h3m は、最後に開始および完了したメッセージが 9 秒前に、最後の失敗は 1 時間、3 分前であることを意味します。

camel get route を使用したすべてのローカル Camel インテグレーションから、すべてのルートのステータスを確認することもできます。

camel get route
  PID   NAME      ID      FROM                        STATUS    AGE   TOTAL  FAILED  INFLIGHT  MEAN  MIN  MAX  SINCE-LAST
 61818  MyCamel   hello   timer://hello?period=2000   Running  29m2s    870       0         0     0    0   14     0s/0s/-
 63051  test1      java    timer://java?period=1000    Running    46s     46       0         0     0    0    9     0s/0s/-
 63068  mygroovy  groovy  timer://groovy?period=1000  Running    34s     34       0         0     0    0    5     0s/0s/-
注記

camel get --help を使用して、利用可能なすべてのコマンドを表示します。

5.3.16.1. Camel インテグレーションの Top ステータス

camel top コマンドは、実行中の Camel インテグレーションの使用率の統計値(最大使用率の低いメモリー)を取得するために使用されます。

camel top
  PID   NAME     JAVA     CAMEL            PLATFORM            STATUS    AGE         HEAP        NON-HEAP     GC     THREADS   CLASSES
 22104  chuck    11.0.13  3.20.1-SNAPSHOT  JBang               Running   2m10s  131/322/4294 MB  70/73 MB  17ms (6)      7/8  7456/7456
 14242  MyCamel  11.0.13  3.20.1-SNAPSHOT  Quarkus 32.         Running  33m40s  115/332/4294 MB  62/66 MB  37ms (6)    16/16  8428/8428
 22116  bar      11.0.13  3.20.1-SNAPSHOT  JBang               Running    2m7s   33/268/4294 MB  54/58 MB  20ms (4)      7/8  6104/6104

HEAP 列には、ヒープメモリー (used/committed/max) とヒープ以外 (used/committed) が表示されます。GC 列には、ガベージコレクション情報 (時間と合計実行数) が表示されます。CLASSES 列には、クラスの数 (ロード/合計) が表示されます。

また、すべてのローカル Camel と camel top route から、各ルートの最高パフォーマンスのルート (平均処理時間の最高から最低まで) を確認することもできます。

camel top route
  PID   NAME     ID                     FROM                                 STATUS    AGE    TOTAL  FAILED  INFLIGHT  MEAN  MIN  MAX  SINCE-LAST
 22104  chuck    chuck-norris-source-1  timer://chuck?period=10000           Started     10s      1       0         0   163  163  163          9s
 22116  bar      route1                 timer://yaml2?period=1000            Started      7s      7       0         0     1    0   11          0s
 22104  chuck    chuck                  kamelet://chuck-norris-source        Started     10s      1       0         0     0    0    0          9s
 22104  chuck    log-sink-2             kamelet://source?routeId=log-sink-2  Started     10s      1       0         0     0    0    0          9s
 14242  MyCamel  hello                  timer://hello?period=2000            Started  31m41s    948       0         0     0    0    4          0s
注記

使用可能なすべてのコマンドを表示するには、camel top --help を使用します。

5.3.16.2. ルートの開始と停止

Camel cmd は、実行中の Camel インテグレーションでさまざまなコマンド (ルートを開始および停止するコマンドなど) を実行するために使用されます。

chuck インテグレーション内のすべてのルートを停止するには、次を実行します。

camel cmd stop-route chuck

その後、chuck インテグレーションのステータスが Stopped に変更されます。

camel get route
  PID   NAME     ID                     FROM                                 STATUS    AGE   TOTAL  FAILED  INFLIGHT  MEAN  MIN  MAX  SINCE-LAST
 81663  chuck    chuck                  kamelet://chuck-norris-source        Stopped           600       0         0     0    0    1          4s
 81663  chuck    chuck-norris-source-1  timer://chuck?period=10000           Stopped           600       0         0    65   52  290          4s
 81663  chuck    log-sink-2             kamelet://source?routeId=log-sink-2  Stopped           600       0         0     0    0    1          4s
 83415  bar      route1                 timer://yaml2?period=1000            Started  5m30s    329       0         0     0    0   10          0s
 83695  MyCamel  hello                  timer://hello?period=2000            Started  3m52s    116       0         0     0    0    9          1s

ルートを開始するには、次を実行します。

camel cmd start-route chuck

すべての Camel 統合の all ルートを停止するには、次のように --all フラグを使用します。

camel cmd stop-route --all

all ルートを開始するには、次を使用します。

camel cmd start-route --all
注記

コンマを使用して ID を区切ることにより、1 つ以上のルートを停止できます (例: Camel cmd start-route --id=route1,hello)。詳細は、camel cmd start-route --help コマンドを使用してください。

5.3.16.3. ログレベルの設定

実行中の Camel 統合の現在のログレベルは、次の方法で確認できます。

camel cmd logger
  PID   NAME   AGE   LOGGER  LEVEL
 90857  bar   2m48s  root    INFO
 91103  foo     20s  root    INFO

ログレベルは実行時に変更できます。たとえば、foo のレベルを DEBUG に変更するには、次を実行します。

camel cmd logger --level=DEBUG foo
注記

--all を使用すると、実行中のすべての統合のログレベルを変更できます。

5.3.16.4. サービスの一覧表示

一部の Camel インテグれションは、REST、SOAP-WS、または TCP プロトコルを使用したソケットレベルのサービスなど、クライアントが呼び出すことができるサービスをホストする場合があります。以下の例に示すように、利用可能なサービスをリストできます。

camel get service
 PID   NAME       COMPONENT      PROTOCOL  SERVICE
 1912  netty      netty          tcp       tcp:localhost:4444
 2023  greetings  platform-http  rest      http://0.0.0.0:7777/camel/greetings/{name} (GET)
 2023  greetings  platform-http  http      http://0.0.0.0:7777/q/dev

ここでは、2 つの Camel インテグレーションを確認できます。Netty インテグレーションは、ポート 4444 で利用可能な TCP サービスをホストします。他の Camel インテグレーションは、GET 経由でのみ呼び出すことができる REST サービスをホストします。3 番目のインテグレーションには、埋め込み Web コンソールが付属します (--console オプションで開始)。

注記

サービスをリストに掲載するには、Camel コンポーネントが Camel Console を使用してサービスをアドバタイズできる必要があります。

5.3.16.4.1. サーキットブレーカーのリスト状態

Camel インテグレーションで Circuit Breaker (https://camel.apache.org/components/3.20.x/eips/circuitBreaker-eip.html) を使用する場合は、次のように Camel CLI でブレーカーのステータスを出力できます。

camel get circuit-breaker
  PID   NAME  COMPONENT     ROUTE   ID               STATE      PENDING  SUCCESS  FAIL  REJECT
 56033  mycb  resilience4j  route1  circuitBreaker1  HALF_OPEN        5        2     3       0

ここでは、サーキットブレーカーの状態が half open、つまり障害が減少し始めた場合にブレーカーの状態が closed に移行しようとしていることが分かります。

注記

最新の状態を表示するには、watch オプションを指定してコマンドを実行します。次に例を示します。

watch camel get circuit-breaker.

5.3.17. パイプを使用したターミナルからのスクリプト作成

Camel CLI ファイルは、パイプとフィルターを使用したターミナルスクリプトに使用するスクリプトとして実行できます。

注記

スクリプトが実行されるたびに、JVM が Camel で起動されます。これはそれほど高速なわけでも、メモリー使用量が少ないわけでもないため、たとえば、多くの Camel コンポーネントまたは Kamelet を使用して、異種の IT システムからデータをより簡単に送受信するためには、Camel CLI ターミナルスクリプトを使用してください。

これには、たとえば、以下の upper.yaml ファイルのように、ファイルの先頭に次の行を追加する必要があります。

///usr/bin/env jbang --quiet camel@apache/camel pipe "$0" "$@" ; exit $?

# Will upper-case the input
- from:
    uri: "stream:in"
    steps:
      - setBody:
          simple: "${body.toUpperCase()}"
      - to: "stream:out"

これをスクリプトとして実行するには、ファイル実行権限を設定する必要があります。

chmod +x upper.yaml

次に、これをスクリプトとして実行できます。

echo "Hello\nWorld" | ./upper.yaml

これにより次の出力が出力されます。

HELLO
WORLD

--logging=true を使用してログをオンにすると、.camel-jbang/camel-pipe.log ファイルにログが記録されます。ログファイルの名前は設定できません。

echo "Hello\nWorld" | ./upper.yaml --logging=true
5.3.17.1. stream:in の line モードと raw モードでの使用

stream:in を使用して System in からデータを読み取る場合、Stream コンポーネント は、2 つのモードで動作します。

  • 行モード (デフォルト) - 入力を単一行 (改行で区切られた) として読み取ります。メッセージ本文は String です。
  • raw モード - ストリームの終わり までストリーム全体を読み取ります。メッセージ本文は byte[] です。
注記

デフォルトモードは、ストリームコンポーネントが歴史的にどのように作成されたかによるものです。したがって、raw モードを使用するには、stream:in?readLine=false を設定することを推奨します。

5.3.18. ローカル Kamelet の実行

Camel CLI を使用すると、GitHub で公開したり、jar にパッケージ化したりすることなく、ローカルの Kamelet を試すことができます。

camel run --local-kamelet-dir=/path/to/local/kamelets earthquake.yaml
注記

kamelet がローカルファイルシステムからのものである場合、Camel CLI を --dev モードで実行すると、更新されていればライブリロードできます。

GitHub リポジトリー内のフォルダーを指定することもできます。以下に例を示します。

camel run --local-kamelet-dir=https://github.com/apache/camel-kamelets-examples/tree/main/custom-kamelets user.java
注記

kamelet が GitHub からロードされた場合、ライブリロードはできません。

5.3.19. platform-http コンポーネントの使用

ルートが platform-http から開始すると、Camel CLI にはポート 8080 で実行されている VertX HTTP サーバーが自動的に組み込まれます。次の例は、server.yaml という名前のファイル内のルートを示しています。

- from:
    uri: "platform-http:/hello"
    steps:
      - set-body:
          constant: "Hello World"

この例は次のように実行できます。

camel run server.yaml

次に、次のようにして HTTP サービスを呼び出します。

$ curl http://localhost:8080/hello
Hello World%

5.3.20. Java Bean とプロセッサーの使用

通常の Java ソースファイルを Camel ルートとともに含める基本サポートがあり、Camel CLI ランタイムに Java ソースをコンパイルさせます。これは、アプリケーションに必要な小さなユーティリティークラス、POJO、Camel プロセッサーを含めることができることを意味します。

注記

Java ソースファイルではパッケージ名を使用できません。

5.3.21. デバッグ

利用可能なデバッグには次の 2 種類があります。

  • Java debugging - Java コードのデバッグ (標準 Java)
  • Camel route debugging - Camel ルートのデバッグ (Camel ツールプラグインが必要)
5.3.21.1. Java のデバッグ

JBang が提供する --debug フラグを使用して、統合スクリプトをデバッグできます。ただし、JVM の起動時に Java デバッグを有効にするには、次のように、camel の代わりに jbang コマンドを使用します。

jbang --debug  camel@apache/camel run hello.yaml
Listening for transport dt_socket at address: 4004

ご覧のとおり、デフォルトのリスニングポートは 4004 ですが、JBang debugging で説明されているように設定できます。

これは標準の Java デバッグソケットです。その後、選択した IDE を使用できるようになります。Processor を追加して、(ルート定義の作成とは対照的に) ルートの実行中にヒットするブレークポイントを設定できます。

5.3.21.2. Camel ルートのデバッグ

Camel ルートデバッガーはデフォルトで利用可能です (camel-debug コンポーネントはクラスパスに自動的に追加されます)。デフォルトでは、URL service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel で JMX を介してアクセスできます。その後、選択した統合開発環境 (IDE) を使用できるようになります。

5.3.22. ヘルスチェック

ヘルスチェックのステータスには、次のように CLI から Camel CLI を使用してアクセスします。

camel get health
  PID   NAME    AGE  ID             RL  STATE  RATE    SINCE   MESSAGE
 61005  mybind   8s  camel/context   R   UP    2/2/-  1s/3s/-

ここでは Camel が UP しているのがわかります。アプリケーションは 8 秒間実行されており、2 つのヘルスチェックが呼び出されています。

出力には、チェックの default レベルが次のように表示されます。

  • CamelContext ヘルスチェック
  • コンポーネント固有のヘルスチェック (camel-kafkacamel-aws など)
  • カスタムヘルスチェック
  • UP ではないチェック

RATE 列には、/ で区切られた 3 つの数字が表示されます。したがって、2/2/- は合計 2 つのチェック、2 つは成功し、失敗はなしということを意味します。最後の 2 つの列は、この数値が成功または失敗した連続チェックの数であるため、ヘルスチェックの状態が変化するとリセットされます。したがって、ヘルスチェックが失敗し始めると、数値は次のようになります。

camel get health
  PID   NAME     AGE   ID             RL  STATE   RATE    SINCE    MESSAGE
 61005  mybind   3m2s  camel/context   R   UP    77/-/3  1s/-/17s  some kind of error

ここでは、数値が 77/-/3 に変更されていることがわかります。つまり、チェックの合計数は 77 になります。成功はありませんが、チェックは 3 回連続で失敗しています。SINCE 列は RATE に対応します。したがって、この場合、最後のチェックは 1 秒前であり、チェックは 17 秒連続で失敗していることがわかります。

--level=full を使用すると、コンシューマーおよびルートレベルのチェックも含むすべてのヘルスチェックを出力できます。

ヘルスチェックは、--trace フラグを使用して表示できる例外が出力されたために失敗することがよくあります。

camel get health --trace
  PID   NAME      AGE   ID                                      RL  STATE    RATE       SINCE     MESSAGE
 61038  mykafka  6m19s  camel/context                            R   UP    187/187/-  1s/6m16s/-
 61038  mykafka  6m19s  camel/kafka-consumer-kafka-not-secure…   R  DOWN   187/-/187  1s/-/6m16s  KafkaConsumer is not ready - Error: Invalid url in bootstrap.servers: value


------------------------------------------------------------------------------------------------------------------------
                                                       STACK-TRACE
------------------------------------------------------------------------------------------------------------------------
    PID: 61038
    NAME: mykafka
    AGE: 6m19s
    CHECK-ID: camel/kafka-consumer-kafka-not-secured-source-1
    STATE: DOWN
    RATE: 187
    SINCE: 6m16s
    METADATA:
        bootstrap.servers = value
        group.id = 7d8117be-41b4-4c81-b4df-cf26b928d38a
        route.id = kafka-not-secured-source-1
        topic = value
    MESSAGE: KafkaConsumer is not ready - Error: Invalid url in bootstrap.servers: value
    org.apache.kafka.common.KafkaException: Failed to construct kafka consumer
        at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:823)
        at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:664)
        at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:645)
        at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:625)
        at org.apache.camel.component.kafka.DefaultKafkaClientFactory.getConsumer(DefaultKafkaClientFactory.java:34)
        at org.apache.camel.component.kafka.KafkaFetchRecords.createConsumer(KafkaFetchRecords.java:241)
        at org.apache.camel.component.kafka.KafkaFetchRecords.createConsumerTask(KafkaFetchRecords.java:201)
        at org.apache.camel.support.task.ForegroundTask.run(ForegroundTask.java:123)
        at org.apache.camel.component.kafka.KafkaFetchRecords.run(KafkaFetchRecords.java:125)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
    Caused by: org.apache.kafka.common.config.ConfigException: Invalid url in bootstrap.servers: value
        at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:59)
        at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:48)
        at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:730)
        ... 13 more

ここでは、無効な設定 (Invalid url in bootstrap.servers: value) による org.apache.kafka.common.config.ConfigException が原因でヘルスチェックが失敗していることがわかります。

注記

さまざまなオプションをすべて表示するには、camel get health --help を使用します。

5.4. 利用可能な Camel コンポーネントのリスト

Camel には、すぐに使える次のような多くのアーティファクトが付属しています。

  • コンポーネント
  • データ形式
  • 表現言語
  • その他のコンポーネント
  • Kamelets

Camel CLI を使用すると、camel catalog コマンドを使用して Camel が提供するものをリストできます。たとえば、すべてのコンポーネントをリストするには、次のようにします。

camel catalog components

利用可能な Kamelet を確認するには以下を実行します。

camel catalog kamelets
注記

使用可能なすべてのコマンドを表示するには、camel catalog --help を使用します。

5.4.1. コンポーネントのドキュメントの表示

doc のゴールでは、すべてのコンポーネント、データ形式、Kamelet の簡単なドキュメントを表示できます。たとえば、kafka コンポーネントを確認するには、次を実行します。

camel doc kafka
注記

Camel CLI はこの情報に直接アクセスできず、コンポーネントの基本的な説明しか表示できませんが、すべての設定オプションの表が含まれているため、このドキュメントは Web サイトに表示されているような完全なドキュメントではありません。

jackson データ形式のドキュメントを参照するには:

camel doc jackson

まれに、同じ名前のコンポーネントとデータ形式が存在し、doc の目標によってコンポーネントが優先されることがあります。このような状況では、次のように名前の前にデータ形式を付けることができます。

camel doc dataformat:thrift

次のような kamelet ドキュメントも参照できます。

camel doc aws-kinesis-sink
注記

サポートされている Kamelet のリストは、サポートされている Kamelet を参照してください。

5.4.1.1. Camel Web サイトからのオンラインドキュメントの参照

doc コマンドを使用すると、オンラインドキュメントの Web ブラウザーで url をすばやく開くことができます。たとえば、kafka コンポーネントを参照するには、--open-url を使用します。

camel doc kafka --open-url

これはデータ形式、言語、kamelet にも機能します。

camel doc aws-kinesis-sink --open-url
注記

オンラインドキュメントへのリンクだけを取得するには、camel doc kafka --url を使用します。

5.4.1.2. 表にリストされているフィルタリングオプション

一部のコンポーネントには多くのオプションがある場合があり、そのような場合は --filter オプションを使用して、名前、説明、またはグループ (producer, security, advanced) のいずれかでフィルターに一致するオプションのみをリスト表示できます。

たとえば、セキュリティー関連のオプションのみをリストするには、次のようにします。

camel doc kafka --filter=security

timeout に関するものだけをリストするには以下を実行します。

camel doc kafka --filter=timeout

5.5. 依存関係のリスト収集

Camel CLI を使用すると、依存関係が自動的に解決します。これは、すべての Camel コンポーネントを依存関係として追加するために Maven や Gradle などのビルドシステムを使用する必要がないことを意味します。

ただし、Camel インテグレーションを実行するにはどのような依存関係が必要かを確認することがあります。dependencies コマンドを使用すると、必要な依存関係を確認できます。コマンド出力では、mvn dependencies:tree などの詳細なツリーは出力されません。出力は、必要な Camel コンポーネントおよびその他の JAR をリストすることを目的としているためです (Kamelet を使用する場合)。

デフォルトでの依存関係出力は、次に示すように、ランタイムとして Camel-main を使用する vanilla Apache Camel です。

camel dependency
org.apache.camel:camel-dsl-modeline:4.8.3
org.apache.camel:camel-health:4.8.3
org.apache.camel:camel-kamelet:4.8.3
org.apache.camel:camel-log:4.8.3
org.apache.camel:camel-rest:4.8.3
org.apache.camel:camel-stream:4.8.3
org.apache.camel:camel-timer:4.8.3
org.apache.camel:camel-yaml-dsl:4.8.3
org.apache.camel.kamelets:camel-kamelets-utils:0.9.3
org.apache.camel.kamelets:camel-kamelets:0.9.3

出力はデフォルトで、GAV 形式 (groupId:artifactId:version) の Maven 依存関係ごとに 1 行になります。

次のように、出力の Maven 形式を指定できます。

camel dependency --output=maven
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-main</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-dsl-modeline</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-health</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-kamelet</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-log</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-rest</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-stream</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-timer</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-yaml-dsl</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel.kamelets</groupId>
    <artifactId>camel-kamelets-utils</artifactId>
    <version>0.9.3</version>
</dependency>
<dependency>
    <groupId>org.apache.camel.kamelets</groupId>
    <artifactId>camel-kamelets</artifactId>
    <version>0.9.3</version>
</dependency>

次に示すように、ターゲットランタイムとして quarkus を選択することもできます。

camel dependency --runtime=quarkus
org.apache.camel.quarkus:camel-quarkus-core:3.15
org.apache.camel.quarkus:camel-quarkus-debug:3.15
org.apache.camel.quarkus:camel-quarkus-microprofile-health:3.15
org.apache.camel.quarkus:camel-quarkus-platform-http:3.15
org.apache.camel.quarkus:camel-timer:3.15
org.apache.camel:camel-cli-connector:{camel-sb-version}
org.apache.camel:camel-management:{camel-sb-version}
org.apache.camel:camel-rest:{camel-sb-version}
org.apache.camel:camel-timer:{camel-sb-version}
org.apache.camel:camel-xml-io-dsl:{camel-sb-version}
org.apache.camel:camel-yaml-dsl:{camel-sb-version}

5.6. Open API

Camel CLI では、既存の OpenAPI 仕様ファイルがある場合、contract first アプローチを使用して Open API サービスを迅速に公開できます。Camel CLI は、命名規則 direct:<operationId> を使用して、OpenAPI 仕様の各 API エンドポイントを Camel ルートにブリッジします。これにより、特定の操作に対して Camel ルートをより迅速に実装できるようになります。

詳細は、OpenAPI の例 を参照してください。

5.7. トラブルシューティング

JBang を使用すると、状態が ~/.jbang ディレクトリーに保存されます。これは、JBang がダウンロードした JAR を保存する場所でもあります。Camel CLI は、実行中に必要な依存関係もダウンロードします。

ただし、これらの依存関係はローカルの Maven リポジトリー ~/.m2 にダウンロードされます。そのため、Camel CLI の実行中に古い JAR などの問題をトラブルシューティングする場合は、これらのディレクトリーまたはその一部を削除してみてください。

5.8. Red Hat build of Apache Camel for Quarkus へのエクスポート

Camel CLI 統合を従来の Java ベースのプロジェクトに export できます。Camel CLI を使用してプロトタイプをビルドした後、Java コーディングがさらに必要な従来の Java ベースのプロジェクトが必要な場合、または Quarkus もしくは vanilla Camel Main の強力なランタイムを使用する場合に、これを実行するとよいでしょう。

5.8.1. Red Hat build of Apache Camel for Quarkus へのエクスポート

コマンド export --runtime=quarkus は、現在の Camel CLI ファイルを、src/main/ フォルダー構造で編成されたファイルとともに Maven ベースのプロジェクトにエクスポートします。

たとえば、quarkus ランタイム、maven groupID com.foo、artifactId acme、およびバージョン 1.0-SNAPSHOT を使用して、camel-quarkus-jbang ディレクトリーにエクスポートするには、次を実行します。

camel export --runtime=quarkus --gav=com.foo:acme:1.0-SNAPSHOT --quarkus-group-id=com.redhat.quarkus.platform --quarkus-version=3.15.3.redhat-00002 --dep=org.apache.camel.quarkus:camel-quarkus-timer,org.apache.camel.quarkus:camel-quarkus-management,org.apache.camel.quarkus:camel-quarkus-cli-connector --repos=https://maven.repository.redhat.com/ga,https://packages.atlassian.com/maven-external --directory=camel-quarkus-jbang

注記

これにより、current ディレクトリーにエクスポートされます。これは、ファイルが必要なフォルダー構造に移動されることを意味します。

別のディレクトリーにエクスポートするには、次を実行します。

camel export --runtime=quarkus --gav=com.foo:acme:1.0-SNAPSHOT --directory=../myproject

エクスポートする場合、pom.xml または build.gradle で定義された Camel バージョンは、Camel CLI が使用するバージョンと同じです。ただし、次のように別の Camel バージョンを指定できます。

camel export --runtime=quarkus --gav=com.foo:acme:1.0-SNAPSHOT --directory=../myproject --quarkus-version=3.15.3.redhat-00002
注記

詳細は、camel export --help コマンドを実行して、使用可能なオプションを確認してください。

5.8.2. Camel CLI を含めたエクスポート

Quarkus または Camel Main にエクスポートする場合、Camel JBang CLI はそのままでは含まれません。Camel CLI (Camel) を引き続き使用するには、次のように --dep オプションに Camel:cli-connector を追加する必要があります。

camel export --runtime=quarkus --gav=com.foo:acme:1.0-SNAPSHOT --dep=camel:cli-connector --directory=../myproject

5.8.3. エクスポートの設定

デフォルトでは、export コマンドは application.properties ファイルから設定をロードします。このファイルは、ランタイムや Java バージョンの選択などの特定のパラメーターをエクスポートするために使用されます。

exporting に関連する次のオプションは、application.properties ファイルで設定できます。

オプション説明

camel.jbang.runtime

ランタイム (quarkus または camel-main)

camel.jbang.gav

Maven group:artifact:version

camel.jbang.dependencies

追加の依存関係 (複数の依存関係を区切るにはコンマを使用します)。詳細は、カスタム JAR の追加 を参照してください。

camel.jbang.classpathFiles

クラスパスに追加する追加ファイル (複数のファイルを区切るにはコンマを使用します)。詳細は、カスタム JAR の追加 を参照してください。

camel.jbang.javaVersion

Java バージョン (11 または 17)

camel.jbang.kameletsVersion

Apache Camel Kamelets のバージョン

camel.jbang.localKameletDir

Kamelets をロードするためのローカルディレクトリー

camel.jbang.quarkusGroupId

Quarkus Platform Maven groupId

camel.jbang.quarkusArtifactId

Quarkus Platform Maven artifactId

camel.jbang.quarkusVersion

Quarkus Platform バージョン

camel.jbang.mavenWrapper

エクスポートされたプロジェクトに Maven ラッパーファイルを含める

camel.jbang.gradleWrapper

エクスポートされたプロジェクトに Gradle Wrapper ファイルを含める

camel.jbang.buildTool

使用するビルドツール (maven または gradle)

camel.jbang.repos

オンデマンドでダウンロードするための追加の Maven リポジトリー (複数のリポジトリーを区切るにはコンマを使用します)

camel.jbang.mavenSettings

サーバー、リポジトリー、ミラー、プロキシーを設定するための Maven setting.xml ファイルのオプションの場所。false に設定すると、デフォルトの ~/.m2/settings.xml も使用されません。

camel.jbang.mavenSettingsSecurity

settings.xml を復号化するための Maven settings-security.xml ファイルのオプションの場所

camel.jbang.exportDir

プロジェクトがエクスポートされるディレクトリー。

camel.jbang.platform-http.port

--console が有効な場合など、スタンドアロン Camel を実行するときに使用する HTTP サーバーポート (デフォルトではポート 8080)。

camel.jbang.console

スタンドアロン Camel を実行している場合、ローカル HTTP サーバー (デフォルトではポート 8080) 上の /q/dev にある開発者コンソール。

camel.jbang.health

スタンドアロン Camel を実行している場合は、ローカル HTTP サーバー (デフォルトではポート 8080) の /q/health でヘルスチェックを行います。

注記

これらは、export コマンドのオプションです。詳細とデフォルト値を表示するには、camel export --help を実行します。

5.8.4. 設定

Camel CLI の config コマンドは、ユーザー設定を保存および使用するために使用されます。これにより、毎回 CLI オプションを指定する必要がなくなります。たとえば、別の Camel バージョンを実行するには、次を使用します。

camel run * --camel-version=4.8

camel-version は次のようなユーザー設定に追加できます。

camel config set camel-version=4.8

run コマンドはユーザー設定を使用します。

camel run *

ユーザー設定ファイルは ~/.camel-jbang-user.properties に保存されます。

5.8.4.1. 設定と設定解除

すべての Camel CLI オプションはユーザー設定に追加されます。以下に例を示します。

camel config set gav=com.foo:acme:1.0-SNAPSHOT
camel config set runtime=quarkus
camel config set deps=org.apache.camel.quarkus:camel-timer,camel:management,camel:cli-connector
camel config set camel-version=4.8
camel config set camel-quarkus-version=3.15

設定をエクスポートするには、以下を実行します。

camel export

camel アプリケーションを初期化するには、以下を実行します。

camel init foo.yaml

camel アプリケーションを実行するには、以下を実行します。

camel run foo.yaml --https://maven.repository.redhat.com/ga,https://packages.atlassian.com/maven-external

ユーザー設定キーを設定解除するには、以下を実行します。

camel config unset camel-quarkus-version
5.8.4.2. 設定のリスト表示と取得

ユーザー設定キーをリスト表示するには、以下を使用します。

camel config list

上記の設定では、次の出力が生成されます。

runtime = quarkus
deps = org.apache.camel.springboot:camel-timer-starter
gav = com.foo:acme:1.0-SNAPSHOT

特定のキーの値を取得するには、get コマンドを使用します。

camel config get gav

com.foo:acme:1.0-SNAPSHOT
5.8.4.3. プレースホルダー置換

ユーザー設定値は、コマンドラインプロパティーのプレースホルダーとして使用できます。次に例を示します。

camel config set repos=https://maven.repository.redhat.com/ga

camel run 'Test.java' --logging-level=info --repos=#repos,https://packages.atlassian.com/maven-external

この例では、ユーザー設定 (config set) でリポジトリーが設定されており、camel run コマンドでプレースホルダー #repos が宣言されているため、camel run によってプレースホルダーが置き換えられ、実行中に両方のリポジトリーが使用されます。設定値を参照する場合、構文は #optionName (例: #repos) であることに注意してください。

注記

プレースホルダー置換は、特定の Camel コマンドが持つ各オプションに対してのみ機能します。camel run --help を使用すると、コマンドが持つすべてのオプションを確認できます。

第6章 Camel Spring Boot での Camel CLI の使用

6.1. Camel CLI のインストール

前提条件

  1. JBang がマシンにインストールされている必要があります。JBang をダウンロードしてインストールする方法は、手順 を参照してください。

JBang をインストールした後、コマンドシェルから次のコマンドを実行して、JBang が動作していることを確認できます。

jbang version

これにより、インストールされている JBang のバージョンが出力されます。

手順

  1. オプション: Camel CLI の以前のバージョンをアンインストールします。

    jbang app uninstall camel
  2. 次のコマンドを実行して、Camel CLI アプリケーションをインストールします。

    jbang app install -Dcamel.jbang.version=4.8.2 camel@apache/camel

製品の camel バージョンと一致する camel.jbang.version を使用する

これにより、Apache Camel が JBang 内に camel コマンドとしてインストールされます。これは、camel コマンドを実行するだけでコマンドラインから Camel を実行できることを意味します。

6.2. Camel CLI の使用

Camel CLI は複数のコマンドをサポートしています。camel help コマンドを使用すると、使用可能なすべてのコマンドを表示できます。

camel --help
注記

このコマンドを初めて実行するときは、依存関係がキャッシュされるため、実行に数秒余分に時間がかかる場合があります。すでに JBang を使用していて、Exception in thread "main" java.lang.NoClassDefFoundError: "org/apache/camel/dsl/jbang/core/commands/CamelJBangMain" での例外などのエラーが発生した場合は、JBang キャッシュをクリアして再試行し、インストールし直してください。

すべてのコマンドは --help をサポートし、フラグが指定されている場合に適切なヘルプを表示します。

6.2.1. Camel CLI のユーザー設定

Camel CLI の config コマンドは、ユーザー設定を保存および使用するために使用します。これにより、毎回 CLI オプションを指定する必要がなくなります。たとえば、別の Camel バージョンを実行するには、次を使用します。

camel run * --camel-version=4.8.3.redhat-00004

camel-version は次のようなユーザー設定に追加できます。

camel config set camel-version=4.8.3.redhat-00004

これは、camel run コマンドの使用時に使用される Camel バージョンを設定します。以下の run コマンドはユーザー設定を使用します。

camel run *

ユーザー設定ファイルは ~/.camel-jbang-user.properties に保存されます。

6.2.2. シェル補完の有効化

Camel CLI は、すぐに bash および zsh のシェル補完を提供します。Camel CLI のシェル補完を有効にするには、次を実行します。

source <(camel completion)

これを永続的にするには、次を実行します。

echo 'source <(camel completion)' >> ~/.bashrc

6.3. Camel ルートの作成と実行

init コマンドを使用して、新しい基本ルートを作成できます。たとえば、XML ルートを作成するには、次のコマンドを実行します。

camel init cheese.xml

これにより、サンプルルートを含むファイル cheese.xml (現在のディレクトリー内) が作成されます。

ファイルを実行するには、次のコマンドを実行します。

camel run --camel-version=4.8.3.redhat-00004 cheese.xml
注記

Camel では、YAML、XML、Java、Groovy など、サポートされている DSL を作成して実行できます。

新しい .java ルートを作成するには、次を実行します。

camel init foo.java

init コマンドを使用すると、Camel はデフォルトで現在のディレクトリーにファイルを作成します。ただし、--directory オプションを使用すると、指定したディレクトリーにファイルを作成できます。たとえば、foobar という名前のフォルダーに作成するには、次を実行します。

camel init foo.java --directory=foobar
注記

--directory オプションを使用すると、このディレクトリーがすでに存在する場合、Camel は自動的に削除します。

6.3.1. 複数のファイルからのルート実行

たとえば、2 つの YAML ファイルを実行するなど、複数のファイルからルートを実行できます。

camel run --camel-version=4.8.3.redhat-00004 one.yaml two.yaml

yaml と Java などの 2 つの異なるファイルからルートを実行できます。

camel run --camel-version=4.8.3.redhat-00004 one.yaml hello.java

ワイルドカード (つまり *) を使用して、すべての yaml ファイルを実行するなど、複数のファイルに一致させることができます。

camel run --camel-version=4.8.3.redhat-00004 *.yaml

foo* で始まるすべてのファイルを実行できます。

camel run --camel-version=4.8.3.redhat-00004 foo*

ディレクトリー内のすべてのファイルを実行するには、次を使用します。

camel run --camel-version=4.8.3.redhat-00004 *
注記

run ゴールは、application.properties などの properties のあるファイルも検出できます。

6.3.2. 入力パラメーターからのルート実行

非常に小さな Java ルートの場合、以下に示すように、ルートを CLI 引数として指定できます。

camel run --code='from("kamelet:beer-source").to("log:beer")'

CLI 引数はファイルよりも使用が少し面倒であるため、これは非常に制限されています。入力パラメーターからルートを実行する場合は、以下の点に留意してください。

  • Java DSL コードのみがサポートされています。
  • コードは一重引用符で囲まれているため、Java DSL では二重引用符を使用できます。
  • コードは、端末および JBang から提供できるリテラル値に制限されます。
  • すべてのルートは単一の --code パラメーターで定義する必要があります。
注記

--code の使用は、非常に迅速で小規模なプロトタイプにのみ使用できます。

6.3.3. ライブリロードを備えた開発モード

次に示すように --dev オプションを使用して、ソースファイルの更新 (保存) 時にルートのライブリロードに伴う開発モードを有効にできます。

camel run foo.yaml --dev

Camel インテグレーションの実行中に、YAML ルートを更新し、保存時に更新できます。このオプションは、java を含むすべての DLS で機能します。次に例を示します。

camel run hello.java --dev
注記

ライブリロードオプションは開発目的のみを目的としており、JVM クラスのロードの問題など、リロードに関する問題が発生した場合は、インテグレーションを再起動する必要がある場合があります。

6.3.4. 開発者コンソール

開発者にさまざまな情報を表示する開発者コンソールを有効にすることができます。開発者コンソールを有効にするには、次を実行します。

camel run hello.java --console

これにより、Web ブラウザーから http://localhost:8080/q/dev (デフォルト) にあるコンソールにアクセスできるようになります。このリンクは、Camel の起動時にログにも表示されます。

コンソールでは、メッセージの処理に最も時間がかかる上位ルートのレポートなど、実行中の Camel インテグレーションに関する洞察を得ることができます。その後、これらのルート内で最も時間がかかっている EIP を個別に特定できます。

開発者コンソールはデータを JSON 形式で出力することもでき、サードパーティーのツールで情報を取得するために使用できます。たとえば、curl 経由で上位のルートを出力するには、次を実行します。

curl -s -H "Accept: application/json"  http://0.0.0.0:8080/q/dev/top/

JSON データをカラーでフォーマットして出力できる jq がインストールされている場合は、次を実行します。

curl -s -H "Accept: application/json"  http://0.0.0.0:8080/q/dev/top/ | jq

6.3.5. プロファイルの使用

Camel CLI の profile は Camel CLI で自動的にロードされる設定を参照する名前 (ID) です。デフォルトのプロファイルは、application という名前が付けられ、これは (スマートデフォルト) で Camel CLI が application.properties (存在する場合) を自動的にロードできるようにします。これは、同じ名前の特定のプロパティーファイルに一致するプロファイルを作成できることを意味します。

たとえば、local という名前のプロファイルを使用して実行すると、Camel CLI は application.properties の代わりに local.properties をロードします。プロファイルを使用するには、次のようにコマンドラインオプション --profile を指定します。

camel run hello.java --profile=local

一度に指定できるプロファイル名は 1 つだけです。たとえば、--profile=local,two は無効です。

properties ファイルでは、Camel Main のすべての設定を行えます。ログマスキングをオフにして有効にするには、次のコマンドを実行します。

camel.main.streamCaching=false
camel.main.logMask=true

また、camel-kafka などの Camel コンポーネントを設定して、URL をブローカーに宣言することもできます。

camel.component.kafka.brokers=broker1:9092,broker2:9092,broker3:9092
注記

camel.jbang で始まるキーは、Camel CLI によって内部的に使用される予約キーであり、Camel CLI コマンドの引数を事前に設定できます。

6.3.6. インターネット経由での JAR のダウンロード

デフォルトでは、Camel CLI は Camel の実行に必要な依存関係を自動的に解決します。これは、JBang と Camel によってそれぞれ実行されます。Camel 自体は、クラスパス上で現在利用できない JAR がコンポーネントに必要かどうかを実行時に検出し、JAR を自動的にダウンロードできます。

Camel はこれらの JAR を次の順序でダウンロードします。

  1. ~/.m2/repository のローカルディスク
  2. インターネット上の Maven Central
  3. インターネット上のカスタムサードパーティー Maven リポジトリー
  4. ~/.m2/settings.xml のアクティブなプロファイル、または --maven-settings オプションを使用して指定された設定ファイルにあるすべてのリポジトリー

Camel CLI をインターネット経由でダウンロードしない場合は、次のように --download オプションを使用してこれをオフにできます。

camel run foo.java --download=false

6.3.7. カスタム JAR の追加

Camel CLI は、独自のリリースからの Camel コンポーネント、言語、データ形式の依存関係を自動的に検出します。これは、使用する JAR を指定する必要がないことを意味します。ただし、サードパーティーのカスタム JAR を追加する必要がある場合は、次のように、Maven GAV 構文 (groupId:artifactId:version) の CLI 引数として --dep を使用してこれらを指定できます。

camel run foo.java --dep=com.foo:acme:1.0
To add a Camel dependency explicitly you can use a shorthand syntax (starting with `camel:` or `camel-`):
camel run foo.java --dep=camel-saxon

複数の依存関係をコンマで区切って指定できます。

camel run foo.java --dep=camel-saxon,com.foo:acme:1.0

6.3.8. サードパーティーの Maven リポジトリーの使用

Camel CLI は、まずローカルリポジトリーからダウンロードし、次にオンラインの Maven Central リポジトリーからダウンロードします。サードパーティーの Maven リポジトリーからダウンロードするには、これを CLI 引数として、または application.properties ファイルで指定する必要があります。

camel run foo.java --repos=https://packages.atlassian.com/maven-external
注記

複数のリポジトリーをコンマで区切って指定できます。

サードパーティーの Maven リポジトリーの設定は、次に示すように、camel.jbang.repos キーを使用して application.properties ファイルで設定されます。

camel.jbang.repos=https://packages.atlassian.com/maven-external

Camel ルートを実行すると、application.properties が自動的に読み込まれます。

camel run foo.java

使用するプロパティーファイルを明示的に指定することもできます。

camel run foo.java application.properties

または、これをプロファイルとして指定することもできます。

camel run foo.java --profile=application

ここで、プロファイル ID はプロパティーファイルの名前です。

6.3.9. Maven の使用設定

デフォルトでは、既存の ~/.m2/settings.xml ファイルがロードされるため、Maven 解決プロセスの動作を変更することができます。Maven 設定ファイルは、Maven ミラー、認証情報設定 (暗号化される可能性がある)、またはアクティブなプロファイル、および追加のリポジトリーに関する情報を提供します。

Maven リポジトリーは認証を使用でき、Maven で認証情報を設定するには <server> 要素を使用します。

<server>
    <id>external-repository</id>
    <username>camel</username>
    <password>{SSVqy/PexxQHvubrWhdguYuG7HnTvHlaNr6g3dJn7nk=}</password>
</server>

パスワードはプレーンテキストを使用して指定できますが、最初に Maven マスターパスワードを設定してから、それを使用してリポジトリーパスワードを設定することを推奨します。

$ mvn -emp
Master password: camel
{hqXUuec2RowH8dA8vdqkF6jn4NU9ybOsDjuTmWvYj4U=}

上記のパスワードは、次のように ~/.m2/settings-security.xml ファイルに追加する必要があります。

<settingsSecurity>
  <master>{hqXUuec2RowH8dA8vdqkF6jn4NU9ybOsDjuTmWvYj4U=}</master>
</settingsSecurity>

その後、通常のパスワードを設定できます。

$ mvn -ep
Password: camel
{SSVqy/PexxQHvubrWhdguYuG7HnTvHlaNr6g3dJn7nk=}

その後、このパスワードを <server>/<password> 設定で使用できます。

デフォルトでは、Maven は ~/.m2/settings-security.xml ファイルからマスターパスワードを読み取りますが、これをオーバーライドすることもできます。settings.xml ファイル自体の場所は、次のように指定できます。

camel run foo.java --maven-settings=/path/to/settings.xml --maven-settings-security=/path/to/settings-security.xml

場所 (~/.m2/settings.xml であっても) を想定せずに Camel アプリケーションを実行したい場合は、このオプションを使用します。

camel run foo.java --maven-settings=false

6.3.10. GitHub でホストされているルートの実行

Camels リソースローダーを使用して、GitHub でホストされているルートを実行できます。たとえば、Camel K サンプルの 1 つを実行するには、次を使用します。

camel run github:apache:camel-kamelets-examples:jbang/hello-java/Hey.java

GitHub の https URL を使用することもできます。たとえば、Web ブラウザーからサンプルを参照し、ブラウザーウィンドウから URL をコピーして、Camel CLI でサンプルを実行できます。

camel run https://github.com/apache/camel-kamelets-examples/tree/main/jbang/hello-java

すべての groovy ファイルを実行するなど、ワイルドカード (つまり \*) を使用して複数のファイルと一致させることもできます。

camel run https://github.com/apache/camel-kamelets-examples/tree/main/jbang/languages/*.groovy

または、rou* で始まるすべてのファイルを実行することもできます。

camel run https://github.com/apache/camel-kamelets-examples/tree/main/jbang/languages/rou*
6.3.10.1. GitHub Gist からのルート実行

GitHub の要点を使用すると、簡単に実行できる小さな Camel ルートを共有する簡単な方法です。たとえば、Gist を実行するには、次を使用します。

camel run https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92

Gist には 1 つ以上のファイルを含めることができ、Camel CLI はすべての関連ファイルを収集するため、Gist には複数のルート、プロパティーファイル、および Java Bean を含めることができます。

6.3.11. GitHub でホストされているルートのダウンロード

Camel CLI を使用すると、既存のサンプルを GitHub からローカルディスクにダウンロードできます。これにより、サンプルを変更してローカルで実行できるようになります。たとえば、次のコマンドを実行して dependency injection 例をダウンロードできます。

camel init https://github.com/apache/camel-kamelets-examples/tree/main/jbang/dependency-injection

次に、ファイル (サブフォルダーではなく) が現在のディレクトリーにダウンロードされます。次に、次のようにしてサンプルをローカルで実行できます。

camel run *

--directory オプションを使用してファイルを新しいフォルダーにダウンロードすることもできます。たとえば、ファイルを myproject という名前のフォルダーにダウンロードするには、次のコマンドを実行します。

camel init https://github.com/apache/camel-kamelets-examples/tree/main/jbang/dependency-injection --directory=myproject
注記

--directory オプションを使用すると、このディレクトリーがすでに存在する場合、Camel は自動的に削除します。

この例を開発モードで実行して、ソースコードの変更をホットデプロイすることができます。

camel run * --dev

単一のファイルをダウンロードできます。たとえば、Camel K サンプルの 1 つをダウンロードするには、次を実行します。

camel init https://github.com/apache/camel-k-examples/blob/main/generic-examples/languages/simple.groovy

これは素晴らしいルートで、次のように実行できます (または * を使用します)。

camel run simple.groovy
6.3.11.1. GitHub Gist からのルートのダウンロード

次のように Gist からファイルをダウンロードできます。

camel init https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92

これにより、ファイルがローカルディスクにダウンロードされ、後で実行できるようになります。

camel run *

--directory オプションを使用して新しいフォルダーにダウンロードできます。たとえば、foobar という名前のフォルダーにダウンロードするには、次のコマンドを実行します。

camel init https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92 --directory=foobar
注記

--directory オプションを使用すると、このディレクトリーがすでに存在する場合、Camel は自動的に削除します。

6.3.12. Camel K インテグレーションまたはバインディングの実行

Camel は、CRD 形式 (Kubernetes カスタムリソース定義) の Camel K インテグレーションとバインディングファイルの実行をサポートしています。たとえば、joke.yaml という名前の kamelet バインディングファイルを実行するには、次のようにします。

#!/usr/bin/env jbang camel@apache/camel run
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: joke
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1
      name: chuck-norris-source
    properties:
      period: 2000
  sink:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1
      name: log-sink
    properties:
      show-headers: false
camel run joke.yaml

6.3.13. クリップボードから実行

Camel ルートは OS クリップボードから直接実行できます。これにより、コードをコピーして、ルートをすぐに実行できます。

camel run clipboard.<extension>

ここで、<extension> は、クリップボードのコンテンツのタイプ (javaxmlyaml など) です。

たとえば、これをクリップボードにコピーして、ルートを実行できます。

<route>
  <from uri="timer:foo"/>
  <log message="Hello World"/>
</route>
camel run clipboard.xml

6.3.14. ローカルの Camel インテグレーションの制御

現在実行中の Camel インテグレーションをリスト表示するには、ps オプションを使用します。

camel ps
  PID   NAME                          READY  STATUS    AGE
 61818  sample.camel.MyCamelApplica…   1/1   Running  26m38s
 62506  test1                          1/1   Running   4m34s

これには、PID、インテグレーションの名前、経過時間がリストされます。

stop コマンドを使用すると、これらの実行中の Camel インテグレーションを停止できます。たとえば、test1 を停止するには、次を実行します。

camel stop test1
Stopping running Camel integration (pid: 62506)

PID を使用してインテグレーションを停止できます。

camel stop 62506
Stopping running Camel integration (pid: 62506)
注記

stop コマンドは入力で始まるインテグレーションと一致するため、フルネームを入力する必要はありません。たとえば、camel stop t と入力すると、t で始まるすべてのインテグレーションを停止できます。

すべてのインテグレーションを停止するには、次のように --all オプションを使用します。

camel stop --all
Stopping running Camel integration (pid: 61818)
Stopping running Camel integration (pid: 62506)

6.3.15. Spring Boot と Quarkus のインテグレーションの制御

Camel CLI は、デフォルトでは、CLI を使用して実行されている Camel インテグレーション (camel run foo.java など) のみを制御します。

CLI が Spring Boot または Quarkus アプリケーションを制御および管理できるようにするには、これらのプロジェクトに依存関係を追加して Camel CLI とインテグレーションする必要があります。

Spring Boot

Spring Boot アプリケーションに、次の依存関係を追加します。

<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-cli-connector-starter</artifactId>
</dependency>

Quarkus

Quarkus アプリケーションに、次の依存関係を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-cli-connector</artifactId>
</dependency>

6.3.16. Camel インテグレーションのステータスの取得

Camel CLI の get コマンドは、稼働中の Camel インテグレーションの 1 つまたはすべてに関する Camel 固有のステータスを取得するために使用されます。実行中の Camel インテグレーションの状態を表示するには、以下を実行します。

camel get
  PID   NAME      CAMEL            PLATFORM            READY  STATUS    AGE    TOTAL  FAILED  INFLIGHT  SINCE-LAST
 61818  MyCamel   4.8.0-SNAPSHOT  Spring Boot v2.7.3   1/1   Running  28m34s    854       0         0     0s/0s/-
 63051  test1     4.8.0-SNAPSHOT  JBang                1/1   Running     18s     14       0         0     0s/0s/-
 63068  mygroovy  4.8.0-SNAPSHOT  JBang                1/1   Running      5s      2       0         0     0s/0s/-

camel get コマンドは、デフォルトのインテグレーションを表示します。これは、camel get integrations コマンドまたは camel get int コマンドの入力と同じです。

これにより、すべての Camel インテグレーションに関する全体的な情報が表示されます。ここでは、処理されたメッセージの合計数を確認できます。列 Since Last は、3 つのステージ (started/completed/failed) の最後の処理済みメッセージの前に時間を示します。

0s/ 0s/- の値は、最後に開始および完了したメッセージが発生したこと (0 秒前)、および失敗したメッセージがまだないことを意味します。この例では、9s/9s/1h3m は、最後に開始および完了したメッセージが 9 秒前に、最後の失敗は 1 時間、3 分前であることを意味します。

camel get route を使用したすべてのローカル Camel インテグレーションから、すべてのルートのステータスを確認することもできます。

camel get route
  PID   NAME      ID      FROM                        STATUS    AGE   TOTAL  FAILED  INFLIGHT  MEAN  MIN  MAX  SINCE-LAST
 61818  MyCamel   hello   timer://hello?period=2000   Running  29m2s    870       0         0     0    0   14     0s/0s/-
 63051  test1      java    timer://java?period=1000    Running    46s     46       0         0     0    0    9     0s/0s/-
 63068  mygroovy  groovy  timer://groovy?period=1000  Running    34s     34       0         0     0    0    5     0s/0s/-
注記

camel get --help を使用して、利用可能なすべてのコマンドを表示します。

6.3.16.1. Camel インテグレーションの Top ステータス

camel top コマンドは、実行中の Camel インテグレーションの使用率の統計値(最大使用率の低いメモリー)を取得するために使用されます。

camel top
  PID   NAME     JAVA     CAMEL            PLATFORM            STATUS    AGE         HEAP        NON-HEAP     GC     THREADS   CLASSES
 22104  chuck    11.0.13  4.8.0-SNAPSHOT  JBang               Running   2m10s  131/322/4294 MB  70/73 MB  17ms (6)      7/8  7456/7456
 14242  MyCamel  11.0.13  4.8.0-SNAPSHOT  Spring Boot v2.7.3  Running  33m40s  115/332/4294 MB  62/66 MB  37ms (6)    16/16  8428/8428
 22116  bar      11.0.13  4.8.0-SNAPSHOT  JBang               Running    2m7s   33/268/4294 MB  54/58 MB  20ms (4)      7/8  6104/6104

HEAP 列には、ヒープメモリー (used/committed/max) とヒープ以外 (used/committed) が表示されます。GC 列には、ガベージコレクション情報 (時間と合計実行数) が表示されます。CLASSES 列には、クラスの数 (ロード/合計) が表示されます。

また、すべてのローカル Camel と camel top route から、各ルートの最高パフォーマンスのルート (平均処理時間の最高から最低まで) を確認することもできます。

camel top route
  PID   NAME     ID                     FROM                                 STATUS    AGE    TOTAL  FAILED  INFLIGHT  MEAN  MIN  MAX  SINCE-LAST
 22104  chuck    chuck-norris-source-1  timer://chuck?period=10000           Started     10s      1       0         0   163  163  163          9s
 22116  bar      route1                 timer://yaml2?period=1000            Started      7s      7       0         0     1    0   11          0s
 22104  chuck    chuck                  kamelet://chuck-norris-source        Started     10s      1       0         0     0    0    0          9s
 22104  chuck    log-sink-2             kamelet://source?routeId=log-sink-2  Started     10s      1       0         0     0    0    0          9s
 14242  MyCamel  hello                  timer://hello?period=2000            Started  31m41s    948       0         0     0    0    4          0s
注記

使用可能なすべてのコマンドを表示するには、camel top --help を使用します。

6.3.16.2. ルートの開始と停止

Camel cmd は、実行中の Camel インテグレーションでさまざまなコマンド (ルートを開始および停止するコマンドなど) を実行するために使用されます。

chuck インテグレーション内のすべてのルートを停止するには、次を実行します。

camel cmd stop-route chuck

その後、chuck インテグレーションのステータスが Stopped に変更されます。

camel get route
  PID   NAME     ID                     FROM                                 STATUS    AGE   TOTAL  FAILED  INFLIGHT  MEAN  MIN  MAX  SINCE-LAST
 81663  chuck    chuck                  kamelet://chuck-norris-source        Stopped           600       0         0     0    0    1          4s
 81663  chuck    chuck-norris-source-1  timer://chuck?period=10000           Stopped           600       0         0    65   52  290          4s
 81663  chuck    log-sink-2             kamelet://source?routeId=log-sink-2  Stopped           600       0         0     0    0    1          4s
 83415  bar      route1                 timer://yaml2?period=1000            Started  5m30s    329       0         0     0    0   10          0s
 83695  MyCamel  hello                  timer://hello?period=2000            Started  3m52s    116       0         0     0    0    9          1s

ルートを開始するには、次を実行します。

camel cmd start-route chuck

すべての Camel 統合の all ルートを停止するには、次のように --all フラグを使用します。

camel cmd stop-route --all

all ルートを開始するには、次を使用します。

camel cmd start-route --all
注記

コンマを使用して ID を区切ることにより、1 つ以上のルートを停止できます (例: Camel cmd start-route --id=route1,hello)。詳細は、camel cmd start-route --help コマンドを使用してください。

6.3.16.3. ログレベルの設定

実行中の Camel 統合の現在のログレベルは、次の方法で確認できます。

camel cmd logger
  PID   NAME   AGE   LOGGER  LEVEL
 90857  bar   2m48s  root    INFO
 91103  foo     20s  root    INFO

ログレベルは実行時に変更できます。たとえば、foo のレベルを DEBUG に変更するには、次を実行します。

camel cmd logger --level=DEBUG foo
注記

--all を使用すると、実行中のすべての統合のログレベルを変更できます。

6.3.16.4. サービスの一覧表示

一部の Camel インテグれションは、REST、SOAP-WS、または TCP プロトコルを使用したソケットレベルのサービスなど、クライアントが呼び出すことができるサービスをホストする場合があります。以下の例に示すように、利用可能なサービスをリストできます。

camel get service
 PID   NAME       COMPONENT      PROTOCOL  SERVICE
 1912  netty      netty          tcp       tcp:localhost:4444
 2023  greetings  platform-http  rest      http://0.0.0.0:7777/camel/greetings/{name} (GET)
 2023  greetings  platform-http  http      http://0.0.0.0:7777/q/dev

ここでは、2 つの Camel インテグレーションを確認できます。Netty インテグレーションは、ポート 4444 で利用可能な TCP サービスをホストします。他の Camel インテグレーションは、GET 経由でのみ呼び出すことができる REST サービスをホストします。3 番目のインテグレーションには、埋め込み Web コンソールが付属します (--console オプションで開始)。

注記

サービスをリストに掲載するには、Camel コンポーネントが Camel Console を使用してサービスをアドバタイズできる必要があります。

6.3.16.4.1. サーキットブレーカーのリスト状態

Camel インテグレーションで Circuit Breaker を使用する場合は、次のように Camel CLI を使用してブレーカーのステータスを出力できます。

camel get circuit-breaker
  PID   NAME  COMPONENT     ROUTE   ID               STATE      PENDING  SUCCESS  FAIL  REJECT
 56033  mycb  resilience4j  route1  circuitBreaker1  HALF_OPEN        5        2     3       0

ここでは、サーキットブレーカーの状態が half open、つまり障害が減少し始めた場合にブレーカーの状態が closed に移行しようとしていることが分かります。

注記

watch オプションを指定してコマンドを実行すると、最新の状態を表示できます (例: watch camel get circuit-breaker)。

6.3.17. パイプを使用したターミナルからのスクリプト作成

Camel CLI ファイルは、パイプとフィルターを使用したターミナルスクリプトに使用するスクリプトとして実行できます。

注記

スクリプトが実行されるたびに、JVM が Camel で起動されます。これはそれほど高速なわけでも、メモリー使用量が少ないわけでもないため、たとえば、多くの Camel コンポーネントまたは Kamelet を使用して、異種の IT システムからデータをより簡単に送受信するためには、Camel CLI ターミナルスクリプトを使用してください。

これには、たとえば、以下の upper.yaml ファイルのように、ファイルの先頭に次の行を追加する必要があります。

///usr/bin/env jbang --quiet camel@apache/camel pipe "$0" "$@" ; exit $?

# Will upper-case the input
- from:
    uri: "stream:in"
    steps:
      - setBody:
          simple: "${body.toUpperCase()}"
      - to: "stream:out"

これをスクリプトとして実行するには、ファイル実行権限を設定する必要があります。

chmod +x upper.yaml

次に、これをスクリプトとして実行できます。

echo "Hello\nWorld" | ./upper.yaml

これにより次の出力が出力されます。

HELLO
WORLD

--logging=true を使用してログをオンにすると、.camel-jbang/camel-pipe.log ファイルにログが記録されます。ログファイルの名前は設定できません。

echo "Hello\nWorld" | ./upper.yaml --logging=true
6.3.17.1. stream:in の line モードと raw モードでの使用

stream:in を使用して System in からデータを読み取る場合、Stream Component は、2 つのモードで動作します。

  • 行モード (デフォルト) - 入力を単一行 (改行で区切られた) として読み取ります。メッセージ本文は String です。
  • raw モード - ストリームの終わり までストリーム全体を読み取ります。メッセージ本文は byte[] です。
注記

デフォルトモードは、ストリームコンポーネントが歴史的にどのように作成されたかによるものです。したがって、raw モードを使用するには、stream:in?readLine=false を設定することを推奨します。

6.3.18. ローカル Kamelet の実行

Camel CLI を使用すると、GitHub で公開したり、jar にパッケージ化したりすることなく、ローカルの Kamelet を試すことができます。

camel run --local-kamelet-dir=/path/to/local/kamelets earthquake.yaml
注記

kamelet がローカルファイルシステムからのものである場合、Camel CLI を --dev モードで実行すると、更新されていればライブリロードできます。

GitHub リポジトリー内のフォルダーを指定することもできます。以下に例を示します。

camel run --local-kamelet-dir=https://github.com/apache/camel-kamelets-examples/tree/main/custom-kamelets user.java
注記

kamelet が GitHub からロードされた場合、ライブリロードはできません。

6.3.19. platform-http コンポーネントの使用

ルートが platform-http から開始すると、Camel CLI にはポート 8080 で実行されている VertX HTTP サーバーが自動的に組み込まれます。次の例は、server.yaml という名前のファイル内のルートを示しています。

- from:
    uri: "platform-http:/hello"
    steps:
      - set-body:
          constant: "Hello World"

この例は次のように実行できます。

camel run server.yaml

次に、次のようにして HTTP サービスを呼び出します。

$ curl http://localhost:8080/hello
Hello World%

6.3.20. Java Bean とプロセッサーの使用

通常の Java ソースファイルを Camel ルートとともに含める基本サポートがあり、Camel CLI ランタイムに Java ソースをコンパイルさせます。これは、アプリケーションに必要な小さなユーティリティークラス、POJO、Camel プロセッサーを含めることができることを意味します。

注記

Java ソースファイルではパッケージ名を使用できません。

6.3.21. Java クラスでの依存関係の注入

Camel-jbang を使用して Camel 統合を実行する場合、ランタイムは Camel-main ベースになります。これは、Spring Boot または Quarkus が利用できないことを意味します。ただし、Java クラスでのアノテーションベースの依存関係注入の使用はサポートされています。

6.3.21.1. Spring Boot 依存関係インジェクションの使用

次の Spring Boot アノテーションを使用できます。

  • クラスレベルで @org.springframework.stereotype.Component または @org.springframework.stereotype.Service を使用して、クラスのインスタンスを作成し、Registry に登録します。
  • @org.springframework.beans.factory.annotation.Autowired を使用して、クラスフィールドに Bean を依存関係に注入します。@org.springframework.beans.factory.annotation.Qualifier を使用して Bean ID を指定できます。
  • @org.springframework.beans.factory.annotation.Value: プロパティープレースホルダー を注入します。(application.properties で定義されたプロパティーなど。)
  • メソッドの @org.springframework.context.annotation.Bean を呼び出して Bean を作成します。

6.3.22. デバッグ

利用可能なデバッグには次の 2 種類があります。

  • Java debugging - Java コードのデバッグ (標準 Java)
  • Camel route debugging - Camel ルートのデバッグ (Camel ツールプラグインが必要)
6.3.22.1. Java のデバッグ

JBang が提供する --debug フラグを使用して、統合スクリプトをデバッグできます。ただし、JVM の起動時に Java デバッグを有効にするには、次のように、camel の代わりに jbang コマンドを使用します。

jbang --debug  camel@apache/camel run hello.yaml
Listening for transport dt_socket at address: 4004

ご覧のとおり、デフォルトのリスニングポートは 4004 ですが、JBang debugging で説明されているように設定できます。

これは標準の Java デバッグソケットです。その後、選択した IDE を使用できるようになります。Processor を追加して、(ルート定義の作成とは対照的に) ルートの実行中にヒットするブレークポイントを設定できます。

6.3.22.2. Camel ルートのデバッグ

Camel ルートデバッガーはデフォルトで利用可能です (camel-debug コンポーネントはクラスパスに自動的に追加されます)。デフォルトでは、URL service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel で JMX を介してアクセスできます。その後、選択した統合開発環境 (IDE) を使用できるようになります。

6.3.23. ヘルスチェック

ヘルスチェックのステータスには、次のように CLI から Camel CLI を使用してアクセスします。

camel get health
  PID   NAME    AGE  ID             RL  STATE  RATE    SINCE   MESSAGE
 61005  mybind   8s  camel/context   R   UP    2/2/-  1s/3s/-

ここでは Camel が UP しているのがわかります。アプリケーションは 8 秒間実行されており、2 つのヘルスチェックが呼び出されています。

出力には、チェックの default レベルが次のように表示されます。

  • CamelContext ヘルスチェック
  • コンポーネント固有のヘルスチェック (camel-kafkacamel-aws など)
  • カスタムヘルスチェック
  • UP ではないチェック

RATE 列には、/ で区切られた 3 つの数字が表示されます。したがって、2/2/- は合計 2 つのチェック、2 つは成功し、失敗はなしということを意味します。最後の 2 つの列は、この数値が成功または失敗した連続チェックの数であるため、ヘルスチェックの状態が変化するとリセットされます。したがって、ヘルスチェックが失敗し始めると、数値は次のようになります。

camel get health
  PID   NAME     AGE   ID             RL  STATE   RATE    SINCE    MESSAGE
 61005  mybind   3m2s  camel/context   R   UP    77/-/3  1s/-/17s  some kind of error

ここでは、数値が 77/-/3 に変更されていることがわかります。つまり、チェックの合計数は 77 になります。成功はありませんが、チェックは 3 回連続で失敗しています。SINCE 列は RATE に対応します。したがって、この場合、最後のチェックは 1 秒前であり、チェックは 17 秒連続で失敗していることがわかります。

--level=full を使用すると、コンシューマーおよびルートレベルのチェックも含むすべてのヘルスチェックを出力できます。

ヘルスチェックは、--trace フラグを使用して表示できる例外が出力されたために失敗することがよくあります。

camel get health --trace
  PID   NAME      AGE   ID                                      RL  STATE    RATE       SINCE     MESSAGE
 61038  mykafka  6m19s  camel/context                            R   UP    187/187/-  1s/6m16s/-
 61038  mykafka  6m19s  camel/kafka-consumer-kafka-not-secure…   R  DOWN   187/-/187  1s/-/6m16s  KafkaConsumer is not ready - Error: Invalid url in bootstrap.servers: value


------------------------------------------------------------------------------------------------------------------------
                                                       STACK-TRACE
------------------------------------------------------------------------------------------------------------------------
    PID: 61038
    NAME: mykafka
    AGE: 6m19s
    CHECK-ID: camel/kafka-consumer-kafka-not-secured-source-1
    STATE: DOWN
    RATE: 187
    SINCE: 6m16s
    METADATA:
        bootstrap.servers = value
        group.id = 7d8117be-41b4-4c81-b4df-cf26b928d38a
        route.id = kafka-not-secured-source-1
        topic = value
    MESSAGE: KafkaConsumer is not ready - Error: Invalid url in bootstrap.servers: value
    org.apache.kafka.common.KafkaException: Failed to construct kafka consumer
        at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:823)
        at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:664)
        at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:645)
        at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:625)
        at org.apache.camel.component.kafka.DefaultKafkaClientFactory.getConsumer(DefaultKafkaClientFactory.java:34)
        at org.apache.camel.component.kafka.KafkaFetchRecords.createConsumer(KafkaFetchRecords.java:241)
        at org.apache.camel.component.kafka.KafkaFetchRecords.createConsumerTask(KafkaFetchRecords.java:201)
        at org.apache.camel.support.task.ForegroundTask.run(ForegroundTask.java:123)
        at org.apache.camel.component.kafka.KafkaFetchRecords.run(KafkaFetchRecords.java:125)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
    Caused by: org.apache.kafka.common.config.ConfigException: Invalid url in bootstrap.servers: value
        at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:59)
        at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:48)
        at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:730)
        ... 13 more

ここでは、無効な設定 (Invalid url in bootstrap.servers: value) による org.apache.kafka.common.config.ConfigException が原因でヘルスチェックが失敗していることがわかります。

注記

さまざまなオプションをすべて表示するには、camel get health --help を使用します。

6.4. 利用可能な Camel コンポーネントのリスト

Camel には、すぐに使える次のような多くのアーティファクトが付属しています。

  • コンポーネント
  • データ形式
  • 表現言語
  • その他のコンポーネント
  • Kamelets

Camel CLI を使用すると、camel catalog コマンドを使用して Camel が提供するものをリストできます。たとえば、すべてのコンポーネントをリストするには、次のようにします。

camel catalog components

利用可能な Kamelet を確認するには以下を実行します。

camel catalog kamelets
ヒント

使用可能なすべてのコマンドを表示するには、camel catalog --help を使用します。

6.4.1. コンポーネントのドキュメントの表示

doc のゴールでは、すべてのコンポーネント、データ形式、Kamelet の簡単なドキュメントを表示できます。たとえば、kafka コンポーネントを確認するには、次を実行します。

camel doc kafka
注記

Camel CLI はこの情報に直接アクセスできず、コンポーネントの基本的な説明しか表示できませんが、すべての設定オプションの表が含まれているため、このドキュメントは Web サイトに表示されているような完全なドキュメントではありません。

jackson データ形式のドキュメントを参照するには:

camel doc jackson

まれに、同じ名前のコンポーネントとデータ形式が存在し、doc の目標によってコンポーネントが優先されることがあります。このような状況では、次のように名前の前にデータ形式を付けることができます。

camel doc dataformat:thrift

次のような kamelet ドキュメントも参照できます。

camel doc aws-kinesis-sink
注記

サポートされている Kamelet のリストは、サポートされている Kamelet を参照してください。

6.4.1.1. Camel Web サイトからのオンラインドキュメントの参照

doc コマンドを使用すると、オンラインドキュメントの Web ブラウザーで url をすばやく開くことができます。たとえば、kafka コンポーネントを参照するには、--open-url を使用します。

camel doc kafka --open-url

これはデータ形式、言語、kamelet にも機能します。

camel doc aws-kinesis-sink --open-url
注記

オンラインドキュメントへのリンクだけを取得するには、camel doc kafka --url を使用します。

6.4.1.2. 表にリストされているフィルタリングオプション

一部のコンポーネントには多くのオプションがある場合があり、そのような場合は --filter オプションを使用して、名前、説明、またはグループ (producer, security, advanced) のいずれかでフィルターに一致するオプションのみをリスト表示できます。

たとえば、セキュリティー関連のオプションのみをリストするには、次のようにします。

camel doc kafka --filter=security

timeout に関するものだけをリストするには以下を実行します。

camel doc kafka --filter=timeout

6.5. 依存関係のリスト収集

Camel CLI を使用すると、依存関係が自動的に解決します。これは、すべての Camel コンポーネントを依存関係として追加するために Maven や Gradle などのビルドシステムを使用する必要がないことを意味します。

ただし、Camel インテグレーションを実行するにはどのような依存関係が必要かを確認することがあります。dependencies コマンドを使用すると、必要な依存関係を確認できます。コマンド出力では、mvn dependencies:tree などの詳細なツリーは出力されません。出力は、必要な Camel コンポーネントおよびその他の JAR をリストすることを目的としているためです (Kamelet を使用する場合)。

デフォルトでの依存関係出力は、次に示すように、ランタイムとして Camel-main を使用する vanilla Apache Camel です。

camel dependency
org.apache.camel:camel-dsl-modeline:4.8.3
org.apache.camel:camel-health:4.8.3
org.apache.camel:camel-kamelet:4.8.3
org.apache.camel:camel-log:4.8.3
org.apache.camel:camel-rest:4.8.3
org.apache.camel:camel-stream:4.8.3
org.apache.camel:camel-timer:4.8.3
org.apache.camel:camel-yaml-dsl:4.8.3
org.apache.camel.kamelets:camel-kamelets-utils:0.9.3
org.apache.camel.kamelets:camel-kamelets:0.9.3

出力はデフォルトで、GAV 形式 (groupId:artifactId:version) の Maven 依存関係ごとに 1 行になります。

次のように、出力の Maven 形式を指定できます。

camel dependencies --output=maven
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-main</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-dsl-modeline</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-health</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-kamelet</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-log</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-rest</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-stream</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-timer</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-yaml-dsl</artifactId>
    <version>{camel-core-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel.kamelets</groupId>
    <artifactId>camel-kamelets-utils</artifactId>
    <version>0.9.3</version>
</dependency>
<dependency>
    <groupId>org.apache.camel.kamelets</groupId>
    <artifactId>camel-kamelets</artifactId>
    <version>0.9.3</version>
</dependency>

以下に示すように、ターゲットランタイムを quarkus または spring-boot として選択することもできます。

camel dependencies --runtime=spring-boot
org.springframework.boot:spring-boot-starter-actuator:3.1.4
org.springframework.boot:spring-boot-starter-web:3.1.4
org.apache.camel.springboot:camel-spring-boot-engine-starter:4.8.3
org.apache.camel.springboot:camel-dsl-modeline-starter:4.8.3
org.apache.camel.springboot:camel-kamelet-starter:4.8.3
org.apache.camel.springboot:camel-log-starter:4.8.3
org.apache.camel.springboot:camel-rest-starter:4.8.3
org.apache.camel.springboot:camel-stream-starter:4.8.3
org.apache.camel.springboot:camel-timer-starter:4.8.3
org.apache.camel.springboot:camel-yaml-dsl-starter:3.20
org.apache.camel.kamelets:camel-kamelets-utils:0.9.3
org.apache.camel.kamelets:camel-kamelets:0.9.3

6.6. Open API

Camel CLI では、既存の OpenAPI 仕様ファイルがある場合、contract first アプローチを使用して Open API サービスを迅速に公開できます。Camel CLI は、命名規則 direct:<operationId> を使用して、OpenAPI 仕様の各 API エンドポイントを Camel ルートにブリッジします。これにより、特定の操作に対して Camel ルートをより迅速に実装できるようになります。

詳細は、OpenAPI の例 を参照してください。

6.7. トラブルシューティング

JBang を使用すると、状態が ~/.jbang ディレクトリーに保存されます。これは、JBang がダウンロードした JAR を保存する場所でもあります。Camel CLI は、実行中に必要な依存関係もダウンロードします。

ただし、これらの依存関係はローカルの Maven リポジトリー ~/.m2 にダウンロードされます。そのため、Camel CLI の実行中に古い JAR などの問題をトラブルシューティングする場合は、これらのディレクトリーまたはその一部を削除してみてください。

6.8. Camel Spring Boot へのエクスポート

Camel CLI 統合を Spring Boot や Quarkus などの従来の Java ベースのプロジェクトに export できます。Camel CLI を使用してプロトタイプをビルドした後、Java コーディングがさらに必要な従来の Java ベースのプロジェクトが必要な場合、または Spring Boot、Quarkus、もしくは vanilla Camel Main の強力なランタイムを使用する場合に、これを実行するとよいでしょう。

6.8.1. Camel Spring Boot へのエクスポート

コマンド export --runtime=spring-boot は、現在の Camel CLI ファイルを、src/main/ フォルダー構造で編成されたファイルとともに Maven ベースの Spring Boot プロジェクトにエクスポートします。

たとえば、Maven の groupId com.foo と artifactId acme を使用し、バージョン 1.0-SNAPSHOT を使用して Spring Boot にエクスポートするには、次のコマンドを実行します。

camel export --runtime=spring-boot --gav=com.foo:acme:1.0-SNAPSHOT
注記

これにより、current ディレクトリーにエクスポートされます。これは、ファイルが必要なフォルダー構造に移動されることを意味します。

別のディレクトリーにエクスポートするには、次を実行します。

camel export --runtime=spring-boot --gav=com.foo:acme:1.0-SNAPSHOT --directory=../myproject

Spring Boot にエクスポートする場合、pom.xml または build.gradle で定義された Camel バージョンは、Camel CLI が使用するバージョンと同じです。ただし、次のように別の Camel バージョンを指定できます。

camel export --runtime=spring-boot --gav=com.foo:acme:1.0-SNAPSHOT --directory=../myproject --camel-spring-boot-version=4.8.3.redhat-00009

詳細は、camel export --help コマンドを実行して、使用可能なオプションを確認してください。

6.8.2. Camel CLI を含めたエクスポート

Spring Boot、Quarkus、または Camel Main にエクスポートする場合、Camel JBang CLI はそのままでは含まれません。Camel CLI (Camel) を引き続き使用するには、次のように --dep オプションに Camel:cli-connector を追加する必要があります。

camel export --runtime=spring-boot --gav=com.foo:acme:1.0-SNAPSHOT --dep=camel:cli-connector --directory=../myproject

6.8.3. エクスポートの設定

デフォルトでは、export コマンドは application.properties ファイルから設定をロードします。このファイルは、ランタイムや Java バージョンの選択などの特定のパラメーターをエクスポートするために使用されます。

exporting に関連する次のオプションは、application.properties ファイルで設定できます。

オプション説明

camel.jbang.runtime

ランタイム (spring-boot、quarkus、または camel-main)

camel.jbang.gav

Maven group:artifact:version

camel.jbang.dependencies

追加の依存関係 (複数の依存関係を区切るにはコンマを使用します)。詳細は、カスタム JAR の追加 を参照してください。

camel.jbang.classpathFiles

クラスパスに追加する追加ファイル (複数のファイルを区切るにはコンマを使用します)。詳細は、カスタム JAR の追加 を参照してください。

camel.jbang.javaVersion

Java バージョン (11 または 17)

camel.jbang.kameletsVersion

Apache Camel Kamelets のバージョン

camel.jbang.localKameletDir

Kamelets をロードするためのローカルディレクトリー

camel.jbang.camelSpringBootVersion

Spring Boot で使用する Camel バージョン

camel.jbang.springBootVersion

Spring Boot バージョン

camel.jbang.quarkusGroupId

Quarkus Platform Maven groupId

camel.jbang.quarkusArtifactId

Quarkus Platform Maven artifactId

camel.jbang.quarkusVersion

Quarkus Platform バージョン

camel.jbang.mavenWrapper

エクスポートされたプロジェクトに Maven ラッパーファイルを含める

camel.jbang.gradleWrapper

エクスポートされたプロジェクトに Gradle Wrapper ファイルを含める

camel.jbang.buildTool

使用するビルドツール (maven または gradle)

camel.jbang.repos

オンデマンドでダウンロードするための追加の Maven リポジトリー (複数のリポジトリーを区切るにはコンマを使用します)

camel.jbang.mavenSettings

サーバー、リポジトリー、ミラー、プロキシーを設定するための Maven setting.xml ファイルのオプションの場所。false に設定すると、デフォルトの ~/.m2/settings.xml も使用されません。

camel.jbang.mavenSettingsSecurity

settings.xml を復号化するための Maven settings-security.xml ファイルのオプションの場所

camel.jbang.exportDir

プロジェクトがエクスポートされるディレクトリー。

camel.jbang.platform-http.port

--console が有効な場合など、スタンドアロン Camel を実行するときに使用する HTTP サーバーポート (デフォルトではポート 8080)。

camel.jbang.console

スタンドアロン Camel を実行している場合、ローカル HTTP サーバー (デフォルトではポート 8080) 上の /q/dev にある開発者コンソール。

camel.jbang.health

スタンドアロン Camel を実行している場合は、ローカル HTTP サーバー (デフォルトではポート 8080) の /q/health でヘルスチェックを行います。

注記

これらは、export コマンドのオプションです。camel export --help を使用すると、詳細とデフォルト値を確認できます。

6.8.4. 設定

Camel CLI の config コマンドは、ユーザー設定を保存および使用するために使用します。これにより、毎回 CLI オプションを指定する必要がなくなります。たとえば、別の Camel バージョンを実行するには、次を使用します。

camel run * --camel-version=4.8

camel-version は次のようなユーザー設定に追加できます。

camel config set camel-version=4.8

run コマンドはユーザー設定を使用します。

camel run *

ユーザー設定ファイルは ~/.camel-jbang-user.properties に保存されます。

6.8.4.1. 設定と設定解除

すべての Camel CLI オプションはユーザー設定に追加されます。たとえば、次のような単純なプロジェクトをエクスポートするには、以下を実行します。

camel init foo.yaml
camel config set gav=com.foo:acme:1.0-SNAPSHOT
camel config set runtime=spring-boot
camel config set deps=org.apache.camel.springboot:camel-timer-starter
camel config set camel-spring-boot-version=4.8.3.redhat-00009
camel config set additional-properties=openshift-maven-plugin-version=1.17.0.redhat-00022

camel export

ユーザー設定キーを設定解除するには、以下を使用します。

camel config unset camel-spring-boot-version
6.8.4.2. 設定のリスト表示と取得

ユーザー設定キーをリスト表示するには、以下を使用します。

camel config list

上記の設定の出力は次のとおりです。

runtime = spring-boot
deps = org.apache.camel.springboot:camel-timer-starter
gav = com.foo:acme:1.0-SNAPSHOT

特定のキーの値を取得するには、get コマンドを使用します。

camel config get gav

com.foo:acme:1.0-SNAPSHOT
6.8.4.3. プレースホルダー置換

ユーザー設定値は、コマンドラインプロパティーのプレースホルダーとして使用できます。次に例を示します。

camel config set repos=https://maven.repository.redhat.com/ga

camel run 'Test.java' --logging-level=info --repos=#repos,https://packages.atlassian.com/maven-external

この例では、ユーザー設定 (config set) でリポジトリーが設定されており、camel run コマンドでプレースホルダー #repos が宣言されているため、camel run によってプレースホルダーが置き換えられ、実行中に両方のリポジトリーが使用されます。設定値を参照する場合、構文は #optionName (例: #repos) であることに注意してください。

注記

プレースホルダー置換は、特定の Camel コマンドが持つ各オプションに対してのみ機能します。camel run --help を使用すると、コマンドが持つすべてのオプションを確認できます。

6.8.5. トラブルシューティング

JBang を使用すると、状態が ~/.jbang ディレクトリーに保存されます。これは、JBang がダウンロードした JAR を保存する場所でもあります。Camel CLI は、実行中に必要な依存関係もダウンロードします。ただし、これらの依存関係はローカルの Maven リポジトリー ~/.m2 にダウンロードされます。そのため、Camel CLI の実行中に古い JAR などの問題をトラブルシューティングする場合は、これらのディレクトリーまたはその一部を削除してみてください。

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.