Spring Cloud Stream হল একটি মেসেজিং ও ইভেন্ট-ড্রিভেন মাইক্রোসার্ভিস আর্কিটেকচারের জন্য ব্যবহৃত ফ্রেমওয়ার্ক। এটি Apache Kafka, RabbitMQ, এবং অন্যান্য মেসেজিং সিস্টেমের সঙ্গে ইন্টিগ্রেটেড মেসেজিং সাপোর্ট প্রদান করে। Spring Cloud Stream ইভেন্ট-ড্রিভেন আর্কিটেকচারে producer এবং consumer মডেল ব্যবহার করে, যেখানে producer মেসেজ পাঠায় এবং consumer সেই মেসেজ গ্রহণ করে।
এখানে Spring Cloud Stream ব্যবহার করার জন্য একটি উদাহরণ দেওয়া হচ্ছে, যেখানে producer এবং consumer মাইক্রোসার্ভিস তৈরি করা হবে এবং একটি মেসেজ কিউ (যেমন RabbitMQ বা Kafka) এর মাধ্যমে মেসেজ প্রেরণ ও গ্রহণ করা হবে।
Spring Cloud Stream উদাহরণ
আমরা দুটি অ্যাপ্লিকেশন তৈরি করবো:
- Producer Service – এটি একটি মেসেজ প্রেরণ করবে।
- Consumer Service – এটি মেসেজ গ্রহণ করবে এবং প্রসেস করবে।
এখানে, আমরা RabbitMQ ব্যবহার করব মেসেজ ব্রোকার হিসেবে।
১. Maven Dependencies
Producer Service - Maven Dependency:
Producer সার্ভিসে Spring Cloud Stream এবং RabbitMQ কনফিগারেশন করতে হবে।
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Consumer Service - Maven Dependency:
Consumer সার্ভিসের জন্যও একইভাবে Spring Cloud Stream এবং RabbitMQ কনফিগারেশন করতে হবে।
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
২. Producer Service - তৈরি করা
Producer সার্ভিস একটি মেসেজ পাঠাবে RabbitMQ এ।
Producer Service - application.yml:
spring:
cloud:
stream:
bindings:
output:
destination: messages
content-type: application/json
rabbit:
binder:
nodes: localhost
Producer Service - Message Producer:
Producer Service এ একটি মেসেজ তৈরি এবং পাঠানোর জন্য একটি service class তৈরি করা হবে।
import org.springframework.cloud.stream.function.StreamBridge;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MessageProducerController {
private final StreamBridge streamBridge;
public MessageProducerController(StreamBridge streamBridge) {
this.streamBridge = streamBridge;
}
@GetMapping("/sendMessage")
public String sendMessage() {
String message = "Hello from Producer Service!";
streamBridge.send("output", message);
return "Message Sent: " + message;
}
}
- এখানে,
StreamBridgeব্যবহার করা হচ্ছে যেটি Spring Cloud Stream এর মাধ্যমে মেসেজ প্রেরণ করে। outputহল মেসেজ সেন্টারে (RabbitMQ Queue) কনফিগার করা ডেস্টিনেশন।
৩. Consumer Service - তৈরি করা
Consumer সার্ভিস মেসেজ গ্রহণ করবে এবং প্রসেস করবে।
Consumer Service - application.yml:
spring:
cloud:
stream:
bindings:
input:
destination: messages
content-type: application/json
rabbit:
binder:
nodes: localhost
Consumer Service - Message Consumer:
Consumer Service এ একটি listener তৈরি করা হবে, যা RabbitMQ থেকে মেসেজ গ্রহণ করবে এবং তা প্রসেস করবে।
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.Input;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHandler;
import org.springframework.messaging.MessagingException;
import org.springframework.stereotype.Service;
@EnableBinding(Sink.class)
@Service
public class MessageConsumerService implements MessageHandler {
@Override
public void handleMessage(Message<?> message) throws MessagingException {
System.out.println("Received message: " + message.getPayload());
}
}
- এখানে,
Sinkহল একটি Spring Cloud Stream@EnableBindingইনটারফেস যা ইনপুট চ্যানেল থেকে মেসেজ গ্রহণ করে। handleMessage()মেথডটি RabbitMQ থেকে আসা মেসেজ গ্রহণ এবং প্রসেস করে।
৪. RabbitMQ Configuration
এখানে, আমরা RabbitMQ ব্যবহার করছি মেসেজ ব্রোকার হিসেবে। নিশ্চিত করুন যে RabbitMQ আপনার মেশিনে চলমান আছে বা আপনি RabbitMQ Docker কনটেইনার ব্যবহার করছেন।
RabbitMQ Docker (যদি প্রয়োজন হয়):
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
এই কমান্ডটি RabbitMQ সার্ভার এবং ম্যানেজমেন্ট কনসোল চালু করবে। আপনি http://localhost:15672 এ RabbitMQ কনসোল অ্যাক্সেস করতে পারবেন।
৫. Application চালানো
প্রথমে Consumer Service চালু করুন:
mvn spring-boot:run -Dspring-boot.run.profiles=consumerতারপর Producer Service চালু করুন:
mvn spring-boot:run -Dspring-boot.run.profiles=producer
৬. মেসেজ পাঠানো এবং গ্রহণ করা
Producer Service থেকে
/sendMessageপাথ রিকোয়েস্ট পাঠিয়ে মেসেজ পাঠান:GET http://localhost:8081/sendMessageমেসেজটি RabbitMQ কিউতে পৌঁছানোর পর Consumer Service এটি গ্রহণ করবে এবং কনসোল এ প্রদর্শিত হবে:
Received message: Hello from Producer Service!
Conclusion
এভাবে, Spring Cloud Stream ব্যবহার করে আপনি RabbitMQ এর মাধ্যমে মেসেজ প্রেরণ এবং গ্রহণ করতে পারেন। এই উদাহরণে, Producer মাইক্রোসার্ভিস মেসেজ পাঠাচ্ছে এবং Consumer মাইক্রোসার্ভিস সেটি গ্রহণ করছে। আপনি এটি Kafka বা অন্য মেসেজ ব্রোকারের সাথে ইন্টিগ্রেট করেও ব্যবহার করতে পারেন। Spring Cloud Stream সহজে ইভেন্ট-ড্রিভেন মাইক্রোসার্ভিস আর্কিটেকচার তৈরি করতে সহায়ক।
Read more