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
RabbitMQを用いたイベント駆動アーキテクチャの紹介
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
otokunaga2
July 02, 2022
Technology
590
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
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
240
手塩にかけりゃいいってもんじゃない
ming_ayami
0
610
スタートアップにAmazon EKSは早すぎる? マルチプロダクト戦略を加速する Platform Engineeringの実践 / Is Amazon EKS Too Soon for Startups? Practical Platform Engineering to Accelerate a Multi-Product Strategy
elmodev09
0
370
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.5k
2026 TECHFRESH 畢業分享會 - 開發日常大解密!從領域驅動到企業級上線
line_developers_tw
PRO
0
1.3k
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
130
ぼっちではじめた登壇が「51名」「241件」の発信に化けた
subroh0508
1
240
IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026
gotok365
5
1.1k
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
270
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
220
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
2
680
日本 Fintech 未来予測レポート 2027〜2028年(手動編集版)
8maki
1
2.5k
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
390
Music & Morning Musume
bryan
47
7.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
A designer walks into a library…
pauljervisheath
211
24k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
290
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
590
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
170
WENDY [Excerpt]
tessaabrams
11
38k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
950
Accessibility Awareness
sabderemane
1
140
The Spectacular Lies of Maps
axbom
PRO
1
820
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