Golang RabbitMQ کام کا طریقہ، متعدد استعمال کنندگان کے ذریعے متزامن استہلاک حاصل کرنا۔
توضیح: P منتج ہے، C1 اور C2 استعمال کنندگان کو ظاہر کرتے ہیں، اور سرخ رنگ قی قو کو ظاہر کرتا ہے۔
مشق: ہر پیغام کو صرف ایک استعمال کنندہ کرسکتا ہے۔
سابقہ ہدایت
براہ کرم پہلے Golang RabbitMQ Quick Start Tutorial کو پڑھیں تاکہ Golang کے رابطہ آفریں کے بنیادی لہجے کو سمجھا جا سکے۔ اگر آپ RabbitMQ سے واقف نہیں ہیں تو براہ کرم پہلے فصول کو پڑھیں۔
متزامن استہلاک
Golang عموماً متعدد استعمال کنندگان کو پیش کرنے کے لیے گوروٹائنز کا استعمال کرتا ہے، نیچے متعدد کنندگان کے انتظام کی پیادی درج ہے۔
مشق: پیغام بھیجنے کے لیے کیسے، براہ کرم 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, "Failed to connect to RabbitMQ")
defer conn.Close()
// گوروٹائنز کے ذریعے 5 کنندگان کا انشاء کریں
for i := 0; i < 5; i++ {
go func(number int) {
// ہر کنندے کے لیے ایک رابطہ کاری کا انشاء کریں
ch, err := conn.Channel()
failOnError(err, "Failed to open a channel")
defer ch.Close()
// قی قو کلیدی کوجوجھی نہیں کرے کا اعلان کریں
q, err := ch.QueueDeclare(
"hello", // قی قو نام
false, // دائمی
false, // غیر استعمال ہونے پر حذف
false, // مختصص
false, // نہ کوئی انتظار
nil, // حجج
)
failOnError(err, "Failed to declare a queue")
// ایک کنندہ بنایں
msgs, err := ch.Consume(
q.Name, // قی قو نام
"", // کنندہ یونیک معرف ، اگر نہیں بھرا گیا تو خود بخود ایک یونیک قیمت بنائیں
true, // خود کار تصدیق پیغامات کریں (یعنی خود بخود پیغام کی تصدیق ہوگئی ہے کہ پیغام کا عمل ہوا ہے)
false, // مختصص
false, // نہ مقامی
false, // کوئی انتظار نہیں
nil, // حجات
)
failOnError(err, "Failed to register a consumer")
// پیغامات کو عمل کرنے کے لیے حلقے میں
for d := range msgs {
log.Printf("[کنندہ نمبر=%d] میسج موصول ہوا: %s", number, d.Body)
// کام کرنے کا تحاو برتانے، 1 سیکنڈ کے لیے سونا
time.Sleep(time.Second)
}
}(i)
}
// پروگرام کو باہر نکلنے سے روکنے کے لیے مین گوروٹائنز کو کھڑا کریں
forever := make(chan bool)
<-forever
}
مشق: RabbitMQ کے استعمال میں کوئی بھی تبادل کی قسم چاہے، قیوں کی متعدد استعمال کنندگان ہوسکتے ہیں، اور متعدد کنندگان کی شروعات کا طریقہ اس مثال میں ہے۔