ジェシー・ゴルジンスキーが、お気に入りの統合ツールの1つである(「統合のスイスナイフ」としても知られる)Apache Camelについて語ります。
08/06/2021 ジェシー・ゴルジンスキー
以前のブログ記事で述べたように、IBM iとオープンソースソフトウェアの統合はデジタルトランスフォーメーションの鍵です。 今日は、私のお気に入りの統合ツールの1つであるApache Camelについて説明しようと思います。 Camelは自らを「統合のスイスナイフ」と呼んでいます。
ご存じのとおり、同種の技術だけで成り立っているシステムは存在しません。 ソリューションは様々なコンポーネントで構成されていることが多く、各コンポーネントには独自のAPI、データベース、および方法論があります。 おそらく、ソリューションは複数のOSで実行されるか、外部のデータベースまたはソーシャルメディアプラットフォームとデータをやり取りする必要があります。 電子メールを送信する必要がありますか? SMSメッセージを作成しますか? Amazon S3バケットとデータのやり取りをしますか? リモートサーバーにファイルを送信しますか? ブロックチェーン? 当然ながら、これらすべてが異なるプロトコルを必要とします。
有難いことに、これらの異なるプロトコルをすべて理解できるオープンソースパッケージがあります。ですから、これらの技術を結び付けるために高水準言語を使用することは理に適っているかもしれません。
しかし、Camelはこれらの活動をさらに簡素化できます。 さあ、それについて学びましょう!
Camelとは何か?
Camelは、Apacheソフトウェアファウンデーションが公開したエンタープライズ統合パターン(EIP)に基づくエンタープライズ統合フレームワークです。 これらのパターンは、様々なテクノロジーを繋げて1つに纏めるときに必要な一般的なタスクを表しています。 EIPの1つの例は、図1に示すコンテンツベースのルーターです。
コンテンツベースのルーターを使い、メッセージのコンテンツまたは属性に応じてメッセージの送信先またはメッセージの処理方法が決まります。 Camelを使用することで、これらのEIPを容易に適用できます。 しかしながら、単純なルートの場合にはEIPは必要ないかも知れません。その場合は、ある「配管工事」を行うだけで十分です。
もっと先に進む前に、CamelがJavaベースのフレームワークであることを明確にする必要があります。 Camelをデプロイするための方法は沢山あります。 Spring(Webアプリケーションフレームワーク)を使ってJava Webアプリとして起動できます。 Kubernetes上でネイティブに実行でき、Quarkus拡張機能として利用することも可能です。
しかし私の意見では、Camelをデプロイする最も簡単な方法は、スタンドアロンのJavaアプリケーションとしてデプロイすることです。 これにより、単純なJavaコードでルートを定義でき、Spring、Quarkus、Kubernetesの知識は必要ありません。 加えて、スタンドアロンのJavaアプリケーションは、事実上どこでも(もちろん、IBM iを含みます)実行できます。
動作方法は?
Camelは、メッセージ指向ミドルウェア(MoM)の一形態です。 つまり、作業単位を抽象化して基本的なメッセージにします。 これらのメッセージには、本文と0個以上のメッセージヘッダーがあります。 様々なテクノロジーを統合するために、必要なコンポーネント間でメッセージがどのように渡されるかを単に定義するだけです。 これはCamelルートと呼ばれます。
ルートの要素は、沢山あるCamelのコンポーネントのいずれでも構いません。 どのようなコンポーネントが存在するか、その完全な一覧表についてはCamelコンポーネントの文書を参照してください(警告、沢山あります!)。 IBM i用のコンポーネントもありますが、プラットフォームに依存しない多くのコンポーネント(JDBC、ファイルアクセス、コマンドなど)もIBM iで動作します。
架空のルートの例は、おそらく図2で視覚的に表わせます。
この例には、次の4つのエンドポイントがあります。
- データを消費する(Consume data):これは、Db2照会の結果、データキューまたはメッセージキューから読み取られたデータ、コマンドの出力などの可能性があります。
- データを処理する(Process data):これは、AIアクティビティ(そう、CamelはIBM Watsonと通信できます!)、単純な変換、REST API呼び出しなどの可能性があります。
- 活動をログする(Log activity):ログファイルに書き込むか、端末で視覚的なフィードバックを確認する必要があるかもしれません。
- どこかにデータを送信する(Send data somewhere):Twitter? 別のデータベース? Slack? 電子メール? FTP / SFTPサイト? ブロックチェーンノード?
ルートは直線的である必要はありませんが、単純な2エンドポイントルートでもできることはたくさんあります。
例えば、図3の次の2つのルートを考えてみましょう。
見てのとおり、ルートは一般的にリソースを一意に識別する文字列であるURI(Uniform Resource Identifier)を介して定義されます。 URIには、プロトコル(コンポーネントを識別する)パス、および0個以上の照会パラメータが含まれます。 そして、Camelには(Jasyptのような)パスワードを暗号化するための手法がありますから心配は無用です。 IBM iでCamelを実行している場合は、「* CURRENT」を使うことで認証情報を完全に管理する必要が無くなります。
上記の例では、これら2つのルートのそれぞれがIoT機器からのデータを消費し、その読み取り値をIBM iメッセージキューに送信します(図4を参照)。 これでIBM i上の任意の言語から処理を行うことのできる明るさと温度の読み取り値が得られました。
もちろん、別の目標エンドポイントを指定するだけで、(JDBCコンポーネントを使用して)データベース、ストリームファイル、またはデータキューにデータを振り向けることもできます。
IBM iからIoT機器を制御したいですか? 単にルートの順序を逆にするだけです! それから、IBM iメッセージ待ち行列から機器にメッセージを振り向けることができます。 例えば、次の図5に示すSNDMSGコマンドは電球を点灯できます。
前述したように、Camelルートは、ルート内でEIPを利用できるので、単純な直線的ルートである必要はありません。 Camelがスレッドプールを自動的に管理するWire Tapを使って非同期タスクを実行できます。 あるいは、前述のようにコンテンツベースのルーターを使用して判断を下すことができます。
どうやって始めるか?
開始するための最善の方法は、GitHubのIBM i OSS例題リポジトリ、より具体的にはCamelディレクトリに公開されているいくつかの例題を確認することです。 現在ある例題は次のとおりです。
- Kafkaブリッジへのデータキュー(これをDb2-> Kafkaブリッジとして使用するための情報を含む)
- 電子メールブリッジへのメッセージキュー
- ディスク使用量が閾値を超えたときに電子メールを送信するディスクモニターの例
- メッセージを*SYSOPRメッセージ待ち行列に送信するディスクモニターの例
ディスクモニターの例では、以下の幾つかのEIPの使用方法を示しています。
注意喚起になりますが、ほとんどのスタンドアロンJavaプロジェクトは、依存関係をダウンロードして管理するためにMavenを利用します。 プロジェクトの依存関係(例えば様々なCamelコンポーネント)は、Mavenが処理するための中央ファイル(pom.xml)で宣言されます。 例を実行するうちに、Mavenアプリケーションをコンパイルして実行するために必要な基本的なMavenコマンドを学習することになります。
https://kameleon.devには、Kameleonという新しく作成されたプロトタイピングツールもあります。 このツールを使い、Camelバージョン、Javaバージョン、およびいくつかの簡単なプロジェクト属性を選択するだけです。 どのCamelコンポーネントを使用するかを選択すると、Kameleonは単純な定型プロジェクトを生成します。 行わなければならないのは、ルート定義にカスタムロジックを入力することだけです(図6を参照)。
サービスとしてスタンドアロンJavaルートを実行する
IBM iで永続的に実行されるバックグラウンドジョブとして、Javaルートを起動するための幾つかの方法があります。 SBMJOBとQSHを使ってバッチに投入できます(一般的な手法)。 あるいは、SSHセッションから、coreutils-gnuをインストールして、“nohup”コマンド(例えば、「nohup mvnexec:java」)が使えます。 多分もっと良い方法は、サービスコマンダーユーティリティを使用することです。これは、STRTCPSVR/ENDTCPSVRと統合されています。
助けを得る方法は?
オープンソースを使えば、プロジェクトで一人ぼっちということは決してありません。助けを見出すことのできる利用可能ないくつかのチャネルがあります。 一例として、Ryverのコミュニティフォーラムに参加できます(最初にここに参加してください)。 Apache Camelにもとても活発なコミュニティがあり、サポートチャネルはCamel Webサイトに書かれています。私はCamel on Zulip Chatをお勧めします。また、IBM iオープンソースサポートを含む商用サポートも利用可能です。
いずれにせよ、私と同様にCamelは役立つツールだとあなたが理解することを望みます。 少なくともそれは、あなたの保有する一連のスキルへの素晴らしい追加であり、統合活動を迅速に成し遂げるのを可能にします。 例として、私は2ヶ月前にtwitterについてチャーリー・グアリーノとチャットしていました。 Zoomコールでの20分間のライブコーディングで、私はIBM iからツイートを送信していました。
簡単に言うと、Camelはエンタープライズソリューションの様々な部品を接続するための堅牢な方法です。 あなたは何に使うのでしょう? 私達のコミュニティチャットであなたの考えを共有してください!
異種のシステムを統合する基盤技術として、一頃ESBがもてはやされましたが、重装備でコストも高いため、大企業での採用は見られたものの、広く中小企業にまで採用されるには至っていません。しかし、今日のIT環境において、センサーなども含む様々な異種のシステムを統合するというニーズは、企業規模の大小を問わずDXの推進という流れの中で増大しています。Apache Camelは、こうしたニーズを容易かつ低コストで満たしてくれるIBM iでも利用可能なオープンソースのソリューションです。(編集部)