AWS SQSを使ったJobQueueシステムを組んでみた
サンプル実装
モチベーション
SQSを使ったジョブキューシステムをつくってみたかった
(実装コストとかの肌感を知りたい)
実装したもの
処理の流れは以下の通り。
- Publisherがランダムな整数を生成
- SQSにジョブとしてメッセージを投げる
- Subscriberがジョブを受け取り、1で生成した整数を素因数分解
- SubscriberがDynamoDBに結果を登録
(大した計算時間になっていなくて、ジョブキューシステムの適切な例なのか?と問われるとモゴモゴ...)
簡単に動作、理解できるようにAWS環境はlocalstackで再現し、プログラムはPythonで書いた。
得られた知見
複数のSubscriberがいる場合や、バグや異常なメッセージの取り扱い
- 複数のSubscriberが二重に取得しないようにVisibilityTimeoutを設定
- エラーを起こしたメッセージはRedrivePolicyでDead Letter Queueを指定するだけ。
このあたりの複雑な機構がSQS + boto3だとかなりお手軽に実装できて良き。