Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
実践EIP入門 ― Apache CamelでEIPを使いこなす
Search
Tadayoshi Sato
August 29, 2024
Programming
0
180
実践EIP入門 ― Apache CamelでEIPを使いこなす
「現場から学ぶモデル駆動の設計 - 実践!インテグレーションパターン」発表資料。
https://modeling-how-to-learn.connpass.com/event/233934/
Tadayoshi Sato
August 29, 2024
Tweet
Share
More Decks by Tadayoshi Sato
See All by Tadayoshi Sato
Domain-Driven Design Retrospective
tadayosi
0
36
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
tadayosi
0
39
ブレイクスルーと文学 - The Breakthrough and Literature
tadayosi
0
31
JJBUG 2013 - SwitchYard
tadayosi
0
25
Red Hat の日本でできるグローバルな働き方
tadayosi
0
35
Red Hat Tech Night 2018 - Apache Camel
tadayosi
0
16
Red Hat Tech Night 2019.5 - Camel 3 and Beyond...
tadayosi
0
21
Other Decks in Programming
See All in Programming
CSC509 Lecture 10
javiergs
PRO
0
160
AI時代に必須!状況言語化スキル / ai-context-verbalization
minodriven
2
320
CSC509 Lecture 07
javiergs
PRO
0
250
AIと人間の共創開発!OSSで試行錯誤した開発スタイル
mae616
2
870
なんでRustの環境構築してないのにRust製のツールが動くの? / Why Do Rust-Based Tools Run Without a Rust Environment?
ssssota
14
47k
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
18
9.5k
AI駆動開発カンファレンスAutumn2025 _AI駆動開発にはAI駆動品質保証
autifyhq
0
120
EMこそClaude Codeでコード調査しよう
shibayu36
0
570
SwiftDataを使って10万件のデータを読み書きする
akidon0000
0
250
Making Angular Apps Smarter with Generative AI: Local and Offline-capable
christianliebel
PRO
0
100
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
200
外接に惑わされない自システムの処理時間SLIをOpenTelemetryで実現した話
kotaro7750
0
160
Featured
See All Featured
The Invisible Side of Design
smashingmag
302
51k
We Have a Design System, Now What?
morganepeng
54
7.9k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Unsuck your backbone
ammeep
671
58k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
KATA
mclloyd
PRO
32
15k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Why Our Code Smells
bkeepers
PRO
340
57k
Balancing Empowerment & Direction
lara
5
710
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
2
270
Transcript
実践EIP入門 Apache CamelでEIPを使いこなす 2022.2.9 佐藤 匡剛 @tadayosi レッドハット株式会社 シニアソフトウェアエンジニア 現場から学ぶモデル駆動設計
今日話すこと • EIPってなに? • EIPとアーキテクチャ • Apache Camelによる実践 • 最新の話題
EIPってなに? 2003年に出版されたもうひとつの書籍 アプリケーションに非同期メッセージングを導 入するためのパターンランゲージ https://www.enterpriseintegrationpatterns.com/patterns/messaging/ インテグレーション = システムとシステムを接続すること
インテグレーションの基本パターン ④ メッセージング ① ファイル転送 ② 共有データベース ③ リモート手続き呼び出し(RPC)
メッセージングの何がいいの? リアクティブ 「即応性」「耐障害性」「弾力性」のあるシステムを実現できる 結合性の排除 コード上だけでなく時間的な結合も排除できる(temporal decoupling) 業務モデルの自然な実現 業務がすべて同期的に行われる訳ではない
パターンランゲージ ランゲージ = ソフトウェア開発のストーリーを上から下までパターンで表現できるもの 単なるカタログではない( GoFデザインパターン) インテグレーションのストーリー: 開発:エンドポイント(送信側) → メッセージ生成
→ 通信チャネル → ルーティング → メッセージ変換 → エンドポイント(受信側) 運用:システム監視・管理
Source: https://www.enterpriseintegrationpatterns.com/patterns/messaging/ メッセージングのパターン メッセージ変換 メッセージ生成 メッセージルーティング メッセージングエンドポイント メッセージングチャネル システム管理
メッセージングチャネル 通信の形態 • ポイント・ツー・ポイント(P2P) • パブリッシュ・サブスクライブ(Publish-Subscribe) 異常系のためのチャネル • 無効メッセージチャネル(Invalid Message
Channel) • 配信不能メッセージチャネル(Dead Letter Channel) 通信の信頼性 • 配信保証(Guaranteed Delivery)
メッセージ生成 メッセージの種類 • コマンドメッセージ • ドキュメントメッセージ • イベントメッセージ 双方向性 •
リクエストリプライ • 返信アドレス メッセージ間の関連付け・有効期限 • 相関識別子 • メッセージ順序 • メッセージ期限
メッセージルーティング ルーティングの基本 • コンテンツベースルーター(CBR) • メッセージフィルター • 宛先リスト メッセージを増やしたり減らしたり並べ替えたり •
スプリッター • アグリゲーター • リシーケンサー 応用編 • 組立式メッセージプロセッサー • スキャッター・ギャザー • 回覧票(Routing Slip)
メッセージ変換 メッセージ変換の基本 • コンテンツエンリッチャー • コンテンツフィルター 応用編 • 荷物預かり(Claim Check)
• ノーマライザー • カノニカルデータモデル
メッセージングエンドポイント メッセージ受信の方法 • ポーリングコンシューマー • イベント駆動コンシューマー • 競合コンシューマー • メッセージディスパッチャー
• 選択コンシューマー トランザクション • トランザクショナルクライアント メッセージ受信の信頼性 • 永続サブスクライバー • 冪等レシーバー
システム管理 ルートの管理 • コントロールバス • 迂回路(Detour) • 盗聴(Wire Tap) メッセージの管理
• メッセージ履歴 • メッセージストア テスト • テストメッセージ • チャネルパージャー
アーキテクチャの話 アプリケーションアーキテクチャをどうするか • 3層アーキテクチャ? • クリーンアーキテクチャ? • マイクロサービス? どの視点から見るか •
腐敗防止層/メッセージングマッパー • コレオグラフィーとオーケストレーション • コンテキストマッピング μs μs μs μs μs
Javaベース のインテグレーショ ンフレームワーク 流れるようなルーティングDSL EIPの完全実装 300以上 の接続コンポーネント& データフォーマット
サポートするランタイム Spring Boot Quarkus WildFly(Jakarta EE) Apache Karaf(OSGi) Kubernetes/OpenShift(Camel K)
300以上のコンポーネント&データフォーマット対応
EIPの完全実装 パターンってライブラリ化していいんだっけ? 一般にデザインパターンのコード再利用はアンチパターン しかしEIPはソリューション を再利用できる コンテキスト と問題の検討が重要!
コンテンツベースルーター
サンプル①:Twitterのログをローカルに書き出す
サンプル②:WebサービスのJSONデータを加工する Globe icon made by Vitaly Gorbachev from www.flaticon.com
DEMO
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
最新の話題 - Apache Camel K Source: https://www.nicolaferraro.me/2018/10/15/introducing-camel-k/ “K”は Kubernetes /
Knative の K OperatorベースのクラウドネイティブなApache Camel
DEMO
END