Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RabbitMQを用いたイベント駆動アーキテクチャの紹介
Search
otokunaga2
July 02, 2022
Technology
640
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RabbitMQを用いたイベント駆動アーキテクチャの紹介
JJUG CCC 2022 Springの登壇時の資料になります。
otokunaga2
July 02, 2022
Other Decks in Technology
See All in Technology
LLM Content Moderationを支える評価・改善ループの実践
suikabar
2
290
トークン化預金DCJPYの取り組みと活用ユースケース
finengine
0
220
CTO Night|NotionのAIエージェントとFDE
kzkhykw1991
0
300
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
4
660
【データ横丁主催】AI エージェント時代のTranslytical Data Platform
shisyu_gaku
0
210
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
1
380
freeeにおける AI を用いた ブラウザ動作確認の自動化の取り組み
freee
PRO
0
120
How to Design Configuration for Rails Applications
willnet
1
1.1k
DevelopersIO 2026 Tokyo 現時点の衛星通信サービスの現状を整理してみる
maroon1st
0
140
こんにちは!SORACOM です & IoT とは【SORACOM UG 東北 in 八戸】
soracom
PRO
0
170
その Valkey 使いこなしていますか?
onk
PRO
5
1.8k
DBについての基礎説明(MySQL編) - コロプラ 2026年度 新卒研修
colopl
0
160
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Practical Orchestrator
shlominoach
192
12k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Abbi's Birthday
coloredviolet
4
10k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
350
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
740
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Transcript
神戸大学大学院システム情報学研究科・ CS24 RabbitMQを用いた イベント駆動アーキテクチャの紹介 徳永 清輝(Seiki Tokunaga) 1
免責事項と自己紹介 ▪ 本発表は、現在の所属組織とは関係なく、私個人の見解 を発表するものです。所属する組織の立場、意見、戦略 を代表するものではありません。 ▪ 掲載しているRabbitMQの説明の図の1部については RabbitMQをクラウドサービスとして提供している CloudAMQPに了承をとりWebサイトより引用しています。 ▪
発表者について • 徳永清輝 (Twitter, GitHub @otokunaga2) • 業務:普段は研究所で高齢者支援ロボットシステムの設計・開 発・運用に従事 • RabbitMQをシステム開発に利用(5年ぐらい?) 2
想定聴講者 ▪ イベント駆動アーキテクチャをこれからトライしてみよ うと思っている方 ▪ ソフトウェアアーキテクチャの基礎の14章イベント駆動 アーキテクチャを読んでもう少し実装イメージをつけた いと思われた方 ▪ これまでRabbitMQは聞いたことがあるけど使ったことが
なく、気になるという方 3
イベント駆動アーキテクチャ ▪ 高度にスケーラブルで高パフォーマンスなアプリケーシ ョンを実現するために用いられる分散非同期型のアーキ テクチャスタイル。※1 ▪ 適応性に優れており、小規模なアプリケーションにも大 規模で複雑なアプリケーションにも用いることが可能。 ▪ 単体のアーキテクチャスタイルではなく、例えばリクエ
スト・レスポンスのアーキテクチャと組み合わせてハイ ブリッドな構成にもできる • 既存システムと疎結合にシステム連携する 4 ※ソフトウェアアーキテクチャの基礎 エンジニアリングより抜粋
RabbitMQについて ▪ OSSとして開発されているメッセージキューイングソフト ウェア(メッセージブローカーとも呼ばれる) ▪ AMQP-0-9-1というプロトコルをベースに一部独自拡張し て実装 ▪ Erlangという関数型プログラミング言語で開発されてい る
▪ クライアントライブラリとして多くのプログラミング言 語をサポート(Java, Spring Boot, Python, Node.js) 5 ※Reference: https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.html
RabbitMQの利用事例 ▪ 広告配信などの一斉配信 ▪ バックエンドで処理に時間を要する処理 • PDFの生成 6
RabbitMQでの重要な用語 ▪ コネクション • アプリケーションとRabbitMQブローカーの通信経路(TCP) ▪ チャンネル • コネクション内で作成する仮想的な通信経路。データを送受信する際に はチャンネル経由でデータ通信を行う
• コード例: コネクションからチャンネルを作成 ▪ エクスチェンジ • メッセージのキューへの配送経路 ▪ キュー • メッセージを末尾に送り、先頭から取り出す • FIFO(first in first out) ▪ バインディング • エクスチェンジとキューの紐づけを行う 7
Producer(プロデューサ)・Consumer(コンシューマ) ▪ データを送受信するプロセスをそれぞれProducer(プロ デューサ/生産者)と Consumer(コンシューマ/消費者) と呼ばれる ▪ プロデューサ • メッセージを送信するプロセス
⮚ PDFを生成依頼するメッセージを送信 ▪ コンシューマ • メッセージを受信して何らかの処理を実施するプロセス • データを処理して正常処理ならば ⮚ ack(応答)をRabbitMQサーバに対して返却する→キューからメッ セージを除去 8
Exchange(エクスチェンジ) ▪ Exchangeはメッセージングの通信経路 • 直接キューにメッセージを送信しない点が特徴的でかつ柔軟な ルーティングを実現 • Exchangeとbindingしているキューに配送される ▪ Direct
Exchange • 直接対象となるキューに配信 ▪ Topic Exchange • 特定のトピック別に配信先を分ける(スポーツニュース、天気) ▪ Fanout: 一斉に通知 • 広告配信 9
エクスチェンジ、キューの 関連付け(Binding) ▪ エクスチェンジとキューはバインディングと呼ばれる仮 想的な関連付けによって配送先が決定する • 特にトピックエクスチェンジでは、ルーティングキーを指定する ことでより詳細に配送ルールをコントロールできる ⮚ 例
良い天気の情報を良い天気を格納するためのキュー • ルーティングキーは.(ドット)区切りで細かくルールを指定で きる ⮚ 例 weather.good, weather.bad 10
書籍購入イベントの処理例(一部省略) 11 書籍の購入 (Producer) Order Placement (Exchange) order-created Notification (Consumer)
Payment (Consumer) Inventory (Consumer) order-created order-created Warehouse (Consumer) inventory-updated
デモ動画 12
デモ 13
イベント駆動設計のメリットおよびデメリット ▪ メリット • 配送経路(Exchange)などが比較的容易 ⮚ 配送経路を追加して拡張することも可能 • パフォーマンスやスケールの面でメリットをもたらす ▪
デメリット • バインディングの管理が煩雑になりがち ⮚ 図などにまとめながら整理していくと良い ⮚ エクスチェンジとキューの命名なども含めて設計することが重要 • ユーザIDをキューの名前に含めてモニタリングをわかりやすく する等 • 異常系の処理(データ同期、デバッグ)が複雑になる ⮚ “サービス間の通信スタイルは、標準的には同期通信を選択肢、必要 に応じて非同期通信を選ぼう” 14 ※ソフトウェアアーキテクチャの基礎 エンジニアリングより抜粋
まとめ ▪ イベント駆動アーキテクチャについてRabbitMQを題材に 紹介しました。 ▪ RabbitMQの基本機能を紹介 • ※基本機能の紹介で力尽きてしまいました ▪ イベント駆動アーキテクチャの実装例の一部を在庫管理
の例をもとに紹介 15
参考資料 ▪ RabbitMQ • RabbitMQの使い方をハンズオン形式で学べるのでおすすめ ⮚ https://www.rabbitmq.com/tutorials/tutorial-one-java.html • 以下の記事が網羅的でとても分かりやすいです ⮚
https://blog.mookjp.io/memo/rabbitmq-learning/ ▪ Springに関する導入・参考資料 • RabbitMQ でメッセージング ⮚ https://spring.pleiades.io/guides/gs/messaging-rabbitmq/ • Spring integrationを用いた実装サンプル ⮚ spring-projects/spring-integration-samples ▪ イベント駆動設計等アーキテクトについて • ソフトウェアアーキテクチャの基礎~ エンジニアリングに基づく体系的アプローチ 16