delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

RabbitMQのチュートリアルをやってみる(その1)

概要

以下のRabbitMQのチュートリアルをやってみることにした。
www.rabbitmq.com

チュートリアルはいくつかの言語で公開されていて、Python版も公開されている。

背景

Python界隈ではCeleryというタスクキューのライブラリが使われているのをよく見かけるので、Celeryを勉強しようと思ってチュートリアルをやろうとしたのだが、
docs.celeryproject.org

CeleryはRabbitMQやAWS SQSなどのメッセージングシステムの使用を前提としている。

そもそも、メッセージングシステムというものをちゃんと理解していない気がしたので、まずはそこから勉強しようと思って、RabbitMQのチュートリアルをやってみることにした。

Intoroductionを読む。

まずは、以下のIntoroductionをざっと読んだ。
www.rabbitmq.com

メッセージブローカーとは、郵便システムにおける「郵便ポスト」であり「郵便局」であり「郵便配達員」であるという例えが分かりやすかった。

You can think about it as a post office: when you put the mail that you want posting in a post box, you can be sure that Mr. or Ms. Mailperson will eventually deliver the mail to your recipient. In this analogy, RabbitMQ is a post box, a post office and a postman.

RabbitMQのDockerコンテナを立てる。

公式がDockerコンテナを提供しているので、それを使用する。

hub.docker.com

コンテナは一つしか使わないが、起動しやすいようにDocker Composeにした。
最終的なdocker-compose.ymlは以下

version: "3"
services:
    rabbitmq_server:
        image: rabbitmq:3-management
        ports: 
            - "5672:5672"
            - "15672:15672"
        environment: 
            RABBITMQ_DEFAULT_USER: admin
            RABBITMQ_DEFAULT_PASS: password

注意点

いくつか知っておかないとハマるポイントがあった。

コンテナの種類が2種類ある。

RabbitMQのDockerコンテナは

  • RabbitMQ単体のもの
  • 管理画面がついているもの

の2種類が提供されている。

管理画面のイメージは以下

f:id:kamatimaru:20210211172636p:plain

コンテナのタグの命名規約が以下のように異なる。

  • RabbitMQ単体のもの: 「3」のように数字のみ
  • 管理画面がついているもの: 「3-management」のように後ろに「-management」がつく

チュートリアルをやるときは、プログラムを実行しながら管理画面でRabbitMQの状態を確認できるので、管理画面がついている方を使った方がいいと思う。

portは2つ指定する

「management」タグのコンテナを使用する場合は、

  • RabbitMQが起動するポート
  • 管理画面のポート

でコンテナ起動時にポートを2種類指定する必要がある。

以下、該当箇所。(5672が本体で15672が管理画面)

ports: 
    - "5672:5672"
    - "15672:15672"
管理画面のログイン情報を設定する(任意)

管理画面にはuser/passwordが設定されている。
デフォルトでは「guest/guest」らしいが、慣れているadmin/passwordに変更する。

以下、該当箇所。

environment: 
    RABBITMQ_DEFAULT_USER: admin
    RABBITMQ_DEFAULT_PASS: password

コンテナを立ち上げることができたので、次回からチュートリアルをやっていく。