ホームページ バックエンド開発 Golang Golang は RabbitMQ モニタリングを実装します

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

May 10, 2023 am 10:53 AM

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

Beegoフレームワークのページ間で短期情報転送を実装する方法は?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

Go言語でファイルを便利に書く方法は?

GOの実際のパフォーマンスを正確に反映するベンチマークを作成するにはどうすればよいですか? GOの実際のパフォーマンスを正確に反映するベンチマークを作成するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

GOの実際のパフォーマンスを正確に反映するベンチマークを作成するにはどうすればよいですか?

See all articles