Golang は RabbitMQ モニタリングを実装します

PHPz
リリース: 2023-05-10 10:53:06
オリジナル
592 人が閲覧しました

メッセージ キューは、非同期処理やタスク分散などの問題を解決するために一般的に使用されるアーキテクチャ パターンであり、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!