Posted at
JavaDay 7

Apache Camelに関する機能のまとめ (ドキュメントへのリンク集)

More than 3 years have passed since last update.


Apache Camelに関して

http://camel.apache.org/

ダウンロード

http://camel.apache.org/download.html

軽量なEIPフレームワーク(メッセージ処理フレームワーク)。

http://www.eaipatterns.com/toc.html

色々な処理に関して考慮されたフレームワーク。

MVCが画面系の表なフレームワークで、EIPフレームワークは裏方のフレームワーク。

画面処理がないのに頑張ってMVCフレームワークで裏方なプログラムを書いている?

(逆にCamelはViewという概念が無いので画面系は弱い)

SAP HANA Cloud Integration という製品とかでも Apache Camelベースで作られてたりする。

Camel dev認定試験もあったり

http://www.redhat.com/ja/services/certification/rhcoe-camel-development

開発が進んでいるかどうかはディスカッションを見れば分かる。

http://camel.465427.n5.nabble.com/

軽量なので単なるライブラリとして見てもいいぐらい。

単体でも動くし、Tomcat等のコンテナに載せても動く。

試験は単体で、実際はコンテナサーバー動作というやり方でも問題ない。


なぜメッセージ処理フレームワークが知られていないのか?

そもそもライセンスが高い分野の製品 (「EAI」で検索)

--> 費用対効果的にエンタープライズでミッションクリティカルな分野でしか使われない

--> 結果的に誰も知らな〜い

そして手軽なオープンソースになったけど、そもそも使い方わからん!という分野。

これが気軽に使えるようになったから使わない手はない。

(注意)EAIは状態保持できるステートフルという高度なモデルもできるが、Camelはステートフルの仕組みはない。


コンポーネント

設定でいろいろなシステムに接続できる標準で実装されているライブラリ。

http://camel.apache.org/components.html

必要に応じて取捨選択できる。

ver.2.14での追加コンポーネント


  • camel-ahc-ws

  • camel-atmosphere-websocket

  • camel-box

  • camel-dropbox

  • camel-metrics

  • camel-netty4

  • camel-netty4-http

  • camel-olingo2

  • camel-openshift

  • camel-google-drive

  • camel-gora

  • camel-rest (in camel-core)

  • camel-spark-rest

  • camel-schematron

  • camel-swagger

ver.2.15での追加コンポーネントは今のところ(開発中)


  • camel-beanstalk - for working with Amazon Beanstalk jobs.

  • camel-chunk - for templating with Chunk engine.

  • camel-docker - to communicate with Docker.

  • camel-github - for integrating with github(プルリク検知、プルリククローズ、コメントなど)

  • camel-google-calendar - provides access to Google Calendar via the Google Calendar Web APIs.

  • camel-google-mail - provides access to Gmail via the Google Mail Web APIs.

  • camel-jira - for integrating with JIRA issue tracker

  • camel-scr - for using Camel with SCR (OSGi declarative services) on OSGi containers such as Apache Karaf

  • camel-spring-boot - for using Camel with Spring Boot

  • camel-test-spring40 - for testing with Spring 4.0.x. camel-test-spring is for Spring 4.1.x onwards.


ルート

コンポーネントをどういう順番で処理させるかを決めるストーリー的な仕組み。

詳細な処理ストーリーを分離できるので、コードが見やすくなる。

ルートの書き方は色々

ルートの機能としは下記のようなものがある。


  • 条件分岐



  • スロットル



  • 繰り返し


    • http://camel.apache.org/splitter.html

    • リスト形式のデータを繰り返して処理

    • ストリーム形式のデータを処理

    • マルチスレッドで処理

    • カンマ区切りで繰り返し処理など、繰り返しの区切りを指定

    • 繰り返し処理中のメッセージ集約実装



  • ロードバランサ、フェールオーバー、サーキットブレーカー、マルチキャスト


    • http://camel.apache.org/load-balancer.html

    • ラウンドロビン、ランダム、加重分散

    • エラーが発生した時に別の分岐に流す

    • 何度もエラーが発生すると、そもそもエラーが発生する分岐にデータを流さない。(エラー処理のコストは高いので)

    • 全ての分岐にデータを流す



  • 集約


    • http://camel.apache.org/aggregator.html

    • 複数のデータを待ち受けて1回の処理にまとめる

    • 指定時間だけ待ってデータをまとめる

    • 指定件数だけ待ってデータをまとめる

    • タイムアウト時間が来たら条件に構わずデータをまとめる

    • 集約するキーを指定して、種類が一緒のデータだけ集約する



  • サンプリング



  • ストリームキャッシュ


    • http://camel.apache.org/stream-caching.html

    • 大きいデータをメモリで流通させるとメモリ不足になるので、処理中のデータをファイルで保持する仕組み

    • 例:ファイルのアップロード・ダウンロード等は大容量の場合はファイルで保持して、小さい場合はメモリで持ったりする仕組み




ルート処理の開始


ポーリング型


リスナ型


エラーハンドリング・トランザクション

http://camel.apache.org/exception-clause.html


  • トランザクション処理 --> ロールバック、スキップ処理、即コミット

  • リトライ◯回、1〜◯回目までは◯秒間隔でリトライ、その後は◯秒間隔でリトライ。

  • エラーログ(スタックトレースではなくパンくずリスト形式で出力)

  • エラー用ルート


型変換

http://camel.apache.org/type-converter.html


  • TypeConverterという機能で元々の型を意識させない作りができる

データ変換はTypeConverterに登録しておいて、あとは好きなタイミングで使うだけ。

コンポーネントは元々の型を意識しない作りができる。

変換できない場合はNo TypeConverterとしてエラーになる

独自の業務データ(クラス)に関しても、変換を実装して登録しておけばよい。

業務ロジックと分離した作りができる。

例 



exchange.getIn().setBody("123");

int i = exchange.getIn().getBody(int.class);


データ変換

http://camel.apache.org/data-format.html


  • JSON

  • XML

  • CSV

  • 固定長

  • zip

  • base64

  • RSS

  • iCal

  • Barcode?

などなどのデータ変換ができる。

marshal(), unmarshal() のメソッドで切り替え

例えばJSONの場合下記の両方あるという意味(片方の変換しかないライブラリもある)


  • JSON --> Object

  • Object --> JSON

その他セキュリティ関連(SSLなど)の情報に関しては


環境変数やプロパティファイルの処理

http://wiki.buildria.com/camel/basis/property

http://camel.apache.org/using-propertyplaceholder.html

コンポーネントの設定にできる


  • パスワード

  • ディレクトリなどの環境情報

  • 接続先HTTP URL、PATH


運用

全てが手作りだと運用まで考えた作りまで手が回らないのでフレームワークに任せる


グレースフルな停止

http://camel.apache.org/graceful-shutdown.html

ルートで処理中のデータがあったら処理(スレッド)を止めない仕組み。

タイムアウト設定もできる。

inflight exchanges = 処理中のメッセージ数


自動起動OFF, ルートの起動順序

http://camel.apache.org/configuring-route-startup-ordering-and-autostartup.html

通常のアプリは起動したら勝手に動き出すものだけど、一部分だけ起動後はアプリの動作をしてもらいたくないパターンもある。

起動順序を制御したいパターンも出てくる。


ルート起動停止の自動化


状態確認


ツール



  • http://hawt.io/


    • JMXでの情報取得、操作

    • Camelのルート状態を取得・起動・停止・一時停止

    • Camelをトレースモードに切り替え、流通データの動的取得




試験

テストの仕組みが充実していて、ここの枠だけだと大変なので別に説明

テスト関連のドキュメント