Java-র সবচেয়ে সহজ কিউ মোডটি একটি প্রডিউসার এবং একটি কনসুমার থাকে।
বর্তমানে Java অপারেশনগুলি RabbitMQ এর সাথে প্রধানত spring-boot-starter-amqp
প্যাকেজটির মাধ্যমে Spring Boot-এর সাথে ব্যবহার করা হয়, যা প্রধানত Spring AMQP ব্যবহার করে কিউ চালানো।
1. প্রয়োজনীয় টিউটোরিয়াল
সম্পর্কিত জ্ঞান পেতে নিম্নলিখিত চ্যাপ্টারগুলি পড়ুন:
2. ডিপেন্ডেন্সি প্যাকেজ
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
3. RabbitMQ কনফিগার করুন
application.yml
কনফিগারেশনটি পরিবর্তন করুন:
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
4. কিউ ডিক্লেয়ার করুন
Spring Boot কনফিগারেশন ক্লাস মাধ্যমে কিউ কনফিগার করুন:
package com.tizi365.rabbitmq.config;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QueueConfig {
@Bean
public Queue helloQueue() {
// কিউ ঘোষণা করুন, এবং কিউ নামটি অবশ্যই অনন্য হতে হবে
return new Queue("hello");
}
}
টিপ: ব্যবসা প্রয়োজনীয়তা অনুযায়ী আপনি একাধিক কিউ যোগ করতে পারেন। কিউ নাম এবং Queue এর বিন্দু অবশ্যই আলাদা হতে হবে। এখানে, মেথডের নামটি হল Bean আইডি।
5. মেসেজ প্রেরণ করুন
মেসেজ প্রেরণের জনের রবিট টেমপ্লেট ক্লাস দরকার, যা Spring Boot ইতিমধ্যে আমাদের জন্য ইনিশিয়ালাইজ করেছে। শুধুমাত্র ইনজেক্ট করুন:
package com.tizi365.rabbitmq.service;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class SendService {
// RabbitTemplate ইনস্ট্যান্স ইনজেক্ট করুন
@Autowired
private RabbitTemplate template;
// পূর্বে ঘোষণা করা কিউটি ইনজেক্ট করুন
@Autowired
@Qualifier("helloQueue")
private Queue helloQueue;
// প্রদর্শনের জন্য, আমরা Spring-এর নির্বিশেষিত তারিখপূর্ব কাজের সিডিউলকে ব্যবহার করছি মেসেজ নিয়ে (প্রতি মেসেজ প্রতি সেকেন্ড)
@Scheduled(fixedDelay = 1000, initialDelay = 1000)
public void send() {
// মেসেজের বিষয়
String message = "Hello World!";
// মেসেজ প্রেরণ করুন
// প্রথম প্যারামিটারটি রাউটিং কী, এখানে আমরা রাউটিং কী হিসেবে কিউ নামটি ব্যবহার করছি
// দ্বিতীয় প্যারামিটারটি মেসেজের বিষয়, যেকোনো ধরনের সাপোর্ট করলেই যতক্ষণ তা সিরিয়ালাইজেশন সাপোর্ট করে
template.convertAndSend(helloQueue.getName(), message);
System.out.println("প্রেরিত করা মেসেজ '" + message + "'");
}
}
টিপ: এখানে, আমরা সরাসরি এক্সচেঞ্জ ব্যবহার করি না। মূলত ডিফল্ট এক্সচেঞ্জ (ডিরেক্ট এক্সচেঞ্জ) ব্যবহার হবে।
6. মেসেজ গ্রহণ করুন
কনসুমারের জন্য মেসেজ গ্রহণও সহজ:
package com.tizi365.rabbitmq.listener;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
// বার্তার লিস্টনার ঘোষণা করুন, `queues` প্যারামিটারের মাধ্যমে গুডবা কোন কিউ শুনতে বলা থাকে, যা আগের কিউর নাম সঙ্গে সম্পর্কিত হতে হবে
@RabbitListener(queues = "hello")
public class HelloListener {
// মেসেজ হ্যান্ডলার চিহ্নিত করার জন্য RabbitHandler ব্যবহার করা হয় এবং এটি মেসেজ প্রসেসিং লজিক বাস্তবায়ন করতে ব্যবহৃত হয়
@RabbitHandler
public void receive(String msg) {
System.out.println("কনসুমার - পেয়েছি মেসেজ '" + msg + "'");
}
}
7. কাস্টম মেসেজ টাইপ
আগে, আমরা স্ট্রিং টাইপের একটি মেসেজ প্রেরণ করেছি। ব্যবসায়িক অনুষ্ঠানে, আমরা অবশ্যই পছন্দ করব না ভিন্ন ধরনের কাস্টম জাভা অবজেক্ট ডেটা সরাসরি প্রেরণ করা।
একটি এন্টিটি অবজেক্ট নির্ধারণ করুন
package com.tizi365.rabbitmq.domain;
import java.io.Serializable;
import lombok.Data;
// ব্লগের বিষয়
@Data
public class Blog implements Serializable {
// আইডি
private Integer id;
// টাইটেল
private String title;
}
কাস্টম ধরনের মেসেজ প্রেরণ করুন
Blog blog = new Blog();
blog.setId(100);
blog.setTitle("Tizi365 RabbitMQ tutorial");
// মেসেজ প্রেরণ করুন
template.convertAndSend(helloQueue.getName(), blog);
@RabbitHandler
// মেথড প্যারামিটারকে কাস্টম মেসেজ ধরনে পরিবর্তন করুন
public void receive(Blog msg) {
System.out.println("উপভোক্তা - মেসেজ পেয়েছি '" + msg.getTitle() + "'");
}
বার্তার বিষয়বস্তুর জন্য JSON সিরিয়ালাইজেশন ব্যবহার করুন
RabbitMQ যখন জাভা এন্টিটি অবজেক্ট ডেটা পাঠায়, তখন এটি ডিফল্টভাবে JDK-র অবজেক্ট সিরিয়ালাইজেশন টুলটি ব্যবহার করে। আমরা ডেটা সিরিয়ালাইজেশনের জন্য JSON ফরম্যাট ব্যবহার করতে পারি, যা অন্য ভাষা জাভা-প্রেরিত মেসেজ কনসিউম করতে দেয় এবং মেসেজের ফরম্যাটটি আরও পঠনীয় করে।
আগের কনফিগারেশন ক্লাসটি পরিবর্তন করুন এবং মেসেজ ডেটা সির