ホームページ > バックエンド開発 > Golang > Golang と RabbitMQ は、マイクロサービス アーキテクチャでメッセージのデカップリングとデカップリングを実装します。

Golang と RabbitMQ は、マイクロサービス アーキテクチャでメッセージのデカップリングとデカップリングを実装します。

WBOY
リリース: 2023-09-27 15:40:55
オリジナル
921 人が閲覧しました

Golang と RabbitMQ は、マイクロサービス アーキテクチャでメッセージのデカップリングとデカップリングを実装します。

Golang と RabbitMQ は、マイクロサービス アーキテクチャでメッセージのデカップリングとデカップリングを実装します。

現代のソフトウェア開発において、マイクロサービス アーキテクチャはますます人気のあるアーキテクチャの 1 つです。このアーキテクチャでは、アプリケーションは独立してデプロイおよびスケーリングできる独立したマイクロサービスに分割されます。ただし、安定した信頼性の高いシステムを構築するには、マイクロサービス間の通信が非常に重要です。この記事では、Golang と RabbitMQ を使用して、マイクロサービス アーキテクチャでメッセージの分離と分離を実現する方法を説明します。

メッセージの分離とマイクロサービス間の分離を実現するために、RabbitMQ をメッセージ ブローカーとして使用します。 RabbitMQ は、AMQP (Advanced Message Queuing Protocol) 仕様を実装し、信頼性の高いメッセージ送信メカニズムを提供するオープン ソースのメッセージ ブローカー ソフトウェアです。

まず、RabbitMQ をインストールして起動する必要があります。具体的なインストールと構成の手順は、RabbitMQ の公式 Web サイトで見つけることができます。

次に、Golang を使用して 2 つの単純なマイクロサービスを作成します。1 つはメッセージ送信者 (プロデューサー)、もう 1 つはメッセージ受信者 (コンシューマー) です。

プロデューサー マイクロサービスは、RabbitMQ メッセージ キューにメッセージを送信する役割を果たします。コード例は次のとおりです。

package main

import (
    "log"

    "github.com/streadway/amqp"
)

func main() {
    conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
    if err != nil {
        log.Fatal(err)
    }

    ch, err := conn.Channel()
    if err != nil {
        log.Fatal(err)
    }

    q, err := ch.QueueDeclare(
        "hello", // 队列名称
        false,   // 是否持久化
        false,   // 是否自动删除
        false,   // 是否独占连接
        false,   // 是否阻塞
        nil,     // 其他属性
    )
    if err != nil {
        log.Fatal(err)
    }

    body := "Hello, RabbitMQ!"

    err = ch.Publish(
        "",     // 交换机名称
        q.Name, // 队列名称
        false,  // 是否强制性发布
        false,  // 是否立即发布
        amqp.Publishing{
            ContentType: "text/plain",
            Body:        []byte(body),
        },
    )
    if err != nil {
        log.Fatal(err)
    }

    log.Println("Sent message to RabbitMQ")

    defer conn.Close()
}
ログイン後にコピー

Consumer マイクロサービスは、RabbitMQ メッセージ キューからメッセージを受信して​​処理する役割を果たします。コード例は次のとおりです。

package main

import (
    "log"

    "github.com/streadway/amqp"
)

func main() {
    conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
    if err != nil {
        log.Fatal(err)
    }

    ch, err := conn.Channel()
    if err != nil {
        log.Fatal(err)
    }

    q, err := ch.QueueDeclare(
        "hello", // 队列名称
        false,   // 是否持久化
        false,   // 是否自动删除
        false,   // 是否独占连接
        false,   // 是否阻塞
        nil,     // 其他属性
    )
    if err != nil {
        log.Fatal(err)
    }

    msgs, err := ch.Consume(
        q.Name, // 队列名称
        "",     // 消费者标识符
        true,   // 是否自动应答
        false,  // 是否独占连接
        false,  // 是否阻塞
        false,  // 其他属性
    )
    if err != nil {
        log.Fatal(err)
    }

    forever := make(chan bool)

    go func() {
        for d := range msgs {
            log.Printf("Received message: %s", d.Body)
        }
    }()

    log.Println("Waiting for messages...")

    <-forever
}
ログイン後にコピー

これら 2 つのマイクロサービスでは、まず RabbitMQ との接続を確立し、「hello」という名前のキューを作成します。次に、プロデューサー マイクロサービスで、このキューにメッセージを送信します。 Consumer マイクロサービスでは、キューをリッスンしてキューからメッセージを受信し、受信したメッセージを出力します。

これら 2 つのマイクロサービスをテストするには、最初にコンシューマ マイクロサービスを開始し、次にプロデューサー マイクロサービスを開始します。起動プロセス中に、Producer マイクロサービスによって送信されたメッセージが Consumer マイクロサービスで出力されるのを確認できます。

Golang と RabbitMQ を使用することで、マイクロサービス アーキテクチャでのメッセージのデカップリングとデカップリングを実現することに成功しました。メッセージをメッセージ キューに送信することにより、プロデューサー マイクロサービスはコンシューマー マイクロサービスから独立して動作できます。 Consumer マイクロサービスがメッセージを受信する準備ができると、Producer マイクロサービスの動作に影響を与えることなく、メッセージ キューからメッセージを取得して処理できます。

メッセージのデカップリングとデカップリングは、マイクロサービス アーキテクチャに柔軟性とスケーラビリティを提供し、分散システムの構築と維持を向上させることができます。実際のマイクロサービス開発では、これらのサンプルコードをニーズに応じてカスタマイズし、拡張して実際の状況に合わせることができます。

要約: Golang と RabbitMQ を使用することで、マイクロサービス アーキテクチャでメッセージの分離と分離を実現できます。メッセージをメッセージ キューに送信することにより、プロデューサー マイクロサービスはコンシューマー マイクロサービスから独立して動作できます。このアーキテクチャ パターンは、マイクロサービス アーキテクチャに柔軟性と拡張性を提供し、分散システムをより適切に構築および維持できるようにします。

以上がGolang と RabbitMQ は、マイクロサービス アーキテクチャでメッセージのデカップリングとデカップリングを実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート