【らびっとえむきゅー】
RabbitMQ とは?
最終更新:
💡 メッセージを預かって「振り分けて届ける」郵便局のような仲介役
AMQPなどのプロトコルに対応したオープンソースのメッセージブローカー。送り手と受け手の間でメッセージを預かり、システム間の非同期通信を実現する。
📌 このページのポイント
Kafkaとどう使い分けるの?
RabbitMQはExchangeでメッセージを柔軟に振り分けて、受け手が処理したらキューから消えるのが基本の動き。注文処理やタスクキューのように「誰かが1回処理すればいい仕事」に向いているよ。Kafkaはイベントを追記型のログとして保存して、複数の受け手があとから何度でも読む用途が得意だね。ただRabbitMQにもStreamsというログ型の機能があるから、要件で比べるのが大事だよ
Exchange って何?
メッセージは消えないの?
設定と使い方しだいだね。Consumerが処理を終えてからack(確認応答)を返し、送り手もパブリッシャー確認で受け取りを確かめれば「少なくとも1回」の配信になる。逆にackを使わないと、途中で失われる可能性があるよ。受け手が再投入なしで拒否したメッセージや期限切れのメッセージは、設定によってデッドレター用の宛先に送ることもできるんだ
少なくとも1回ってことは、2回届くこともあるの?
そうなんだ。たとえばブローカーは受け取ったのに、その確認がネットワークの障害で送り手に届かないと、送り手は再送する。すると同じメッセージが2回入ることがあるよ。だから受け手は、同じメッセージを2回処理しても結果が変わらない(冪等な)作りにしたり、IDで重複を除いたりする必要があるんだ
もっと詳しく知りたい人へ
古い記事にある「Lazy Queueを使う」という設定は、今も必要なの?
現在のRabbitMQでは不要です。公式ドキュメントによると、lazyモードは3.12で廃止され、現在のクラシックキューは既定でメッセージをディスクに書きつつ、少量だけをメモリに置いて配信する動きになっています。lazyのページは過去の参考情報として残されています。キューに大量のメッセージがたまる用途では、クォーラムキューやStreamsが選択肢として案内されています。
まとめ:ざっくりこれだけ覚えればOK!
「RabbitMQ」って出てきたら「メッセージを預かって受け手に振り分けるオープンソースのメッセージブローカー」と思えればだいたいOK!
📖 おまけ:英語の意味
「RabbitMQ」 = Rabbit(ウサギ)+ MQ(Message Queue)
💬 MQはメッセージキュー(Message Queue)の略だよ。Rabbitという名前を選んだ理由は、公式ドキュメントでは確認できなかったんだ