জাভা RabbitMQ এর টপিক প্যাটার্নটি, TopicExchange ধরণটি ব্যবহার করে, রুটিং প্যাটার্ন (Direct) থেকে বিভিন্ন যেমন রুটিং প্যারামিটারগুলি ফাজি ম্যাচিং সাপোর্ট করে। রুটিং ম্যাচিং একটা পাঁচালী প্যাটার্ন হওয়ায়, এটি একটি আমজন্য ব্যবহৃত প্যাটার্ন। বাহ্যিকভাবে ডায়াগ্রামে বিশেষ স্থান দেখানো হয়েছে:
সংকেত: RabbitMQ কোণ প্যাটার্ন এই ব্যাবহৃত হোক না, তবে পার্থক্যটি আসলে বিনিময়ে বিন্দুবিদূর প্রাণালী এবং রুটিং প্যারামিটারগুলির মধ্যে।
1. প্রাচীন টিউটোরিয়াল
দয়া করে প্রথমে নিম্নলিখিত বিষয়গুলি পড়ুন যাতে সম্পর্কিত ধারণা পাওয়া যায়:
- RabbitMQ মৌলিক ধারণাগুলি
- RabbitMQ টপিক প্যাটার্ন প্রিন্সিপলস
- জাভা RabbitMQ সাথে দ্রুত শুরু (অতএব পরবর্তী বিভাগগুলি কোড পুনরাবৃত্তি করবে না, শুধুমাত্র কী-কোডটি দেখাবে)
- জাভা RabbitMQ পাবলিশ-সাবস্ক্রাইব প্যাটার্ন বিভাগ (এটি অত্যন্ত গুরুত্বপূর্ণ, তার কোড বৈশিষ্ট্য প্রায়ই একই, শুধুমাত্র এক্সচেঞ্জের ধরণ এবং রুটিং প্যারামিটারগুলি পার্থক্য করে)
2. টপিক এক্সচেঞ্জ নির্ধারণ
Spring AMQP এ, ডায়রেক্ট এক্সচেঞ্জ এর উপাদান টপিক এক্সচেঞ্জ। আমরা একটি Spring Boot কনফিগারেশন ক্লাসের মাধ্যমে এক্সচেঞ্জ নির্ধারণ করি।
package com.tizi365.rabbitmq.config;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QueueConfig {
@Bean
public TopicExchange topic() {
// এক্সচেঞ্জ নির্ধারণ করুন
// প্যারামিটারটি এক্সচেঞ্জের নাম, যা অবশ্যই অননন্য হতে হবে
return new TopicExchange("tizi365.topic");
}
}
সম্পর্কিত: বার্তা প্রসারক এবং গ্রাহক উভয়ই এক্সচেঞ্জ প্রয়োজন।
3. বার্তা প্রেরণ করা
আমরা বার্তা এক্সচেঞ্জে প্রেরণ করি, এবং ভেজানো নির্ধারণ নির্যাতন ভেজানো বিন্দুগুলিতে পরিবর্তনের আধারে পার্তা প্রেষণের নিয়মগুলি।
package com.tizi365.rabbitmq.service;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class SendService {
@Autowired
private RabbitTemplate template;
@Autowired
private TopicExchange topic;
// ডেমো উদ্দেশ্যে, এখানে একটি নির্ধারিত কর্মক্ষমতা ব্যবহার করা হয়েছে যাতে প্রতি সেকেন্ডে একটি বার্তা প্রেরণ করা যায়
@Scheduled(fixedDelay = 1000, initialDelay = 1000)
public void send() {
// বার্তার সামগ্রী
String message = "হ্যালো ওয়ার্ল্ড!";
// বার্তা প্রেরণ
// প্রথম প্যারামিটারটি এক্সচেঞ্জ নাম
// দ্বিতীয় প্যারামিটারটি রুটিং কী। টপিক এক্সচেঞ্জ বার্তা প্রেরণ করে যা রুটিং কীর ম্যাচ করে
// তৃতীয় প্যারামিটারটি হল বার্তার সামগ্রী, যেকোনো প্রকারের সাপ্তাহিক হলে তবে যতক্ষণ তা সিরিয়ালাইজ করা যায়
template.convertAndSend(topic.getName(), "www.tizi365.com", message);
System.out.println("বার্তা প্রেরিত: '" + message + "'");
}
}
সম্পর্কিত: convertAndSend পদ্ধতিতে দ্বিতীয় প্যারামিটার "www.tizi365.com" এর মধ্যে দৃষ্টিগোচর করুন, কোন অনবশ্যম।
4. বার্তা গ্রহণ
4.1 কিউ এবং এক্সচেঞ্জ বাঁধার সংজ্ঞা
সিদ্ধান্ত করার জন্য মেসেজ কিউ থেকে মেসেজ সেবন করতে, আপনাকে প্রথমে একটি কিউ সংজ্ঞায়িত করতে হবে এবং তারপর সে কিউ টি লক্ষ্য এক্সচেঞ্জে বাইন্ড করতে হবে। নীচে, দুটি কিউ সংজ্ঞায়িত এবং একই এক্সচেঞ্জে বাইন্ড করা হয়েছে।
package com.tizi365.rabbitmq.config;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QueueConfig {
@Bean
public TopicExchange topic() {
// এক্সচেঞ্জ সংজ্ঞায়িত করুন
// প্যারামিটারটি হল এক্সচেঞ্জের নাম, যা অবশ্যই অদ্বিতীয় হতে হবে
return new TopicExchange("tizi365.topic");
}
@Bean
public Queue queue1() {
// কিউ 1 সংজ্ঞায়িত করুন
return new Queue("tizi365.topic.queue1");
}
@Bean
public Queue queue2() {
// কিউ 2 সংজ্ঞায়িত করুন
return new Queue("tizi365.topic.queue2");
}
@Bean
public Binding binding1(TopicExchange topic, Queue queue1) {
// অনুমানিত সম্পর্ক সংজ্ঞায়িত করুন, রাউটিং কী 1-কে বাইন্ড করুন এক্সচেঞ্জের সাথে: *.tizi365.com
return BindingBuilder.bind(queue1).to(topic).with("*.tizi365.com");
}
@Bean
public Binding binding2(TopicExchange topic, Queue queue2) {
// অনুমানিত সম্পর্ক সংজ্ঞায়িত করুন, রাউটিং কী 2-কে বাইন্ড করুন ডাইরেক্ট এক্সচেঞ্জের সাথে: *.baidu.com
return BindingBuilder.bind(queue2).to(topic).with("*.baidu.com");
}
}
টিপ: কিউ 1 এবং কিউ 2-কে এক্সচেঞ্জে বাইন্ড করার সময়, রাউটিং কী সেট করা হয়েছে * (তারকা) ওয়াইল্ডকার্ড ব্যবহার করে, যা একটি শব্দ ম্যাচ করে। যদি # (হ্যাশ) এ পরিবর্তন করা হয়, তাহলে এটি একাধিক শব্দ ম্যাচ করবে।
4.2 কিউ লিস্টেনার সংজ্ঞা
রেবিটলিস্টেনার এ্যানোটেশন ব্যবহার করে নির্দিষ্ট কিউ থেকে মেসেজ সেবনের জন্য মেসেজ লিস্টেনার সংজ্ঞায়িত করুন।
package com.tizi365.rabbitmq.listener;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.stereotype.Component;
// স্প্রিংকে বর্তমান ক্লাস পরিচালান করান
@Component
public class DemoListener {
// একটি লিস্টেনার সংজ্ঞায