Golang โหมดการทำงานของ RabbitMQ work mode, การบริโภคแบบพร้อมกันโดยการบริโภคที่เป็นขนาดขนาดมาก
คำอธิบาย: P แทนผู้ผลิต, C1 และ C2 แทนผู้บริโภค, และสีแดงแทนคิว
เคล็ดลับ: แต่ละข้อความสามารถถูกบริโภคได้เพียงหนึ่งครั้งเท่านั้น
คำแนะนำก่อนการทำ
โปรดอ่าน Golang RabbitMQ Quick Start Tutorial ก่อนเพื่อที่จะเข้าใจการดำเนินการพื้นฐานของ Golang ใน RabbitMQ ถ้าคุณยังไม่คุ้นเคยกับ RabbitMQ โปรดอ่านบทก่อนหน้านี้ก่อน
การบริโภคแบบพร้อมกัน
Golang ใช้ goroutines เป็นหลักในการนำสมัยบริโภคตั้งแต่นี้เราได้แสดงการเข้าทำงานของผู้บริโภคต่างๆ ด้านล่างนี้
เคล็ดลับ: สำหรับวิธีการส่งข้อความ โปรดอ่าน Golang RabbitMQ Quick Start Tutorial.
package main
import (
"log"
"time"
"github.com/streadway/amqp"
)
// การจัดการข้อผิดพลาด
func failOnError(err error, msg string) {
if err != nil {
log.Fatalf("%s: %s", msg, err)
}
}
func main() {
// เชื่อมต่อกับ RabbitMQ
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
failOnError(err, "เชื่อมต่อกับ RabbitMQ ล้มเหลว")
defer conn.Close()
// สร้าง 5 ผู้บริโภคผ่าน goroutines
for i := 0; i < 5; i++ {
go func(number int) {
// สร้างช่อง rabbitmq สำหรับแต่ละผู้บริโภค
ch, err := conn.Channel()
failOnError(err, "เปิดช่องล้มเหลว")
defer ch.Close()
// ประกาศคิวที่จะทำงาน
q, err := ch.QueueDeclare(
"hello", // ชื่อคิว
false, // ทนทาน
false, // ลบเมื่อไม่ได้ใช้งาน
false, // ที่เป็นคุม, เฉพาะ
false, // ไม่รอ
nil, // อาร์กิวเม้นต์
)
failOnError(err, "ประกาศคิวล้มเหลว")
// สร้างผู้บริโภค
msgs, err := ch.Consume(
q.Name, // ชื่อคิวที่จะทำงาน
"", // ไอดีผู้บริโภคเฉพาะ, ถ้าไม่กรอก จะสร้างค่าที่ไม่ซ้ำกันโดยอัตโนมัติ
true, // ตอบรับข้อความโดยอัตโนมัติ (หมายความว่ายืนยันอัตโนมัติว่าข้อความได้รับการประมวลผล)
false, // ที่เป็นคุม
false, // ไม่มีท้องท้อง
false, // ไม่รอ
nil, // อาร์กิวเม้นต์
)
failOnError(err, "ลงทะเบียนผู้บริโภคล้มเหลว")
// ประมวลผลข้อความในลูป
for d := range msgs {
log.Printf("[หมายเลขผู้บริโภค=%d] ได้รับข้อความ: %s", number, d.Body)
// จำลองการประมวลผลธุรกิจ, หน่วงเพื่อ 1 วินาที
time.Sleep(time.Second)
}
}(i)
}
// แขวน goroutine หลักเพื่อหยุดโปรแกรมไม่ให้ออก
forever := make(chan bool)
<-forever
}
เคล็ดลับ: ไม่ว่าจะใช้ส่งข้อความแบบไหนก็ตามที่โดย RabbitMQ คิวสามารถมีผู้บริโภคได้หลายคน การเริ่มผู้บริโภคหลายคนก็เหมือนกับในตัวอย่างนี้นี้เช่นกัน