LaravelでFanoutパターン
ユースケース
- あるアプリケーションで発火した1つのイベントを複数のアプリケーションでサブスクライブしたい
- CQRSとかで
ソリューション
Laravel用ライブラリ
サンプルアプリケーション
- terraformで立ち上がるSNS/SQSインフラ一式
- アプリケーション2つ
app_a
: publisher / subscriberapp_b
: subscriber
処理の流れ
- ユーザが
app_a
の/publish
にアクセスする app_a
はSNSメッセージをトピックにpublishする- SNSは
app_a
,app_b
用のSQSキューにメッセージを複製してpushする app_a
,app_b
のジョブワーカーは自分のSQSキューのメッセージをpullする (subscribe)app_a
,app_b
は、メッセージに含まれているSNSのarnから実行すべきジョブを特定し、ジョブを実行する。
ジョブの特定のためにarnや決めのフィールドの値(このライブラリではSubject)を使うのがミソのよう。
Laravel Worker
one interesting option is to tie the SNS Topic ARN to a specific Job class.