Petua untuk menggunakan RabbitMQ untuk melaksanakan pengesahan mesej dan memastikan kebolehpercayaan di Golang

WBOY
Lepaskan: 2023-09-27 14:57:34
asal
1495 orang telah melayarinya

Petua untuk menggunakan RabbitMQ untuk melaksanakan pengesahan mesej dan memastikan kebolehpercayaan di Golang

Petua untuk menggunakan RabbitMQ untuk melaksanakan pengesahan mesej dan memastikan kebolehpercayaan di Golang memerlukan contoh kod khusus

Ikhtisar:
Dalam sistem teragih, baris gilir mesej ialah mekanisme komunikasi yang biasa digunakan yang boleh melaksanakan komunikasi antara modul berbeza Penyahgandingan, komunikasi tak segerak kawalan aliran dan fungsi lain. RabbitMQ ialah salah satu sistem baris gilir mesej yang lebih popular dalam industri Ia menyokong berbilang bahasa pengaturcaraan, termasuk Golang. Artikel ini akan memperkenalkan cara menggunakan Golang dan RabbitMQ untuk merealisasikan pengesahan mesej dan memastikan kebolehpercayaan.

Persediaan persekitaran:
Sebelum anda bermula, anda perlu memastikan bahawa anda telah memasang Golang dan RabbitMQ dan mengkonfigurasi persekitaran yang sepadan.

Langkah 1: Buat sambungan RabbitMQ
Pertama, dalam bahasa Go, kita boleh menggunakan pakej github.com/streadway/amqp untuk menyambung ke RabbitMQ. Buat sambungan RabbitMQ dengan memanggil fungsi Dail.

package main

import (
    "log"

    "github.com/streadway/amqp"
)

func main() {
    conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
    if err != nil {
        log.Fatalf("Failed to connect to RabbitMQ: %v", err)
    }
    defer conn.Close()

    // ...
}
Salin selepas log masuk

Langkah 2: Buat saluran mesej
Buat saluran baharu di mana kami boleh mengisytiharkan baris gilir, menghantar dan menerima mesej.

    channel, err := conn.Channel()
    if err != nil {
        log.Fatalf("Failed to open a channel: %v", err)
    }
    defer channel.Close()

    // ...
Salin selepas log masuk

Langkah 3: Isytihar baris gilir
Sebelum menghantar dan menerima mesej, kita perlu mengisytiharkan baris gilir. Jika baris gilir tidak wujud, ia akan dibuat secara automatik.

    queueName := "my_queue"
    _, err = channel.QueueDeclare(
        queueName, // 队列名
        true,      // 是否持久化
        false,     // 是否自动删除
        false,     // 是否排他
        false,     // 是否等待服务器完成的通知
        nil,       // 额外的属性
    )
    if err != nil {
        log.Fatalf("Failed to declare a queue: %v", err)
    }

    // ...
Salin selepas log masuk

Langkah 4: Hantar mesej
Kita boleh menggunakan kaedah Saluran.Terbitkan untuk menghantar mesej.

    err = channel.Publish(
        "",        // 交换机名称
        queueName, // 队列名称
        false,     // 是否等待服务端确认
        false,     // 是否等待生产者确认
        amqp.Publishing{
            ContentType: "text/plain",
            Body:        []byte("Hello, RabbitMQ!"),
        },
    )
    if err != nil {
        log.Fatalf("Failed to publish a message: %v", err)
    }

    // ...
Salin selepas log masuk

Langkah 5: Terima mesej
Kita boleh menggunakan kaedah Channel.Consume untuk menggunakan mesej daripada baris gilir.

    messages, err := channel.Consume(
        queueName, // 队列名称
        "",        // 消费者标签
        true,      // 是否自动确认
        false,     // 是否排他
        false,     // 是否阻塞等待
        false,     // 额外的属性
        nil,       // 可选的回调函数
    )
    if err != nil {
        log.Fatalf("Failed to register a consumer: %v", err)
    }

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

    // ...
Salin selepas log masuk

Langkah 6: Pengesahan Mesej
Secara lalai, RabbitMQ akan menghantar mesej kepada pengguna sekali, walaupun pengguna tidak memproses mesej dengan betul. Kami boleh mengakui mesej secara manual menggunakan kaedah Channel.Ack.

    go func() {
        for msg := range messages {
            log.Printf("Received a message: %s", msg.Body)

            // 模拟处理逻辑
            time.Sleep(time.Second * 2)

            // 确认消息
            msg.Ack(false)
        }
    }()
Salin selepas log masuk

Langkah 7: Masukkan semula mesej ke dalam baris gilir
Jika ralat berlaku semasa memproses mesej, kita boleh menggunakan kaedah Channel.Nack untuk memasukkan semula mesej ke dalam baris gilir.

    go func() {
        for msg := range messages {
            log.Printf("Received a message: %s", msg.Body)

            // 模拟处理逻辑
            time.Sleep(time.Second * 2)

            // 如果发生错误,则重新放入队列
            if err := handleMsg(msg.Body); err != nil {
                msg.Nack(false, true)
            } else {
                msg.Ack(false)
            }
        }
    }()

    // ...
Salin selepas log masuk

Di atas adalah langkah terperinci dan contoh kod teknik untuk menggunakan Golang dan RabbitMQ untuk mengesahkan mesej dan memastikan kebolehpercayaan. Dengan menggunakan kaedah di atas, kami boleh memastikan bahawa mesej tidak akan hilang semasa penghantaran, dan boleh mengendalikan situasi yang tidak normal untuk memastikan kestabilan dan kebolehpercayaan sistem. Semoga artikel ini bermanfaat kepada semua orang!

Atas ialah kandungan terperinci Petua untuk menggunakan RabbitMQ untuk melaksanakan pengesahan mesej dan memastikan kebolehpercayaan di Golang. 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!