Simple Queue Mode of Golang RabbitMQ

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