RabbitMQ の基本的な構成要素
RabbitMQ においてメッセージは主に以下のような流れを経る
AMQP 0-9-1 Model in Brief
The AMQP 0-9-1 Model has the following view of the world: messages are published to exchanges, which are often compared to post offices or mailboxes. Exchanges then distribute message copies to queues using rules called bindings. Then the broker either deliver messages to consumers subscribed to queues, or consumers fetch/pull messages from queues on demand.
When publishing a message, publishers may specify various message attributes (message meta-data). Some of this meta-data may be used by the broker, however, the rest of it is completely opaque to the broker and is only used by applications that receive the message. - AMQP 0-9-1 Model Explained
日本語で整理すると RabbitMQ を通したメッセージのやりとりには主に以下のような役者が登場することとなる
- Publisher: メッセージの送信者
- Publisher は exchange, routingkey, メッセージ本文を指定して送信する
- Exchange: 受信したメッセージを bindings というルールに基づいて Queue にコピーする役割を持つ
- queue との紐付け構造として fanout exchange, direct exchange, topic exchange, header exchange のいずれかを選択できる(詳細は Exchanges and Exchange Types を参照)
- Queue: メッセージが Consumer によって処理されるまで格納する役割を持つ
- Consumer: メッセージの受信者
RabbitMQ の導入
see also: RabbitMQ Tutorials
OSX への RabbitMQ の導入
単純に brew で導入可能: The Homebrew RabbitMQ Formula
brew install rabbitmq
キューの作成
キューには以下のような設定がある
- Type
- Classic
- Quorum
- Stream
- Durability
- Durable
- Transient
- Auto delete: すべての Consumer の接続が切断されたのちに自動的にキューを削除するオプション
- Arguments
- MessageTTL
- Auto expire
- Overflow behaviour
- Single active consumer
- Dead letter exchange
- Dead letter routing key
- Max length
- Max length bytes
- Maximum priority
- Lazy mode
- Master locator
RabbitMQ の操作
rabbitmqadmin を利用した基本的な操作
- rabbitmqadmin コマンド経由で RabbitMQ HTTP API を叩いて各種操作が可能
- OSX には brew install rabbitmq で手軽に導入可能
- see also: Management Command Line Tool
環境変数の設定
$ HOST=
$ USERNAME=
$ PASSWORD=
Publish
$ rabbitmqadmin --host $HOST --port 443 --username=$USERNAME --password=$PASSWORD --ssl publish routing_key=Test payload="hello"
Message published
List Queues
$ rabbitmqadmin --host $HOST --port 443 --username=$USERNAME --password=$PASSWORD --ssl list queues name messages
+------+----------+
| name | messages |
+------+----------+
| Test | 1 |
+------+----------+
Cousume
$ rabbitmqadmin --host $HOST --port 443 --username=$USERNAME --password=$PASSWORD --ssl get queue=Test ackmode=ack_requeue_false
+-------------+----------+---------------+---------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | properties | redelivered |
+-------------+----------+---------------+---------+---------------+------------------+------------+-------------+
| Test | | 0 | hello | 5 | string | | False |
+-------------+----------+---------------+---------+---------------+------------------+------------+-------------+
$ rabbitmqadmin --host $HOST --port 443 --username=$USERNAME --password=$PASSWORD --ssl list queues name messages
+------+----------+
| name | messages |
+------+----------+
| Test | 0 |
+------+----------+
rabtap を利用した基本的な操作
- rabtap は Golang で書かれている RabbitMQ ユーティリティコマンドラインツール
rabtap は以下のとおり Docker イメージを用いてして手軽に利用可能
$ docker run --rm -ti ghcr.io/jandelgado/rabtap:latest
環境変数の設定
USERNAME=
PASSWORD=
HOST=
PORT=
AMQP_URI=amqps://$USERNAME:$PASSWORD@$HOST:$PORT
Publish
$ echo test > ./message
$ docker run -v "$PWD":/usr/local/src --rm -ti ghcr.io/jandelgado/rabtap:latest pub --uri $AMQP_URI --routingkey=Test /usr/local/src/message
Subscribe
$ docker run -v "$PWD":/usr/local/src --rm -ti ghcr.io/jandelgado/rabtap:latest sub --uri $AMQP_URI Test
------ message received on 2022-05-01T14:46:41Z ------
exchange.......:
routingkey.....: Test
test
Pinned Articles
About
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです
Tags
JavaScript
PowerShell
kibana
elasticsearch
fluentd
nginx
イベント
五十嵐裕美
村川梨衣
logrotate
IoT
Scala
Java
C言語
iputils
ICMP
WUG
mastodon
Swift
AWS
Clock
Windows
アーキテクチャ
PoEAA
iOS
DeviceFarm
プログラミング言語
OS
StepFunctions
Lambda
Serverless
terraform
ポエム
RHEL
ネットワーク
GraphQL
CloudWatch
Linux
Coreutils
network
nc
telnet
LinuxKernel
fpinscala
ELB
IAM
AppSync
EFS
Gradle
english