Apache Camel Advent Calendar 4日目の記事は、サポート担当古市が担当します。 テーマは、「componentとの付き合い方」

普段の開発をラクにできるツールボックス Apache Camel を使いこなす上で、「どんなツールがあるのか」「どのツールはいつ使うのが効果的か」といった悩みをお持ちではないでしょうか。
既にご存知の方もいらっしゃるかと思いますが、ツールを使わずとも機能実装は可能です。 Camel では、カスタムプロセッサーや Java Beanの実行をサポートしているため、過去にはこんな使い方を見たことがあります。
- タイマーを使い定期実行
- Java Bean内で、ファイルシステムにアクセスし、ファイルが存在したら別ディレクトリへ移動するコードを独自に実装
上記コードは、テストもパスしているでしょうし、おそらく本番環境でも問題なく動作するはずです。 しかし、この例では、Java Bean内で独自にロジック実装する必要はありません。 せっかく Camel を使われているのだから、豊富なオプションを用意した File component を使えば良いのです。
- File component(consumer, producer)を使い、ファイルを移動
両方とも最終的には同じビジネスロジックを実装したことにはなりますが、コードの見通しやチューニングのし易さで言えば後者に軍配が上がります。 Camel を導入する際には、各ツール(component)を効果的に使いこなしたいものです。[1]
[1] 「componentにオプションが無かった」「バグがあった」という理由で暫定的に Java Beanをご利用されるコーナーケースもあります。 しかし、あくまでも特例であり、デフォルトで Java Beanを使う考え方は、お勧めできません。
Apache Camel コミュニティーサイトでは、執筆時点(2025/7/10)でこれだけのツールが提供されています。
- core component: 27
- component: 332 (5 deprecated)
工具セットを購入してみたけれど、ツールの多さに戸惑い途方に暮れながらとりあえずプラスドライバーだけで頑張るなんて、残念ですよね。 今回は、ツールセットとの付き合い方についてご紹介します。
- まずはざっと見る
- 気になる component のページで詳細を読む
- サンプルを探す
まずはざっと見る
コミュニティー版では、こちらに component一覧があります。
製品版では、runtime毎に component一覧があります。[2]
後日ご紹介する VScode extension のkaotoでも、component一覧を表示できます。
[2]コミュニティー版にあり製品版にはない component があった場合、Red Hatサポート窓口までお問い合わせください。 サポート可否/代替え案/製品対応申請 といったサポートをご提供しております。
まずは、component一覧をぼんやりと一通り見てみましょう。 component名からなんとなく動作がわかるかと思いますし、descriptionに簡単な説明もあります。内部で使用しているライブラリーが component名になっていることも多いので、混乱はしにくいかと思います。
これから実装しようとしている機能がある場合、キーワード検索をしても良いかもしれません。前述した例ではファイル移動なので、"file"と検索すれば File component がヒットします。 ただ、この方法では検索しずらいものもあります。例えば、Artemis Brokerとのインテグレーション用 component を探す場合、"artemis" ではヒットしません。コミュニティーサイトにてキーワード "JMS"と探すと、これだけの component が見つかるはずです。
- camel-activemq
- camel-activemq6
- came-jms
- camel-sjms
- camel-sjms2
説明を読めばなんとなくそれぞれの違いがわかり、camel-jmsをご利用されるかもしれません。 ですが、artemis brokerを使われているのであれば、camel-amqp componentをお勧めします。(汗) artemis broker が client とのやりとりで使用する amqpプロトコルに対応した component であり、camel-jms よりも最適化されているためです。
キーワード検索も有効ですが、component一覧を一通り見ておくことで、camel-amqp component を見落とす状況も回避できるかもしれません。 ぜひ通勤中などの片手間で良いので、定期的にご確認ください。
Red Hatサポート窓口では、お客様のニーズに合った componentをご紹介することも可能です。 「時間をかけずに最適な componentを探したい」という方は、ぜひサポート窓口のご利用をご検討ください。[3]
[3] Red Hat コンサルティングサービスでは、お客様のプロジェクトに参画し、camelの導入に対し包括的なアドバイスや技術トレーニングのご提供も可能です。
気になる component のページで詳細を読む
一覧をざっと見ることで、気になる component が見つかったかと思います。次に、各component ページの読み方についてご案内します。 ここでは、 camel-file component を例にします。
もちろん component紹介ページの内容はすべて読むことをお勧めしますが、いくつかチェックポイントがあります。 まず気にすべきは、dependency の追加定義が pom.xml に必要かどうかです。 製品ドキュメントであれば、それぞれの runtime 用の定義が記載されているはずです。
Quarkus
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-file</artifactId>
</dependency>
Spring Boot
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-file-starter</artifactId> <version>x.x.x</version> </dependency>
次に、"URI Format"と各種オプションをチェックすることで、どういった制御が可能か把握できます。 camel-file component の "URI Format"はこちら。
file:directoryName[?options]
ディレクトリー名とオプションが設定できることがわかります。
オプションですが、2種類あることに気づきます。
- component レベル
- endpoint レベル
camel routeを実装する際、CamelContext 内に複数 camel route を定義することが可能です。 componentレベルは、CamelContext 内で使われる camel-file component 全てに適応されるオプションです。 endpointレベルは、camel route 内で定義する エンドポイント(例えば "from("file://inbox"))にのみ適応されるオプションです。クエリーオプションと言われたりもします。 簡単に動作確認されるのであれば、まずは endpointレベルのオプションを設定するのが簡単かと思います。
”Message Headers" も重要です。動作の制御に使える header や、実行結果が格納される header が紹介されています。
オプションや message header に共通する内容ですが、producer/consumerのどちらかにのみ適応されるものがありますので、ご注意ください。 consumer endpointは、メッセージを受け取る endpoint です。 endpointは、"from"で定義を始めます。 producer endpointは、インテグレーション先にメッセージを送信する endpointです。endoint は、"to"で定義を始めます。
「メッセージを受け取るのか送信するのか」、どちらの endpoint を使うか頭に入れつつ、各種オプション設定や message header をご確認ください。
サンプルを探す
各紹介ページには、必ずといって良いほどサンプルコードがセットになっています。まずはそちらをご確認ください。 他にも見てみたいという方には、サンプル集が公開されています。
サンプルにコンポーネントオプションが使われていないかもしれません。その場合、camelライブラリーのソースコードに同梱されているテストコードが有用な場合もあります。(Red Hat カスタマーポータルからも、製品ソースコードがダウンロード可能です。)
それでもオプションの使用方法がわからない場合などあるかと思います。 その場合は、camel コミュニティーが運営している SNS やメーリングリストをご利用いただく方法があります。
もちろん、Red Hat サポート窓口でご質問いただくことも可能です。
ざっとではありますが、componentとの付き合い方についてご紹介しました。 よくサポートケースで散見する component の使い方については、後日改めていくつか投稿する予定です。ぜひお楽しみにしてください。
明日の advent calendar 5日目では、「Camel route から Hello world」 についてご紹介します。 アドベントカレンダーの一覧はこちらです。 qiita.com