গোল্যাং RabbitMQ ওয়ার্ক মোড, একাধিক কনসিউমার দ্বারা সমতল খাদ্যান্ন করা।

Golang work queue

ব্যাখ্যা: P প্রোডিউসার প্রকার করে, C1 এবং C2 কনসিউমার প্রকার করে, এবং লাল রং কিউ প্রকার করে।

পরামর্শ: প্রতি বার্তা কেবল একজন কনসিউমার দ্বারা খাদ্যান্ন করা যেতে পারে।

পূর্ব-টিউটোরিয়াল

প্রথমে Golang RabbitMQ Quick Start Tutorial পড়ুন যাতে গোল্যাং এর RabbitMQ উপর মৌলিক অপারেশনগুলি বুঝতে পারেন। যদি আপনি RabbitMQ সম্পর্কে পরিচিত না হন, তাহলে আগের অধ্যায়গুলি পড়ুন।

সমৈতিক কনসিউমপশন

Golang মূলত goroutine গুলি ব্যবহার করে একাধিক কনসিউমার কার্যান্বয়ন করে, নিচে একাধিক কনসিউমারের কার্যান্বয়ন বর্ণনা করা হয়েছে।

পরামর্শ: মেসেজ প্ঠাচার করার উপায়ৰ জন্য, দয়া করে দেখুন 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()

	// Goroutine দ্বারা 5 টি কনসিউমার তৈরি করুন
	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", // Queue নাম
				false,   // Durable
				false,   // অব্যবহৃত হলে মুছে ফেলা
				false,   // একক্লুসিভ
				false,   // নো-ওয়েট
				nil,     // Arguments
			)
			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 দ্বারা ব্যবহৃত বিনিময়ের ধরণের উপেক্ষা করা জন্য, কিউ গুলিতে একাধিক কনসিউমার থাকতে পারে, এবং এই উদাহরণে অনুরূপভাবে একাধিক কনসিউমার চালু করার উপায়টি একই হয়।