Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Golang RabbitMQ: Membina sistem pemesejan berskala

Golang RabbitMQ: Membina sistem pemesejan berskala

WBOY
WBOYasal
2023-09-28 11:05:17961semak imbas

Golang RabbitMQ: 搭建可扩展的消息传递系统

Golang RabbitMQ: Membina sistem pemesejan berskala

Pengenalan:
Dalam bidang pembangunan messaging perisian masa nyata sistem memainkan peranan yang penting. Ia boleh digunakan bukan sahaja untuk mencapai komunikasi masa nyata, tetapi juga untuk penyahgandingan dan pemprosesan tak segerak antara berbilang sistem. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Golang dan RabbitMQ untuk membina sistem pemesejan berskala dan memberikan contoh kod khusus.

Bahagian 1: Apakah RabbitMQ?
RabbitMQ ialah perisian tengah pemesejan sumber terbuka yang melaksanakan Protokol Gilir Mesej Lanjutan (AMQP). Ia menggunakan baris gilir mesej untuk mencapai komunikasi penyahgandingan dan tak segerak antara pengeluar dan pengguna. RabbitMQ menyediakan pemesejan yang boleh dipercayai dan menyokong berbilang mod pemesejan, seperti terbitkan/langganan, titik-ke-titik, permintaan/balas, dsb.

Part 2: Kenapa pilih Golang?
Golang ialah bahasa pengaturcaraan yang berkuasa dengan keupayaan pemprosesan serentak yang cekap dan sintaks yang elegan. Ciri Golang menjadikannya sesuai untuk membina aplikasi berprestasi tinggi dan berskala. Dalam artikel ini, kami memilih untuk menggunakan Golang sebagai bahasa pembangunan untuk melaksanakan sistem pemesejan berskala kami.

Bahagian 3: Membina persekitaran RabbitMQ
Sebelum kita mula menulis kod, kita perlu membina persekitaran RabbitMQ. Anda boleh memilih untuk memasang RabbitMQ secara setempat atau menggunakan contoh RabbitMQ yang disediakan oleh pembekal perkhidmatan awan. Sebaik sahaja kami mempunyai contoh RabbitMQ yang berfungsi, kami boleh mula menulis kod.

Bahagian 4: Contoh Kod Golang
Seterusnya, kami akan menggunakan contoh mudah untuk menunjukkan cara menggunakan Golang dan RabbitMQ untuk membina sistem pemesejan berskala.

Pertama, kita perlu memasang perpustakaan pelanggan Golang Golang dan RabbitMQ. Ia boleh dipasang dengan arahan berikut:

go get github.com/streadway/amqp

Seterusnya, kami akan menulis dua program Golang mudah, satu untuk menghantar mesej dan satu untuk menerima mesej.

Atur cara yang menghantar mesej:

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

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

    q, err := ch.QueueDeclare(
        "hello", // 队列名称
        false,   // 是否持久化
        false,   // 是否自动删除
        false,   // 是否排他性
        false,   // 是否阻塞
        nil,     // 附加参数
    )
    if err != nil {
        log.Fatalf("Failed to declare a queue: %v", err)
    }

    body := "Hello World!"

    err = ch.Publish(
        "",     // exchange名称
        q.Name, // routing key
        false,  // 必需的消息传递标志
        false,  // 立即传递消息到队列中(不等待)
        amqp.Publishing{
            ContentType: "text/plain",
            Body:        []byte(body),
        },
    )
    if err != nil {
        log.Fatalf("Failed to publish a message: %v", err)
    }

    log.Println("Message sent")
}

Atur cara yang menerima mesej:

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

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

    q, err := ch.QueueDeclare(
        "hello", // 队列名称
        false,   // 是否持久化
        false,   // 是否自动删除
        false,   // 是否排他性
        false,   // 是否阻塞
        nil,     // 附加参数
    )
    if err != nil {
        log.Fatalf("Failed to declare a queue: %v", err)
    }

    msgs, err := ch.Consume(
        q.Name, // 队列名称
        "",     // consumer标识符
        true,   // 是否自动应答确认消息
        false,  // 是否排他性消费者
        false,  // 是否阻塞
        false,  // 附加参数
    )
    if err != nil {
        log.Fatalf("Failed to register a consumer: %v", err)
    }

    forever := make(chan bool)

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

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

    <-forever
}

Di atas adalah contoh mudah yang menunjukkan cara menggunakan ia dalam Golang RabbitMQ melakukan pemesejan. Kami membuat baris gilir bernama "hello" dan kemudian menghantar mesej ke baris gilir ini. Program penerima mendengar baris gilir ini dan memproses mesej semasa ia diterima.

Bahagian 5: Kesimpulan
Melalui artikel ini, kami memperkenalkan cara menggunakan Golang dan RabbitMQ untuk membina sistem pemesejan berskala. Kami menyediakan contoh kod khusus untuk membantu pembaca memahami dan menggunakan konsep ini dengan lebih baik. Sudah tentu, sistem pemesejan sebenar mungkin lebih kompleks, tetapi kod sampel yang disediakan dalam artikel ini memberi anda asas yang baik.

Rujukan:

  1. RabbitMQ laman web rasmi: https://www.rabbitmq.com/
  2. Laman web rasmi Golang: https : //golang.org/

Atas ialah kandungan terperinci Golang RabbitMQ: Membina sistem pemesejan berskala. 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