Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menggunakan RabbitMQ untuk melaksanakan sistem pemberitahuan tak segerak yang boleh dipercayai di Golang

Menggunakan RabbitMQ untuk melaksanakan sistem pemberitahuan tak segerak yang boleh dipercayai di Golang

WBOY
WBOYasal
2023-09-28 12:04:511375semak imbas

Menggunakan RabbitMQ untuk melaksanakan sistem pemberitahuan tak segerak yang boleh dipercayai di Golang

Menggunakan RabbitMQ di Golang untuk melaksanakan sistem pemberitahuan tak segerak yang boleh dipercayai

Pengenalan:
Dalam aplikasi moden, sistem pemberitahuan tak segerak memainkan peranan penting. Melalui pemberitahuan tak segerak, aplikasi boleh melaksanakan tugas lain semasa memproses permintaan, meningkatkan prestasi sistem dan kestabilan. Sebagai bahasa pengaturcaraan yang cekap dan ringkas, Golang boleh digunakan dalam kombinasi dengan RabbitMQ, perisian tengah mesej yang boleh dipercayai, untuk melaksanakan sistem pemberitahuan tak segerak yang stabil dan boleh dipercayai. Artikel ini akan memperkenalkan cara menggunakan Golang dan RabbitMQ untuk membina sistem pemberitahuan tak segerak yang boleh dipercayai dan menyediakan contoh kod khusus.

1. Pengenalan kepada RabbitMQ
RabbitMQ ialah perisian tengah mesej sumber terbuka yang melaksanakan standard AMQP (Advanced Message Qeuing Protocol) dan sangat boleh dipercayai dan berskala. RabbitMQ menyimpan mesej dalam bentuk baris gilir dan menyediakan mekanisme penghalaan dan langganan yang fleksibel. Menggunakan RabbitMQ, kami boleh melakukan pemesejan tak segerak antara aplikasi yang berbeza untuk mencapai penyahgandingan dan komunikasi yang cekap.

2. Menggunakan RabbitMQ di Golang
Golang menyediakan banyak perpustakaan pihak ketiga untuk menyokong penggunaan RabbitMQ, termasuk tangga/amqp, RabbitMQ/amqp, dsb. Dalam artikel ini, kami akan menggunakan pustaka streadway/amqp untuk menunjukkan cara membina sistem pemberitahuan tak segerak yang boleh dipercayai menggunakan Golang dan RabbitMQ.

1. Persediaan
Sebelum bermula, kita perlu memasang RabbitMQ dan memulakan perkhidmatannya. Sila rujuk dokumentasi rasmi RabbitMQ untuk langkah pemasangan. Selepas pemasangan selesai, kita perlu memastikan perpustakaan strideway/amqp telah dipasang dalam persekitaran Golang. Pustaka boleh dipasang melalui arahan berikut:

pergi dapatkan github.com/streadway/amqp

2 Sambung ke RabbitMQ
Di Golang, kita perlu menyambung ke pelayan RabbitMQ terlebih dahulu. Berikut ialah kod contoh:

pakej utama

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)
}

defer conn.Close()
defer ch.Close()

// 在此处添加后续的逻辑

log.Println("Connected to RabbitMQ")

}

Dalam contoh ini, kami menggunakan fungsi amqp.Dial untuk mewujudkan sambungan ke RabbitMQ , Dan dapatkan Saluran melalui fungsi amqp.Dial untuk menghantar dan menerima mesej. Akhir sekali, kami menutup sambungan dan Saluran melalui kenyataan penangguhan.

3. Hantar mesej
Selepas menyambung ke RabbitMQ, kami boleh menggunakan Saluran untuk menghantar mesej. Berikut ialah contoh kod untuk menghantar mesej:

func main() {

// 连接到RabbitMQ的代码...

// 发送消息
err = ch.Publish(
    "",
    "notifications",
    false,
    false,
    amqp.Publishing{
        ContentType: "text/plain",
        Body:        []byte("Hello, RabbitMQ!"),
    },
)
if err != nil {
    log.Fatal(err)
}

log.Println("Message sent")

}

Dalam contoh ini, kami menggunakan kaedah ch.Publish untuk menghantar mesej. Parameter pertama ialah pertukaran, dan kami menentukan rentetan kosong untuk menggunakan pertukaran lalai, parameter kedua ialah kunci penghalaan, digunakan untuk menentukan destinasi mesej adalah wajib, menunjukkan bahawa jika mesej tidak boleh dihalakan ke pengguna Atau, Basic.Return akan dikembalikan; parameter keempat adalah serta-merta, yang bermaksud bahawa jika pada masa ini tiada pengguna yang boleh menerima mesej, Basic.Return akan dikembalikan. Parameter terakhir amqp.Publishing ialah struktur yang digunakan untuk menentukan kandungan dan format mesej.

4. Terima mesej
Selepas menyelesaikan penghantaran mesej, kami juga perlu menulis kod untuk menerima mesej yang tiba. Berikut ialah contoh kod untuk menerima mesej:

func main() {

// 连接到RabbitMQ的代码...

// 接收消息
msgs, err := ch.Consume(
    "notifications",
    "",
    true,
    false,
    false,
    false,
    nil,
)
if err != nil {
    log.Fatal(err)
}

go func() {
    for msg := range msgs {
        log.Printf("Received a message: %s", msg.Body)
        // 在此处添加处理消息的逻辑
    }
}()

select {}

}

Dalam contoh ini, kami menggunakan kaedah ch.Consume untuk menggunakan mesej daripada baris gilir bernama "pemberitahuan". Parameter pertama ialah baris gilir, yang digunakan untuk menentukan baris gilir yang akan digunakan, parameter kedua ialah pengguna, yang digunakan untuk menentukan pengecam pengguna ialah autoAck, yang menentukan sama ada untuk mengiktiraf parameter yang selebihnya; boleh digunakan Tentukan syarat penapisan mesej dan konfigurasi lanjutan. Dalam kod, kami menggunakan goroutine untuk menggunakan mesej secara tak segerak dan mencetak mesej yang diterima melalui log.Cetakf.

5. Jaminan Kebolehpercayaan
Dalam aplikasi praktikal, kita perlu memastikan kebolehpercayaan dan kebolehpercayaan mesej. RabbitMQ menyediakan empat jenis suis (langsung, topik, fanout dan pengepala), dan anda boleh memilih jenis suis yang sesuai mengikut keperluan sebenar. Selain itu, kami juga boleh menggunakan transaksi atau mekanisme pengesahan untuk memastikan kebolehpercayaan mesej. Berikut ialah kod sampel menggunakan mekanisme pengesahan:

func main() {

// 连接到RabbitMQ的代码...

err = ch.Confirm(false)
if err != nil {
    log.Fatal(err)
}

confirms := ch.NotifyPublish(make(chan amqp.Confirmation, 1))

err = ch.Publish(
    "",
    "notifications",
    false,
    false,
    amqp.Publishing{
        ContentType: "text/plain",
        Body:        []byte("Hello, RabbitMQ!"),
    },
)
if err != nil {
    log.Fatal(err)
}

if confirmed := <-confirms; !confirmed.Ack {
    log.Fatalf("Failed to publish message")
}

log.Println("Message sent and confirmed")

}

Dalam contoh ini, kami mula-mula memanggil kaedah ch.Confirm untuk menghidupkan mod pengesahan. Kemudian, kami membuat saluran untuk menerima mesej pengesahan menggunakan kaedah ch.NotifyPublish. Selepas kaedah ch.Publish, kami menggunakan

Kesimpulan:
Melalui pengenalan artikel ini, kami mempelajari cara menggunakan Golang dan RabbitMQ untuk membina sistem pemberitahuan tak segerak yang boleh dipercayai. Dalam aplikasi praktikal, kami boleh mereka bentuk dan melaksanakan sistem pemberitahuan tak segerak yang lebih kompleks mengikut keperluan khusus. Dengan menggunakan fungsi berkuasa RabbitMQ dan Golang dengan betul, kami boleh membina sistem aplikasi teragih yang cekap dan boleh dipercayai. Saya harap artikel ini berguna kepada anda, terima kasih kerana membaca!

Rujukan:
Dokumentasi rasmi RabbitMQ: https://www.rabbitmq.com/documentation.html

Atas ialah kandungan terperinci Menggunakan RabbitMQ untuk melaksanakan sistem pemberitahuan tak segerak yang boleh dipercayai di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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