メッセージ キューは、非同期処理やタスク分散などの問題を解決するために一般的に使用されるアーキテクチャ パターンであり、RabbitMQ は現在最も広く使用されているメッセージ ミドルウェアの 1 つであることはわかっています。実際のアプリケーションでは、Golang を使用して RabbitMQ モニタリングを実装する必要がある場合があります。この記事では、Golang を使用して RabbitMQ モニタリングを実装する方法を紹介します。
準備
始める前に、RabbitMQ がインストールされていることを確認する必要があります。 RabbitMQ は Erlang に依存しているため、Erlang もインストールする必要があります。
インストールが完了したら、Golang サードパーティ パッケージをインストールする必要があります。中でも、RabbitMQ を簡単に接続して操作できるようにする AMQP パッケージは必須です。
go get github.com/streadway/amqp
コード実装
まず、RabbitMQ に接続する必要があります。接続が成功したら、「test」という名前の交換を宣言し、「fanout」と入力する必要があります。 Exchange は、RabbitMQ のメッセージ ルーティングの重要な部分であり、メッセージを受信してキューに配信する役割を果たします。この場合、「test」という名前の交換を宣言し、そのタイプを「ファンアウト」に設定します。これは、それにサブスクライブされているすべてのキューにメッセージをブロードキャストすることを意味します。
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
failOnError(err, "RabbitMQ への接続に失敗しました")
defer conn .Close()
ch, err := conn.Channel()
failOnError(err, "チャネルを開けませんでした")
defer ch.Close()
err = ch.ExchangeDeclare(
"test", // name "fanout", // type true, // durable false, // auto-deleted false, // internal false, // no-wait nil, // arguments
)
failOnError(err, "交換の宣言に失敗しました")
次に、Queue を使用して新しい非永続的な関数を作成する必要があります。自動的に生成された名前が付けられます。ここでは、キューの名前を使用して、宣言したばかりの「テスト」交換にキューをバインドします。
q, err := ch.QueueDeclare(
"", // name false, // durable false, // delete when unused true, // exclusive false, // no-wait nil, // arguments
)
failOnError(err, "キューの宣言に失敗しました")
err = ch.QueueBind(
q.Name, // queue name "", // routing key "test", // exchange false, nil,
)
failOnError(err, "キューのバインドに失敗しました")
これで、RabbitMQ の準備が整ったので、メッセージのリッスンを開始できます。 Consume 関数を使用してメッセージ リスニングを実装すると、キューからメッセージを継続的に受信して処理できるようになります。
msgs, err := ch.Consume(
q.Name, // queue name "", // consumer true, // auto-ack false, // exclusive false, // no-local false, // no-wait nil, // args
)
failOnError(err, "コンシューマーの登録に失敗しました")
for msg := range msgs {
log.Printf("Received a message: %s", msg.Body)
}
上記のコードでは、ch.Consume() メソッドを使用して、指定されたキュー内のメッセージをリッスンし、ログを出力してメッセージの内容を出力します。無限ループを使用してメッセージ リスニングを展開していることに注意してください。これは、プログラムが停止されるかエラーが発生するまでキューをリスニングし続けることを意味します。
完全なコードは次のとおりです。
package main
import (
"log" "github.com/streadway/amqp"
)
func failedOnError(err error, msg string) {
if err != nil { log.Fatalf("%s: %s", msg, err) }
}
func main() {
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") failOnError(err, "Failed to connect to RabbitMQ") defer conn.Close() ch, err := conn.Channel() failOnError(err, "Failed to open a channel") defer ch.Close() err = ch.ExchangeDeclare( "test", // name "fanout", // type true, // durable false, // auto-deleted false, // internal false, // no-wait nil, // arguments ) failOnError(err, "Failed to declare an exchange") q, err := ch.QueueDeclare( "", // name false, // durable false, // delete when unused true, // exclusive false, // no-wait nil, // arguments ) failOnError(err, "Failed to declare a queue") err = ch.QueueBind( q.Name, // queue name "", // routing key "test", // exchange false, nil, ) failOnError(err, "Failed to bind a queue") msgs, err := ch.Consume( q.Name, // queue name "", // consumer true, // auto-ack false, // exclusive false, // no-local false, // no-wait nil, // args ) failOnError(err, "Failed to register a consumer") for msg := range msgs { log.Printf("Received a message: %s", msg.Body) }
}
概要
この記事では、Golang の使用方法を紹介します。リッスンするには、まず Rabbitmq に接続し、エクスチェンジを宣言し、キューを作成してキューをエクスチェンジにバインドし、最後にコンシューマーを使用してキュー内のメッセージをリッスンする必要があります。この記事が、rabbitmq 開発に Golang を使用している開発者にとって役立つことを願っています。
以上がGolang は RabbitMQ モニタリングを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。