🐰
RabbitMQ のメッセージを永続化するポイント
docker 環境だけでお手軽に確認することができます
ポイントまとめ
- 永続化しないとサービス停止時にメッセージが失われてしまう
- キュー作成時に永続化する (デフォルトで永続化するが明示しておいたほうがよい)
- publish 時にもメッセージを永続化する
compose.yml
services:
mq:
hostname: rabbitmq
container_name: rabbitmq
image: rabbitmq:management
ports:
- 5672:5672
- 15672:15672
volumes:
- data:/var/lib/rabbitmq
volumes:
data:
volumes
で永続化する準備をしています
サービス起動
docker compose up -d
ブラウザで localhost:15672
にアクセス
Username:guest
Password:guest
で管理画面にログイン
キューの作成
test.q
という名前の永続化キューを作成
$ docker compose exec mq rabbitmqadmin declare queue name=test.q durable=true auto_delete=false
管理画面にキューに test.q
が作成されたことを確認
※ Messages.Persistent は +/- で増やしておく
動作確認
キューにメッセージをpub
docker compose exec mq rabbitmqadmin publish routing_key=test.q payload="hello this is not durable"
キューに永続化メッセージをpub
docker compose exec mq rabbitmqadmin publish routing_key=test.q payload="hello this is durable" properties='{"delivery_mode":2}'
Message.Persistentが1に
キューの内容をを確認
確認のため ack はしない
$ docker compose exec mq rabbitmqadmin get queue=test.q count=2
+-------------+----------+---------------+---------------------------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | properties | redelivered |
+-------------+----------+---------------+---------------------------+---------------+------------------+------------+-------------+
| test.q | | 1 | hello this is not durable | 25 | string | | False |
| test.q | | 0 | hello this is durable | 21 | string | | False |
+-------------+----------+---------------+---------------------------+---------------+------------------+------------+-------------+
pub したメッセージがそれぞれ入っていることが確認できる
サービス再起動
docker compose restart
再度キューを確認
$ docker compose exec mq rabbitmqadmin list queues
+--------+----------+
| name | messages |
+--------+----------+
| test.q | 1 |
+--------+----------+
メッセージが減っている
再度キューの内容を確認
$ docker compose exec mq rabbitmqadmin get queue=test.q count=2
+-------------+----------+---------------+-----------------------+---------------+------------------+-------------+
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | redelivered |
+-------------+----------+---------------+-----------------------+---------------+------------------+-------------+
| test.q | | 0 | hello this is durable | 21 | string | False |
+-------------+----------+---------------+-----------------------+---------------+------------------+-------------+
永続化したメッセージはサービスを再起動してもキューに残っていることが確認できる
確認まとめ
これでサービス再起動を気にせず気軽にメッセージキューにタスクを入れることができます
Enjoy!!
Discussion