Simple Queue Mode of Golang RabbitMQ
ব্যাখ্যা: P প্রোডিউসার, C কনস্যুমার এবং লাল সংকেত কিউ প্রতিনিধিত্ব করে।
লক্ষ্য করুন: আপনি যদি RabbitMQ এ পরিচিত না হন, তাহলে আপনাকে প্রথমে RabbitMQ এর মৌলিক ধারণা বিভাগ পড়তে হবে।
1. ডিপেন্ডেন্সি ইনস্টল করুন
go get github.com/streadway/amqp
ডিপেন্ডেন্সি প্যাকেজটি ইম্পোর্ট করুন
import (
"github.com/streadway/amqp"
)
2. মেসেজ পাঠান
নিম্নলিখিত পদক্ষেপগুলি দেখায় যেভাবে মেসেজ প্রডিউসার মেসেজ পুশ সম্পন্ন করে।
2.1. RabbitMQ সার্ভারে সংযোগ করুন
// RabbitMQ সার্ভারে সংযোগ করুন
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
defer conn.Close()
সংযোগের ঠিকানা ব্যাখ্যা:
amqp://ব্যবহারকারীনাম:পাসওয়ার্ড@RabbitMQ ঠিকানা:পোর্ট/
2.2. একটি চ্যানেল তৈরি করুন
বেশিরভাগ প্রচেষ্টা চ্যানেলে অভিবাসন করা হয়।
ch, err := conn.Channel()
defer ch.Close()
2.3. একটি কিউ ঘোষণা করুন
পড়া বা লিখার জন্য আমরা কিুটি প্রতিনিধিত্ব করা হয়।
q, err := ch.QueueDeclare(
"hello", // কিউ নাম
false, // বার্তা অবিশ্বস্ততা
false, // ব্যবহার না হলে কিউ মুছে ফেলুন
false, // এক্সক্লুসিভ
false, // অপেক্ষা না করা হয়
nil, // আর্গুমেন্ট
)
2.4. মেসেজ পুশ করুন
// বার্তার বিষয়
body := "Hello World!"
// বার্তা পুশ করুন
err = ch.Publish(
"", // এক্সচেঞ্জ (এখানে উপেক্ষা করুন)
q.Name, // রাউটিং প্যারামিটার, কিউ নামকে রাউটিং প্যারামিটার হিসেবে ব্যবহার করুন
false, // অবশ্যই
false, // তাত্ক্ষণিক
amqp.Publishing {
ContentType: "টেক্সট/সাধারণ",
Body: []byte(body), // বার্তা বিষয়
})
2.5. মেসেজ পাঠানোর সম্পূর্ণ কোড
package main
// প্যাকেজ ইম্পোর্ট করুন
import (
"log"
"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()
// একটি চ্যানেল তৈরি করুন
ch, err := conn.Channel()
failOnError(err, "চ্যানেল খোলা ব্যর্থ হয়েছে")
defer ch.Close()
// অপারেশন করার জন্য কিউ ঘোষণা করুন
q, err := ch.QueueDeclare(
"hello", // নাম
false, // টুকটুকি
false, // অব্যাবহৃত হলে মুছুন
false, // এক্সক্লুসিভ
false, // অপেক্ষা না করুন
nil, // আর্গুমেন্ট
)
failOnError(err, "একটি কিউ ঘোষণা করা ব্যর্থ হয়েছে")
// পাঠানো মেসেজের বিষয়
body := "Hello World!"
// মেসেজ পাঠান
err = ch.Publish(
"", // এক্সচেঞ্জ
q.Name, // রাউটিং কী
false, // অবশ্যই
false, // তাত্ক্ষণিক
amqp.Publishing{
ContentType: "টেক্সট/সাধারণ",
Body: []byte(body),
})
failOnError(err, "একটি মেসেজ পাঠানো ব্যর্থ হয়েছে")
log.Printf(" [x] Sent %s", body)
}
3. বার্তা প্রাপ্তি
বার্তা প্রাপ্তির প্রথম তিনটি পদক্ষেপ বার্তা প্ঠারাদের সাথে একই, যা প্রতিষ্ঠান 2.1, 2.2 এবং 2.3 অনুসরণ করে। বার্তা প্রাপ্তির জন্য সম্পূর্ণ কোড নিম্নলিখিতটি:
package main
// গোপনীয় প্যাকেজগুলি আমদানি করুন
import (
"log"
"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()
// একটি চ্যানেল তৈরি করুন
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, // বার্তা স্বয়ংক্রিয়ভাবে স্বীকার করা কিনা, অর্থাৎ, স্বীকৃত হলে RabbitMQ-কে বার্তাটি সফলভাবে প্রসেস হয়ে গিয়েছে তা স্বয়ংক্রিয়ভাবে জানানো
false, // এক্সক্লুসিভ
false, // no-local
false, // no-wait
nil, // আর্গুমেন্টগুলি
)
failOnError(err, "গ্রাহকের নিবন্ধন করা ব্যর্থ")
// এক লোম যোগান করুন লোম থেকে বার্তা পেতে
for d := range msgs {
// বার্তার সামগ্রী মুদ্রণ করুন
log.Printf("একটি বার্তা পেয়েছে: %s", d.Body)
}
}