Slide 1

Slide 1 text

実践EIP入門 Apache CamelでEIPを使いこなす 2022.2.9 佐藤 匡剛 @tadayosi レッドハット株式会社 シニアソフトウェアエンジニア 現場から学ぶモデル駆動設計

Slide 2

Slide 2 text

今日話すこと ● EIPってなに? ● EIPとアーキテクチャ ● Apache Camelによる実践 ● 最新の話題

Slide 3

Slide 3 text

EIPってなに? 2003年に出版されたもうひとつの書籍 アプリケーションに非同期メッセージングを導 入するためのパターンランゲージ https://www.enterpriseintegrationpatterns.com/patterns/messaging/ インテグレーション = システムとシステムを接続すること

Slide 4

Slide 4 text

インテグレーションの基本パターン ④ メッセージング ① ファイル転送 ② 共有データベース ③ リモート手続き呼び出し(RPC)

Slide 5

Slide 5 text

メッセージングの何がいいの? リアクティブ 「即応性」「耐障害性」「弾力性」のあるシステムを実現できる 結合性の排除 コード上だけでなく時間的な結合も排除できる(temporal decoupling) 業務モデルの自然な実現 業務がすべて同期的に行われる訳ではない

Slide 6

Slide 6 text

パターンランゲージ ランゲージ = ソフトウェア開発のストーリーを上から下までパターンで表現できるもの 単なるカタログではない(󰢃 GoFデザインパターン) インテグレーションのストーリー: 開発:エンドポイント(送信側) → メッセージ生成 → 通信チャネル → ルーティング    → メッセージ変換 → エンドポイント(受信側) 運用:システム監視・管理

Slide 7

Slide 7 text

Source: https://www.enterpriseintegrationpatterns.com/patterns/messaging/ メッセージングのパターン メッセージ変換 メッセージ生成 メッセージルーティング メッセージングエンドポイント メッセージングチャネル システム管理

Slide 8

Slide 8 text

メッセージングチャネル 通信の形態 ● ポイント・ツー・ポイント(P2P) ● パブリッシュ・サブスクライブ(Publish-Subscribe) 異常系のためのチャネル ● 無効メッセージチャネル(Invalid Message Channel) ● 配信不能メッセージチャネル(Dead Letter Channel) 通信の信頼性 ● 配信保証(Guaranteed Delivery)

Slide 9

Slide 9 text

メッセージ生成 メッセージの種類 ● コマンドメッセージ ● ドキュメントメッセージ ● イベントメッセージ 双方向性 ● リクエストリプライ ● 返信アドレス メッセージ間の関連付け・有効期限 ● 相関識別子 ● メッセージ順序 ● メッセージ期限

Slide 10

Slide 10 text

メッセージルーティング ルーティングの基本 ● コンテンツベースルーター(CBR) ● メッセージフィルター ● 宛先リスト メッセージを増やしたり減らしたり並べ替えたり ● スプリッター ● アグリゲーター ● リシーケンサー 応用編 ● 組立式メッセージプロセッサー ● スキャッター・ギャザー ● 回覧票(Routing Slip)

Slide 11

Slide 11 text

メッセージ変換 メッセージ変換の基本 ● コンテンツエンリッチャー ● コンテンツフィルター 応用編 ● 荷物預かり(Claim Check) ● ノーマライザー ● カノニカルデータモデル

Slide 12

Slide 12 text

メッセージングエンドポイント メッセージ受信の方法 ● ポーリングコンシューマー ● イベント駆動コンシューマー ● 競合コンシューマー ● メッセージディスパッチャー ● 選択コンシューマー トランザクション ● トランザクショナルクライアント メッセージ受信の信頼性 ● 永続サブスクライバー ● 冪等レシーバー

Slide 13

Slide 13 text

システム管理 ルートの管理 ● コントロールバス ● 迂回路(Detour) ● 盗聴(Wire Tap) メッセージの管理 ● メッセージ履歴 ● メッセージストア テスト ● テストメッセージ ● チャネルパージャー

Slide 14

Slide 14 text

アーキテクチャの話 アプリケーションアーキテクチャをどうするか ● 3層アーキテクチャ? ● クリーンアーキテクチャ? ● マイクロサービス? どの視点から見るか ● 腐敗防止層/メッセージングマッパー ● コレオグラフィーとオーケストレーション ● コンテキストマッピング μs μs μs μs μs

Slide 15

Slide 15 text

Javaベース のインテグレーショ ンフレームワーク 流れるようなルーティングDSL EIPの完全実装 300以上 の接続コンポーネント& データフォーマット

Slide 16

Slide 16 text

サポートするランタイム Spring Boot Quarkus WildFly(Jakarta EE) Apache Karaf(OSGi) Kubernetes/OpenShift(Camel K)

Slide 17

Slide 17 text

300以上のコンポーネント&データフォーマット対応

Slide 18

Slide 18 text

EIPの完全実装 パターンってライブラリ化していいんだっけ? 一般にデザインパターンのコード再利用はアンチパターン しかしEIPはソリューション を再利用できる コンテキスト と問題の検討が重要!

Slide 19

Slide 19 text

コンテンツベースルーター

Slide 20

Slide 20 text

サンプル①:Twitterのログをローカルに書き出す

Slide 21

Slide 21 text

サンプル②:WebサービスのJSONデータを加工する Globe icon made by Vitaly Gorbachev from www.flaticon.com

Slide 22

Slide 22 text

DEMO

Slide 23

Slide 23 text

Apache CamelでEIPをはじめるには? 公式のサンプルプロジェクトを動かしてみる ● https://github.com/apache/camel-examples ● https://github.com/apache/camel-spring-boot-examples ● https://github.com/apache/camel-quarkus-examples 日本語で読めるApache Camel開発ガイド(Red Hatアカウント不要) ● https://access.redhat.com/documentation/ja-jp/red_hat_fuse/7.10/html/a pache_camel_development_guide/index ブログ記事 ● Apache Camelによるマイクロサービスの開発方法 https://qiita.com/tadayosi/items/e310c825689a1ed69b08 ● Apache CamelとJBangによるインテグレーションスクリプティング https://zenn.dev/tadayosi/articles/d56bb322dec6f6

Slide 24

Slide 24 text

最新の話題 - Apache Camel K Source: https://www.nicolaferraro.me/2018/10/15/introducing-camel-k/ “K”は Kubernetes / Knative の K OperatorベースのクラウドネイティブなApache Camel

Slide 25

Slide 25 text

DEMO

Slide 26

Slide 26 text

END