Camel Spring Boot ユーザーガイド
Camel Spring Boot ユーザーガイド
概要
はじめに
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
第1章 Apache Camel エクステンションの言語サポートの使用
Apache Camel の VS Code エクステンションは開発サポートとしてリストされています。開発サポートの範囲の詳細は、開発サポートの対象範囲 を参照してください。
Visual Studio Code 言語サポートエクステンションにより、XML DSL および Java DSL コード用の Apache Camel の言語サポートが追加されます。
1.1. Apache Camel エクステンションの言語サポートについて
このエクステンションは、Apache Camel URI 要素の補完、検証、ドキュメント化の機能を Visual Studio Code エディターで直接提供します。これは、Microsoft 言語サーバープロトコルを使用してクライアントとして機能し、Camel 言語サーバーと通信してすべての機能を提供します。
1.2. Apache Camel エクステンションの言語サポートの機能
言語サポートエクステンションの重要な機能を以下に示します。
- Apache Camel URI の言語サービスのサポート。
- Camel コンポーネントの上にカーソルを置くと、クイックリファレンスドキュメントが表示されます。
- Camel URI の診断。
- Java および XML 言語のナビゲーション。
- Camel JBang を使用して、Yaml DSL で指定された Camel Route を作成します。
1.3. 要件
Apache Camel Language Server を使用する場合は、次の点を考慮する必要があります。
-
現在、Apache Camel Language Server を起動するには Java 11 が必要です。
java.home
VS Code オプションは、マシンにインストールされているデフォルトの JDK とは異なるバージョンの JDK を使用するために使用されます。 - 一部の機能については、JBang がシステムコマンドラインで利用可能である必要があります。
XML DSL ファイルの場合:
-
.xml
ファイル拡張子を使用します。 - Camel 名前空間を指定します。参考として、http://camel.apache.org/schema/blueprint または http://camel.apache.org/schema/spring を参照してください。
-
Java DSL ファイルの場合:
-
.java
ファイル拡張子を使用します。 -
Camel パッケージ (通常はインポートされたパッケージから) を指定します (例:
import org.apache.camel.builder.RouteBuilder
)。 -
Camel コンポーネントを参照するには、from または to とスペースを含まない文字列を使用します。文字列を変数にすることはできません。たとえば、
from("timer:timerName")
は機能しますが、from("timer:timerName")
とfrom(aVariable)
は機能しません。
-
1.4. Apache Camel エクステンションの言語サポートのインストール
VS Code Extension Marketplace および Open VSX Registry から、Apache Camel エクステンションの Language サポートをダウンロードできます。Language Support for Apache Camel エクステンションを Microsoft VS Code に直接インストールすることもできます。
手順
- VS Code エディターを開きます。
- VS Code エディターで、View > Extensions を選択します。
- 検索バーに Camel を入力します。検索結果から Apache Camel の言語サポート オプションを選択し、インストールをクリックします。
これにより、エディターに言語サポート拡張機能がインストールされます。
第2章 Apache Camel エクステンション用の VS Code デバッグアダプターの使用
Apache Camel の VS Code エクステンションは開発サポートとしてリストされています。開発サポートの範囲の詳細は、開発サポートの対象範囲 を参照してください。
これは、Java、Yaml、または XML DSL で記述された実行中の Camel ルートにアタッチすることで Camel デバッガーの機能を追加する Visual Studio Code 拡張機能です。
2.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 のヒューリスティックは、
java
、xml
、およびyaml
ファイルに from と to またはログがあることを確認することです)。
コマンド
Run Camel application with JBang
をサポートしています。- エディターで開かれた Yaml DSL (.yaml|.yml) で定義された有効な Camel ファイルが必要です。
- Camel デバッガー起動設定の設定スニペット
- JBang を使用した Camel デバッガー接続、または Camel Maven プラグインを使用した Maven を受け入れる準備ができた Camel アプリケーションを起動するための設定スニペット
2.2. 要件
Apache Camel 拡張機能用の VS Code デバッグアダプターを使用する場合は、次の点を考慮する必要があります。
-
Java Runtime Environment 11 以降と
com.sun.tools.attach.VirtualMachine
(Hotspot や OpenJDK などのほとんどの JVM で利用可能) がインストールされている必要があります。 デバッグする Camel インスタンスは、以下の要件に従う必要があります。
- Camel 3.16 以降
- クラスパスに camel-debug があります。
- JMX を有効にしてください。
一部の機能では、JBang をシステムコマンドラインで使用できる必要があります。
2.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 に直接インストールすることもできます。
手順
- VS Code エディターを開きます。
- VS Code エディターで、View > Extensions を選択します。
- 検索バーに Camel Debug と入力します。検索結果から Debug Adapter for Apache Camel オプションを選択し、インストールをクリックします。
これにより、VS Code エディターに Apache Camel のデバッグアダプターがインストールされます。
2.4. デバッグアダプターの使用
次の手順では、デバッグアダプターを使用して Camel アプリケーションをデバッグする方法を説明します。
手順
-
jbang
バイナリーがシステムコマンドラインで利用できることを確認してください。 - Camel JBang で開始できる Camel ルートを開きます。
-
Ctrl + Shift + P
キーを使用して コマンドパレット を呼び出して、Run Camel Application with JBang and Debug コマンドを選択するか、ファイル上部に表示される Camel Debug with JBang をクリックします。 - ルートが開始され、デバッガーが接続されるまで待ちます。
- Camel ルートにブレークポイントを置きます。
- デバッグします。
第3章 Camel JBang の使用
Camel Jbang は、Camel ルートを実行するための JBang ベースの Camel アプリケーションです。
3.1. Camel JBang のインストール
前提条件
- JBang がマシンにインストールされている必要があります。JBang をダウンロードしてインストールする方法については、手順 を参照してください。
JBang をインストールした後、コマンドシェルから次のコマンドを実行して、JBang が動作していることを確認できます。
jbang version
これにより、インストールされている JBang のバージョンが出力されます。
手順
- 次のコマンドを実行して、Camel JBang アプリケーションをインストールします。
jbang app install camel@apache/camel
これにより、Apache Camel が JBang 内に camel
コマンドとしてインストールされます。これは、camel
コマンドを実行するだけでコマンドラインから Camel を実行できることを意味します。
3.2. Camel JBang の使用
Camel JBang は複数のコマンドをサポートしています。camel help
コマンドを使用すると、使用可能なすべてのコマンドを表示できます。
camel --help
このコマンドを初めて実行するときは、依存関係がキャッシュされるため、実行に数秒余分に時間がかかる場合があります。すでに JBang を使用していて、Exception in thread "main" java.lang.NoClassDefFoundError: "org/apache/camel/dsl/jbang/core/commands/CamelJBangMain"
での例外などのエラーが発生した場合は、JBang キャッシュをクリアして再試行してください。再度インストールしてください。
すべてのコマンドは --help
をサポートし、フラグが指定されている場合に適切なヘルプを表示します。
3.2.1. シェル補完を有効にする
Camel JBang は、すぐに bash および zsh のシェル補完を提供します。Camel JBang のシェル補完を有効にするには、次を実行します。
source <(camel completion)
これを永続的にするには、次を実行します。
echo 'source <(camel completion)' >> ~/.bashrc
3.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 は自動的に削除します。
3.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
のあるファイルも検出できます。
3.3.2. 入力パラメーターからルートを実行する
非常に小さな Java ルートの場合、以下に示すように、ルートを CLI 引数として指定できます。
camel run --code='from("kamelet:beer-source").to("log:beer")'
CLI 引数はファイルよりも使用が少し面倒であるため、これは非常に制限されています。入力パラメーターからルートを実行する場合は、以下の点に留意してください。
- Java DSL コードのみがサポートされています。
- コードは一重引用符で囲まれているため、Java DSL では二重引用符を使用できます。
- コードは、端末および JBang から提供できるリテラル値に制限されます。
-
すべてのルートは単一の
--code
パラメーターで定義する必要があります。
--code
の使用は、非常に迅速で小規模なプロトタイプにのみ使用できます。
3.3.3. ライブリロードを備えた開発モード
次に示すように --dev
オプションを使用して、ソースファイルの更新 (保存) 時にルートのライブリロードに伴う開発モードを有効にできます。
camel run foo.yaml --dev
Camel インテグレーションの実行中に、YAML ルートを更新し、保存時に更新できます。このオプションは、java
を含むすべての DLS で機能します。次に例を示します。
camel run hello.java --dev
ライブリロードオプションは開発目的のみを目的としており、JVM クラスのロードの問題など、リロードに関する問題が発生した場合は、インテグレーションを再起動する必要がある場合があります。
3.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
3.3.5. プロファイルの使用
Camel JBang の profile
は Camel JBang で自動的にロードされる設定を参照する名前 (ID) です。デフォルトのプロファイルは、Camel JBang が application.properties
(存在する場合) を自動的にロードするための (スマートデフォルト) アプリケーション
として名前が付けられます。これは、同じ名前の特定のプロパティーファイルに一致するプロファイルを作成できることを意味します。
たとえば、local
という名前のプロファイルを使用して実行すると、Camel JBang は application.properties
の代わりに local.properties
をロードします。プロファイルを使用するには、次のようにコマンドラインオプション --profile
を指定します。
camel run hello.java --profile=local
一度に指定できるプロファイル名は 1 つだけです。たとえば、--profile=local,two
は無効です。
プロパティー
ファイルでは、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 JBang によって内部的に使用される予約キーであり、Camel JBang コマンドの引数を事前に設定できます。
3.3.6. インターネット経由での JAR のダウンロード
デフォルトでは、Camel JBang は Camel の実行に必要な依存関係を自動的に解決します。これは、JBang と Camel によってそれぞれ実行されます。Camel 自体は、クラスパス上で現在利用できない JAR がコンポーネントに必要かどうかを実行時に検出し、JAR を自動的にダウンロードできます。
Camel はこれらの JAR を次の順序でダウンロードします。
-
~/.m2/repository
のローカルディスクの使用 - Maven Central のインターネットから
- インターネットからのカスタムサードパーティー Maven リポジトリー
-
~/.m2/settings.xml
のアクティブなプロファイル、または--maven-settings
オプションを使用して指定された設定ファイルにあるすべてのリポジトリーから。
Camel JBang をインターネット経由でダウンロードしたくない場合は、次のように --download
オプションを使用してこれをオフにできます。
camel run foo.java --download=false
3.3.7. カスタム JAR の追加
Camel JBang は、独自のリリースからの Camel コンポーネント、言語、データ形式の依存関係を自動的に検出します。これは、使用する JAR を指定する必要がないことを意味します。ただし、サードパーティーのカスタム JAR を追加する必要がある場合は、次のように、Maven GAV 構文 (groupId:artifactId:version
) の CLI 引数として --deps
を使用してこれらを指定できます。
camel run foo.java --deps=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 --deps=camel-saxon
複数の依存関係をコンマで区切って指定できます。
camel run foo.java --deps=camel-saxon,com.foo:acme:1.0
3.3.8. サードパーティーの Maven リポジトリーの使用
Camel JBang は、まずローカルリポジトリーからダウンロードし、次にオンラインの 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 はプロパティーファイルの名前です。
3.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
3.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 JBang でサンプルを実行できます。
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*
3.3.10.1. GitHub Gist からルートを実行する
GitHub の要点を使用すると、簡単に実行できる小さな Camel ルートを共有する簡単な方法です。たとえば、Gist を実行するには、次を使用します。
camel run https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92
Gist には 1 つ以上のファイルを含めることができ、Camel JBang はすべての関連ファイルを収集するため、Gist には複数のルート、プロパティーファイル、および Java Bean を含めることができます。
3.3.11. GitHub でホストされているルートのダウンロード
Camel JBang を使用すると、既存のサンプルを 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
3.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 は自動的に削除します。
3.3.12. 特定の Camel バージョンの使用
次のように、実行する Camel バージョンを指定できます。
jbang run -Dcamel.jbang.version=3.20.1 camel@apache/camel [command]
Camel の古いバージョンは、最新バージョンと同様に Camel JBang で動作しない可能性があります。Camel 3.18 以降のバージョンを使用することを推奨します。
次のようなスナップショットを使用して最先端の開発を試すこともできます。
jbang run --fresh -Dcamel.jbang.version=3.20.1-SNAPSHOT camel@apache/camel [command]
3.3.13. Camel K インテグレーションまたはバインディングの実行
Camel は、CRD 形式 (Kubernetes カスタムリソース定義) の Camel K インテグレーションとバインディングファイルの実行をサポートしています。たとえば、joker.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
3.3.14. クリップボードから実行
Camel ルートは OS クリップボードから直接実行できます。これにより、コードをコピーして、ルートをすぐに実行できます。
camel run clipboard.<extension>
ここで、<extension>
は、クリップボードのコンテンツのタイプ (java
、xml
、yaml
など) です。
たとえば、これをクリップボードにコピーして、ルートを実行できます。
<route> <from uri="timer:foo"/> <log message="Hello World"/> </route>
camel run clipboard.xml
3.3.15. ローカルの 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)
3.3.16. Spring Boot と Quarkus のインテグレーションの制御
Camel JBang 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>
3.3.17. Camel インテグレーションのステータスの取得
Camel JBang の get
コマンドは、稼働中の Camel インテグレーションの 1 つまたはすべての Camel インテグレーションに対して Camel 固有のステータスを取得するために使用されます。実行中の Camel インテグレーションの状態を表示するには、以下を実行します。
camel get PID NAME CAMEL PLATFORM READY STATUS AGE TOTAL FAILED INFLIGHT SINCE-LAST 61818 MyCamel 3.20.1-SNAPSHOT Spring Boot v2.7.3 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
を使用して、利用可能なすべてのコマンドを表示します。
3.3.17.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 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 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
を使用します。
3.3.17.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
コマンドを使用してください。
3.3.17.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
を使用すると、実行中のすべての統合のログレベルを変更できます。
3.3.17.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 を使用してサービスをアドバタイズできる必要があります。
3.3.17.5. サーキットブレーカーのリスト状態
Camel インテグレーションでリンク:https://camel.apache.org/components/3.20.x/eips/circuitBreaker-eip.html Circuit Breaker を使用する場合、次のように Camel JBang でブレーカーのステータスを出力できます。:
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
状態、つまり障害が減少し始めた場合にブレーカーが閉状態に戻ろうとしている状態であることがわかります。
watch
オプションを指定してコマンドを実行すると、最新の状態を表示できます (例: watch Camel getcircuit-breaker
)。
3.3.18. Jolokia と Hawtio の使用
Web コンソールを使用すると、すべての JMX 管理情報などの Camel インテグレーションの実行を検査したり、ライブパフォーマンスメトリックを使用して Camel ルートを視覚化したりできます。
Hawtio が Camel インテグレーションを検査できるようにするには、Jolokia JVM エージェントが実行中の統合にインストールされている必要があります。これは次のように明示的に行われます。
camel ps PID NAME READY STATUS AGE 61818 sample.camel.MyCamelApplica… 1/1 Running 26m38s 62506 test1.java 1/1 Running 4m34s
PID を使用して、Jolokia をアタッチできます。
camel jolokia 62506 Started Jolokia for PID 62506 http://127.0.0.1:8778/jolokia/
PID を使用する代わりに、名前パターンでアタッチすることもできます。この例では、2 つの Camel インテグレーションには一意の名前 (foo と test1) が付いており、次のように PID なしで Jolokia をアタッチできます。
camel jolokia te Started Jolokia for PID 62506 http://127.0.0.1:8778/jolokia/
次に、Camel JBang を使用して Hawtio を起動できます。
camel hawtio
これにより、Hawtio が自動的にダウンロードされて起動され、Web ブラウザーで開きます。
その他のオプションについては、camel hawtio --help
を参照してください。
Web ブラウザーで Hawtio が起動したら、Discover タブをクリックすると、ローカルで利用可能なすべての Jolokia エージェントがリストされます。camel jolokia PID
を使用して複数の異なる Camel インテグレーションに接続し、このリストからどれをロードするかを選択できます。
緑色の lightning
アイコンをクリックして、実行中の特定の Camel 統合に接続します。
不要になった場合は、実行中の Camel インテグレーションで Jolokia JVM エージェントをアンインストールできます。
camel jolokia 62506 --stop Stopped Jolokia for PID 62506
次のように、1 つのコマンドだけでこれを実現することもできます。
camel hawtio test1
ここで、test1
は実行中の Camel インテグレーションの名前です。(ctrl
+ c
を使用して) Hawtio を停止すると、Camel は Jolokia JVM エージェントをアンインストールしようとします。ただし、JVM が終了中であるため、camel-jbang が実行中の Camel インテグレーションと JVM プロセス通信を行うことができなくなる可能性があるため、これは時々成功しません。
3.3.19. パイプを使用したターミナルからのスクリプト作成
Camel JBang ファイルは、パイプとフィルターを使用したターミナルスクリプトに使用されるスクリプトとして実行できます。
スクリプトが実行されるたびに、JVM が Camel で起動されます。これはメモリー使用量がそれほど速くないか、少ないため、たとえば、多くの Camel コンポーネントまたはカメレットを使用して、異種の IT システムからデータをより簡単に送受信するために、Camel JBang ターミナルスクリプトを使用します。
これには、たとえば、以下の 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
3.3.19.1. stream:in
を line モードと raw モードで使用する
stream:in
を使用して System in
からデータを読み取る場合、Stream コンポーネント は、2 つのモードで動作します。
-
行モード (デフォルト) - 入力を単一行 (改行で区切られた) として読み取ります。メッセージ本文は
String
です。 -
raw モード - ストリームの終わり までストリーム全体を読み取ります。メッセージ本文は
byte[]
です。
デフォルトモードは、ストリームコンポーネントが歴史的にどのように作成されたかによるものです。したがって、raw モードを使用するには、stream:in?readLine=false
を設定することを推奨します。
3.3.20. ローカルカメレットの実行
Camel JBang を使用すると、GitHub で公開したり、jar にパッケージ化したりすることなく、ローカルのカメレットを試すことができます。
camel run --local-kamelet-dir=/path/to/local/kamelets earthquake.yaml
kamelet がローカルファイルシステムからのものである場合、Camel JBang を --dev
モードで実行すると、更新されていればライブリロードできます。
GitHub リポジトリー内のフォルダーを指定することもできます。以下に例を示します。
camel run --local-kamelet-dir=https://github.com/apache/camel-kamelets-examples/tree/main/custom-kamelets user.java
kamelet が GitHub からロードされた場合、ライブリロードはできません。
3.3.21. platform-http
コンポーネントの使用
ルートが platform-http
から開始されると、Camel JBang にはポート 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%
3.3.22. Java Bean とプロセッサーの使用
通常の Java ソースファイルを Camel ルートとともに含める基本サポートがあり、Camel JBang ランタイムに Java ソースをコンパイルさせます。これは、アプリケーションに必要な小さなユーティリティークラス、POJO、Camel プロセッサーを含めることができることを意味します。
Java ソースファイルではパッケージ名を使用できません。
3.3.23. Java クラスでの依存関係の注入
Camel-jbang
を使用して Camel 統合を実行する場合、ランタイムは Camel-main
ベースになります。これは、Spring Boot または Quarkus が利用できないことを意味します。ただし、Java クラスでのアノテーションベースの依存関係注入の使用はサポートされています。
3.3.23.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 を作成します。
3.3.24. デバッグ
利用可能なデバッグには次の 2 種類があります。
-
Java debugging
- Java コードのデバッグ (標準 Java) -
Camel route debugging
- Camel ルートのデバッグ (Camel ツールプラグインが必要)
3.3.24.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
を追加して、(ルート定義の作成とは対照的に) ルートの実行中にヒットするブレークポイントを設定できます。
3.3.24.2. Camel ルートのデバッグ
Camel ルートデバッガーはデフォルトで利用可能です (camel-debug
コンポーネントはクラスパスに自動的に追加されます)。デフォルトでは、URL service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel
で JMX を介してアクセスできます。その後、選択した統合開発環境 (IDE) を使用できるようになります。
3.3.25. ヘルスチェック
ヘルスチェックのステータスには、次のように CLI から Camel JBang を使用してアクセスします。
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-kafka
やCamel-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
ここでは、無効な設定による org.apache.kafka.common.config.ConfigException
が原因でヘルスチェックが失敗していることがわかります: Invalid url in bootstrap.servers: value
。
さまざまなオプションをすべて表示するには、camel get health --help
を使用します。
3.4. 利用可能な Camel コンポーネントのリスト
Camel には、すぐに使える次のような多くのアーティファクトが付属しています。
- コンポーネント
- データ形式
- 表現言語
- その他のコンポーネント
- Kamelets
Camel CLI を使用すると、camel category
コマンドを使用して Camel が提供するものをリストできます。たとえば、すべてのコンポーネントをリストするには、次のようにします。
camel catalog components
利用可能なカメレットを確認するには:
camel catalog kamelets
使用可能なすべてのコマンドを表示するには、camel category --help
を使用します。
3.4.1. コンポーネントのドキュメントの表示
doc
ゴールでは、すべてのコンポーネント、データ形式、カメレットの簡単なドキュメントを表示できます。たとえば、kafka コンポーネントを確認するには、次を実行します。
camel doc kafka
Camel CLI はこの情報に直接アクセスできず、コンポーネントの基本的な説明しか表示できませんが、すべての設定オプションの表が含まれているため、このドキュメントは Web サイトに表示されているような完全なドキュメントではありません。
jackson データ形式のドキュメントを参照するには:
camel doc jackson
まれに、同じ名前のコンポーネントとデータ形式が存在し、doc
の目標によってコンポーネントが優先されることがあります。このような状況では、次のように名前の前にデータ形式を付けることができます。
camel doc dataformat:thrift
次のような kamelet ドキュメントも参照できます。
camel doc aws-kinesis-sink
3.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
を使用します。
3.4.1.2. 表にリストされているフィルタリングオプション
一部のコンポーネントには多くのオプションがある場合があり、そのような場合は --filter
オプションを使用して、名前、説明、またはグループ (プロデューサー、セキュリティー、アドバンスト) のいずれかでフィルターに一致するオプションのみをリスト表示できます。
たとえば、セキュリティー関連のオプションのみをリストするには、次のようにします。
camel doc kafka --filter=security
timeout
に関するものだけをリストするには:
camel doc kafka --filter=timeout
3.5. Open API
Camel JBang では、既存の OpenAPI 仕様ファイルがある場合、contract first
アプローチを使用して Open API サービスを迅速に公開できます。Camel JBang は、命名規則 direct:<operationId>
を使用して、OpenAPI 仕様の各 API エンドポイントを Camel ルートにブリッジします。これにより、特定の操作に対して Camel ルートをより迅速に実装できるようになります。
詳細は、OpenAPI example を参照してください。
3.6. 依存関係のリストを収集する
Camel JBang を使用すると、依存関係が自動的に解決されます。これは、すべての Camel コンポーネントを依存関係として追加するために Maven や Gradle などのビルドシステムを使用する必要がないことを意味します。
ただし、Camel インテグレーションを実行するにはどのような依存関係が必要かを知りたい場合があります。dependency
コマンドを使用すると、必要な依存関係を確認できます。コマンド出力では、mvn dependency:tree
などの詳細なツリーは出力されません。出力は、必要な Camel コンポーネントおよびその他の JAR をリストすることを目的としているためです (Kamelet を使用する場合)。
デフォルトでの依存関係出力は、次に示すように、ランタイムとして Camel-main
を使用する vanilla
Apache Camel です。
camel dependencies org.apache.camel:camel-dsl-modeline:3.20.0 org.apache.camel:camel-health:3.20.0 org.apache.camel:camel-kamelet:3.20.0 org.apache.camel:camel-log:3.20.0 org.apache.camel:camel-rest:3.20.0 org.apache.camel:camel-stream:3.20.0 org.apache.camel:camel-timer:3.20.0 org.apache.camel:camel-yaml-dsl:3.20.0 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>3.20.0</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-dsl-modeline</artifactId> <version>3.20.0</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-health</artifactId> <version>3.20.0</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-kamelet</artifactId> <version>3.20.0</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-log</artifactId> <version>3.20.0</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-rest</artifactId> <version>3.20.0</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-stream</artifactId> <version>3.20.0</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-timer</artifactId> <version>3.20.0</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-yaml-dsl</artifactId> <version>3.20.0</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:2.7.5 org.springframework.boot:spring-boot-starter-web:2.7.5 org.apache.camel.springboot:camel-spring-boot-engine-starter:3.20.0 org.apache.camel.springboot:camel-dsl-modeline-starter:3.20.0 org.apache.camel.springboot:camel-kamelet-starter:3.20.0 org.apache.camel.springboot:camel-log-starter:3.20.0 org.apache.camel.springboot:camel-rest-starter:3.20.0 org.apache.camel.springboot:camel-stream-starter:3.20.0 org.apache.camel.springboot:camel-timer-starter:3.20.0 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
3.7. プロジェクトの作成
Camel JBang 統合を Spring Boot や Quarkus などの従来の Java ベースのプロジェクトに export
できます。Camel JBang を使用してプロトタイプを構築した後、Java コーディングがさらに必要な従来の Java ベースのプロジェクトが必要な場合、または Spring Boot、Quarkus、または標準的な Camel Main の強力なランタイムを使用する場合に、これを実行するとよいでしょう。
3.7.1. Camel Spring Boot へのエクスポート
コマンド import --runtime=spring-boot
は、現在の Camel JBang ファイルを、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 JBang が使用するバージョンと同じです。ただし、次のように別の Camel バージョンを指定できます。
camel export --runtime=spring-boot --gav=com.foo:acme:1.0-SNAPSHOT --directory=../myproject --camel-spring-boot-version=3.20.1.redhat-00064
詳細は、camel export --help
コマンドを実行して、使用可能なオプションを確認してください。
3.7.2. Camel CLI を使用したエクスポートが含まれています
Spring Boot、Quarkus、または Camel Main にエクスポートする場合、Camel JBang CLI はそのままでは含まれません。Camel CLI (Camel
) を引き続き使用するには、次のように --deps
オプションに Camel:cli-connector
を追加する必要があります。
camel export --runtime=quarkus --gav=com.foo:acme:1.0-SNAPSHOT --deps=camel:cli-connector --directory=../myproject
3.7.3. エクスポートの設定
デフォルトでは、export コマンドは application.properties
ファイルから設定をロードします。このファイルは、ランタイムや Java バージョンの選択などの特定のパラメーターをエクスポートするために使用されます。
exporting
に関連する次のオプションは、application.properties
ファイルで設定できます。
オプション | 説明 |
---|---|
| ランタイム (Spring-Boot、quarkus、または Camel-main) |
| Maven group:artifact:version |
| 追加の依存関係 (複数の依存関係を区切るにはコンマを使用します)。詳細は、カスタム JAR の追加 を参照してください。 |
| クラスパスに追加する追加ファイル (複数のファイルを区切るにはコンマを使用します)。詳細は、カスタム JAR の追加 を参照してください。 |
| Java バージョン (11 または 17) |
| Apache Camel Kameletes のバージョン |
| Kamelets をロードするためのローカルディレクトリー |
| Spring Boot で使用する Camel バージョン |
| Spring Boot バージョン |
| Quarkus Platform Maven groupId |
| Quarkus Platform Maven artifactId |
| Quarkus Platform バージョン |
| エクスポートされたプロジェクトに Maven ラッパーファイルを含める |
| エクスポートされたプロジェクトに Gradle Wrapper ファイルを含める |
| 使用するビルドツール (maven または gradle) |
| オンデマンドでダウンロードするための追加の Maven リポジトリー (複数のリポジトリーを区切るにはコンマを使用します) |
| サーバー、リポジトリー、ミラー、プロキシーを設定するための Maven settings.xml ファイルのオプションの場所。false に設定すると、デフォルトの ~/.m2/settings.xml も使用されません。 |
| settings.xml を復号化するための Maven settings-security.xml ファイルのオプションの場所 |
| プロジェクトがエクスポートされるディレクトリー。 |
| --console が有効な場合など、スタンドアロン Camel を実行するときに使用する HTTP サーバーポート (デフォルトではポート 8080)。 |
| スタンドアロン Camel を実行している場合、ローカル HTTP サーバー (デフォルトではポート 8080) 上の /q/dev にある開発者コンソール。 |
| スタンドアロン Camel を実行している場合は、ローカル HTTP サーバー (デフォルトではポート 8080) の /q/health でヘルスチェックを行います。 |
これらは、export コマンドのオプションです。Camel export --help
を使用すると、詳細とデフォルト値を確認できます。
3.8. トラブルシューティング
JBang を使用すると、状態が ~/.jbang
ディレクトリーに保存されます。これは、JBang がダウンロードした JAR を保存する場所でもあります。Camel JBang は、実行中に必要な依存関係もダウンロードします。ただし、これらの依存関係はローカルの Maven リポジトリー ~/.m2
にダウンロードされます。そのため、Camel JBang の実行中に古い JAR などの問題をトラブルシューティングする場合は、これらのディレクトリーまたはその一部を削除してみてください。
第4章 Spring XML で Camel を使用する
Spring XML
Spring XML ファイルで Camel を使用することは、Camel で XML DSL を使用する方法の 1 つです。Camel は歴史的に長い間 Spring XML を使用してきました。Spring フレームワークは、Spring アプリケーションを構築するための一般的な設定として XML ファイルから始まりました。
Spring アプリケーションの例
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd "> <camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:a"/> <choice> <when> <xpath>$foo = 'bar'</xpath> <to uri="direct:b"/> </when> <when> <xpath>$foo = 'cheese'</xpath> <to uri="direct:c"/> </when> <otherwise> <to uri="direct:d"/> </otherwise> </choice> </route> </camelContext> </beans> == Specifying Camel routes using Spring XML You can use Spring XML files to specify Camel routes using XML DSL as shown: [source,xml]
<camelContext id="camel-A" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="seda:start"/> <to uri="mock:result"/> </route> </camelContext>
== Configuring Components and Endpoints You can configure your Component or Endpoint instances in your Spring XML as follows in this example. [source,xml]
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> </camelContext>
<bean id="jmsConnectionFactory" class="org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp:someserver:61616"/> </bean> <bean id="jms" class="org.apache.camel.component.jms.JmsComponent"> <property name="connectionFactory"> <bean class="org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp:someserver:61616"/> </bean> </property> </bean>
This allows you to configure a component using any name, but its common to use the same name, for example, `jms`. Then you can refer to the component using `jms:destinationName`. This works by the Camel fetching components from the Spring context for the scheme name you use for Endpoint URIs. == Using Java DSL with Spring XML files You can use Java Code to define your RouteBuilder implementations. These are defined as beans in spring and then referenced in your camel context, as shown: [source,xml]
<camelContext xmlns="http://camel.apache.org/schema/spring"> <routeBuilder ref="myBuilder"/> </camelContext>
<bean id="myBuilder" class="org.apache.camel.spring.example.test1.MyRouteBuilder"/>
== Using package scanning Camel also provides a powerful feature that allows for the automatic discovery and initialization of routes in given packages. This is configured by adding tags to the camel context in your spring context definition, specifying the packages to be recursively searched for `RouteBuilder` implementations. To use this feature add a <package></package> tag specifying a comma separated list of packages that should be searched. For example, [source,xml]
<camelContext> <packageScan> <package>com.foo</package> <excludes>.Excluded</excludes> <includes>.*</includes> </packageScan> </camelContext>
This scans for RouteBuilder classes in the `com.foo` and the sub-packages. You can also filter the classes with includes or excludes such as: [source,xml]
<camelContext> <packageScan> <package>com.foo</package> <excludes>*.*Special</excludes> </packageScan> </camelContext>
This skips the classes that has Special in the name. Exclude patterns are applied before the include patterns. If no include or exclude patterns are defined then all the Route classes discovered in the packages are returned. `?` matches one character, `\*` matches zero or more characters, `**` matches zero or more segments of a fully qualified name. == Using context scanning You can allow Camel to scan the container context, for example, the Spring `ApplicationContext` for route builder instances. This allows you to use the Spring `<component-scan>` feature and have Camel pickup any RouteBuilder instances which was created by Spring in its scan process. [source,xml]
<!-- enable Spring @Component scan -→ <context:component-scan base-package="org.apache.camel.spring.issues.contextscan"/>
<camelContext xmlns="http://camel.apache.org/schema/spring"> <!-- and then let Camel use those @Component scanned route builders -→ <contextScan/> </camelContext>
This allows you to just annotate your routes using the Spring `@Component` and have those routes included by Camel: [source,java]
@Component public class MyRoute extends RouteBuilder {
@Override public void configure() throws Exception { from("direct:start") .to("mock:result"); } }
You can also use the ANT style for inclusion and exclusion, as mentioned above in the package scan section. :leveloffset!: