Golang dan RabbitMQ melaksanakan penyahgandingan dan penyahgandingan mesej dalam seni bina perkhidmatan mikro

WBOY
Lepaskan: 2023-09-27 15:40:55
asal
843 orang telah melayarinya

Golang dan RabbitMQ melaksanakan penyahgandingan dan penyahgandingan mesej dalam seni bina perkhidmatan mikro

Golang dan RabbitMQ melaksanakan penyahgandingan dan penyahgandingan mesej dalam seni bina perkhidmatan mikro

Dalam pembangunan perisian moden, seni bina perkhidmatan mikro telah menjadi salah satu corak seni bina yang semakin popular. Dalam seni bina ini, aplikasi dibahagikan kepada perkhidmatan mikro bebas yang boleh digunakan dan diskalakan secara bebas. Walau bagaimanapun, komunikasi antara perkhidmatan mikro adalah sangat penting untuk membina sistem yang stabil dan boleh dipercayai. Dalam artikel ini, kami akan meneroka cara menggunakan Golang dan RabbitMQ untuk mencapai penyahgandingan dan penyahgandingan mesej dalam seni bina perkhidmatan mikro.

Untuk mencapai penyahgandingan mesej dan penyahgandingan antara perkhidmatan mikro, kami menggunakan RabbitMQ sebagai broker mesej. RabbitMQ ialah perisian broker mesej sumber terbuka yang melaksanakan spesifikasi AMQP (Advanced Message Qeuing Protocol) dan menyediakan mekanisme penghantaran mesej yang boleh dipercayai.

Pertama, kita perlu memasang RabbitMQ dan mulakannya. Anda boleh mendapatkan langkah pemasangan dan konfigurasi khusus di laman web rasmi RabbitMQ.

Kemudian, kami akan menggunakan Golang untuk menulis dua perkhidmatan mikro mudah, satu adalah penghantar mesej (Pengeluar) dan satu lagi adalah penerima mesej (Pengguna).

Perkhidmatan mikro Pengeluar bertanggungjawab untuk menghantar mesej ke baris gilir mesej RabbitMQ. Contoh kod adalah seperti berikut:

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()
}
Salin selepas log masuk

Perkhidmatan mikro Pengguna bertanggungjawab untuk menerima mesej daripada baris gilir mesej RabbitMQ dan memprosesnya. Contoh kod adalah seperti berikut:

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
}
Salin selepas log masuk

Dalam dua perkhidmatan mikro ini, kami mula-mula mewujudkan sambungan kepada RabbitMQ dan membuat baris gilir bernama "hello". Kemudian, dalam perkhidmatan mikro Pengeluar, kami menghantar mesej ke baris gilir ini. Dalam perkhidmatan mikro Pengguna, kami mendengar baris gilir dan menerima mesej daripadanya dan mencetak mesej yang diterima.

Untuk menguji kedua-dua perkhidmatan mikro ini, kami boleh memulakan perkhidmatan mikro Pengguna dahulu, dan kemudian memulakan perkhidmatan mikro Pengeluar. Semasa proses permulaan, anda akan dapat melihat mesej yang dihantar oleh perkhidmatan mikro Pengeluar dicetak dalam perkhidmatan mikro Pengguna.

Dengan menggunakan Golang dan RabbitMQ, kami berjaya mencapai penyahgandingan dan penyahgandingan mesej dalam seni bina perkhidmatan mikro. Dengan menghantar mesej ke baris gilir mesej, perkhidmatan mikro Pengeluar boleh berfungsi secara bebas daripada perkhidmatan mikro Pengguna. Apabila perkhidmatan mikro Pengguna bersedia untuk menerima mesej, ia boleh mendapatkan dan memproses mesej daripada baris gilir mesej tanpa menjejaskan operasi perkhidmatan mikro Pengeluar.

Penyahgandingan dan penyahgandingan mesej memberikan fleksibiliti dan skalabiliti untuk seni bina perkhidmatan mikro, membolehkan kami membina dan menyelenggara sistem teragih dengan lebih baik. Dalam pembangunan perkhidmatan mikro sebenar, anda boleh menyesuaikan dan melanjutkan kod sampel ini mengikut keperluan anda sendiri untuk memenuhi situasi sebenar.

Ringkasan: Dengan menggunakan Golang dan RabbitMQ, kami boleh mencapai penyahgandingan dan penyahgandingan mesej dalam seni bina perkhidmatan mikro. Dengan menghantar mesej ke baris gilir mesej, perkhidmatan mikro Pengeluar boleh berfungsi secara bebas daripada perkhidmatan mikro Pengguna. Corak seni bina ini memberikan fleksibiliti dan skalabiliti untuk seni bina perkhidmatan mikro, membolehkan kami membina dan menyelenggara sistem teragih dengan lebih baik.

Atas ialah kandungan terperinci Golang dan RabbitMQ melaksanakan penyahgandingan dan penyahgandingan mesej dalam seni bina perkhidmatan mikro. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!