Golang RabbitMQ ルーティングパターン

RabbitMQにおけるルーティングパターンは、パブリッシュ/サブスクライブパターンの基礎に基づいて交換ルーティング方式を拡張しています。ルーティングパターンにおける交換タイプはダイレクトであり、これはRabbitMQのデフォルトの交換タイプでもあります。以前のセクションでは明示的な交換は使用されていませんでしたが、実際に使用されている基礎の交換はダイレクト交換でした。

ヒント: ルーティングパターンのルールに不慣れな場合は、RabbitMQ ルーティングパターンをご覧ください。

1. 初めに

最初に Golang RabbitMQ パブリッシュ/サブスクライブ パターン の章をお読みください。基本的に、RabbitMQのさまざまな動作モードはさまざまなタイプの交換によって実装されています。コードはほとんど同じで、主な違いは交換の定義です。そのため、パブリッシュ/サブスクライブパターンが理解できれば、他のパターンは非常にシンプルです。

2. ダイレクト交換の宣言

err = ch.ExchangeDeclare(
  "tizi365_direct", // 交換の名前、ユニークである必要があります
  "direct",         // 交換タイプ
  true,             // 耐久性あり
  false,            // 自動削除
  false,            // 内部
  false,            // ノーウェイト
  nil,              // 引数
)

3. メッセージの送信

	// メッセージの内容
	body := "こんにちは、Tizi365.com!"

	// メッセージを送信
	err = ch.Publish(
		"tizi365_direct",     // 交換(交換の名前)
		"blog",               // ルーティングキー、メッセージがどのキューに送信されるかを決定する重要なパラメータ
		false,                // 強制
		false,                // 即時
		amqp.Publishing {
			ContentType: "text/plain",   // メッセージのコンテンツタイプ、この場合はプレーンテキスト
			Body:        []byte(body),    // メッセージの内容
		})

4. コンシューマのメッセージの受信

4.1. 交換のバインディング

// 操作するキューの宣言
q, err := ch.QueueDeclare(
  "",     // キューの名前、指定しない場合はランダムに生成されます
  false,  // 耐久性のあるキュー
  false,  // 未使用時に削除
  true,   // 排他的
  false,  // ノーウェイト
  nil,    // 引数
)

// キューを指定の交換にバインド
err = ch.QueueBind(
  q.Name,             // キューの名前
  "blog",             // ルーティングキー、メッセージ送信時に指定されたルーティングパラメータと一致する場合、メッセージは現在のキューに配信されます
  "tizi365_direct",   // 交換の名前、メッセージ送信側で定義された交換と一致する必要があります
  false,
  nil)

4.2. メッセージの消費

// コンシューマの作成
msgs, err := ch.Consume(
  q.Name, // 先ほどのキュー名の参照
  "",     // コンシューマ名、指定しない場合はランダムに生成されます
  true,   // キューが処理したメッセージを自動的に確認
  false,  // 排他的
  false,  // ローカルでない
  false,  // ノーウェイト
  nil,    // 引数
)

// キュー内のメッセージを消費するためのループ
for d := range msgs {
  log.Printf("受信したメッセージ=%s", d.Body)
}