Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RabbitMQを用いたイベント駆動アーキテクチャの紹介
Search
otokunaga2
July 02, 2022
Technology
1
500
RabbitMQを用いたイベント駆動アーキテクチャの紹介
JJUG CCC 2022 Springの登壇時の資料になります。
otokunaga2
July 02, 2022
Tweet
Share
Other Decks in Technology
See All in Technology
形式手法特論:CEGAR を用いたモデル検査の状態空間削減 #kernelvm / Kernel VM Study Hokuriku Part 8
ytaka23
2
450
[デモです] NotebookLM で作ったスライドの例
kongmingstrap
0
110
【AWS re:Invent 2025速報】AIビルダー向けアップデートをまとめて解説!
minorun365
4
480
AWS CLIの新しい認証情報設定方法aws loginコマンドの実態
wkm2
6
640
エンジニアリングをやめたくないので問い続ける
estie
2
480
Kubernetes Multi-tenancy: Principles and Practices for Large Scale Internal Platforms
hhiroshell
0
120
研究開発×プロダクトマネジメントへの挑戦 / ly_mlpm_meetup
sansan_randd
0
100
AI駆動開発における設計思想 認知負荷を下げるフロントエンドアーキテクチャ/ 20251211 Teppei Hanai
shift_evolve
PRO
2
210
AWSを使う上で最低限知っておきたいセキュリティ研修を社内で実施した話 ~みんなでやるセキュリティ~
maimyyym
2
220
re:Invent 2025 ~何をする者であり、どこへいくのか~
tetutetu214
0
180
5分で知るMicrosoft Ignite
taiponrock
PRO
0
250
Microsoft Agent 365 を 30 分でなんとなく理解する
skmkzyk
1
1k
Featured
See All Featured
Fireside Chat
paigeccino
41
3.7k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Building Applications with DynamoDB
mza
96
6.8k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.2k
Code Review Best Practice
trishagee
74
19k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
We Have a Design System, Now What?
morganepeng
54
7.9k
Documentation Writing (for coders)
carmenintech
76
5.2k
How to Ace a Technical Interview
jacobian
280
24k
Being A Developer After 40
akosma
91
590k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Making Projects Easy
brettharned
120
6.5k
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