Spring Cloud Stream হল একটি ইভেন্ট-ড্রিভেন এবং মেসেজ-ভিত্তিক অ্যাপ্লিকেশন তৈরি করার জন্য একটি ফ্রেমওয়ার্ক, যা Apache Kafka, RabbitMQ বা অন্যান্য মেসেজিং সিস্টেমের সাথে সহজে ইন্টিগ্রেট হতে পারে। Spring Cloud Stream এই মেসেজিং সিস্টেমগুলোকে ব্যবহার করে মাইক্রোসার্ভিসগুলোর মধ্যে অ্যাসিনক্রোনাস মেসেজ আদান-প্রদান সহজ করে তোলে।
নিচে Apache Kafka এবং RabbitMQ এর সাথে Spring Cloud Stream কিভাবে ইন্টিগ্রেট করা যায়, তা ব্যাখ্যা করা হয়েছে।
Spring Cloud Stream with Apache Kafka Integration
Apache Kafka হল একটি ওপেন সোর্স মেসেজ ব্রোকার, যা স্ট্রিমিং ডেটা এবং লগিং সিস্টেমের জন্য ব্যবহৃত হয়। Spring Cloud Stream Kafka এর সাথে সহজে কাজ করতে সাহায্য করে।
১. Maven ডিপেনডেন্সি
Spring Cloud Stream এবং Kafka এর সাথে ইন্টিগ্রেশন করতে আপনাকে নিচের ডিপেনডেন্সি আপনার pom.xml ফাইলে যোগ করতে হবে:
<dependencies>
<!-- Spring Cloud Stream Dependency -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-kafka</artifactId>
</dependency>
<!-- Spring Boot Starter Web (if needed) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter Messaging -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-integration</artifactId>
</dependency>
</dependencies>
২. application.yml কনফিগারেশন
Kafka এর সাথে Spring Cloud Stream কাজ করতে কিছু কনফিগারেশন সেটআপ করতে হবে। আপনার application.yml ফাইলে Kafka এর সাথে ইন্টিগ্রেশন কনফিগার করুন।
spring:
cloud:
stream:
bindings:
input:
destination: my_topic
group: my-group
content-type: application/json
output:
destination: my_topic
content-type: application/json
kafka:
binder:
brokers: localhost:9092 # Kafka broker URL
inputএবংoutputহলো Stream এর ইনপুট এবং আউটপুট চ্যানেল।my_topicহল Kafka টপিকের নাম যেখানে মেসেজ পাঠানো হবে এবং গ্রহণ করা হবে।
৩. Stream Listener এবং Source তৈরি করা
Spring Cloud Stream-এর মাধ্যমে আপনি একটি Source (message producer) এবং Sink (message consumer) তৈরি করতে পারেন। এখানে @StreamListener ব্যবহার করে মেসেজ পাঠানো এবং গ্রহণ করা হয়েছে।
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Sink;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.integration.annotation.MessageEndpoint;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Service;
@EnableBinding({Source.class, Sink.class})
@Service
public class KafkaStreamService {
// Message Producer
@StreamListener(Source.OUTPUT)
@SendTo(Source.OUTPUT) // Sending back the message
public String processMessage(String message) {
System.out.println("Received message: " + message);
return "Processed: " + message;
}
// Message Consumer
@StreamListener(Sink.INPUT)
public void consumeMessage(String message) {
System.out.println("Consumed message: " + message);
}
}
এই উদাহরণে, @StreamListener ব্যবহার করে আপনি Kafka টপিক থেকে মেসেজ গ্রহণ এবং পাঠাতে পারবেন।
৪. Kafka Topic Consumer & Producer তৈরি
- Producer (Message Sender): মেসেজ প্রেরণের জন্য
Sourceব্যবহার করা হবে। - Consumer (Message Receiver): মেসেজ গ্রহণের জন্য
Sinkব্যবহার করা হবে।
৫. Kafka Producer (Message Sender)
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.integration.annotation.MessageEndpoint;
import org.springframework.messaging.MessageChannel;
import org.springframework.stereotype.Service;
@Service
public class KafkaProducerService {
@Autowired
private MessageChannel output; // output is the channel to send messages to Kafka
public void sendMessage(String message) {
output.send(MessageBuilder.withPayload(message).build());
}
}
৬. Kafka Consumer (Message Receiver)
import org.springframework.cloud.stream.messaging.Sink;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.stereotype.Service;
@Service
public class KafkaConsumerService {
@StreamListener(Sink.INPUT)
public void consume(String message) {
System.out.println("Consumed message: " + message);
}
}
Spring Cloud Stream with RabbitMQ Integration
RabbitMQ একটি জনপ্রিয় মেসেজ ব্রোকার, যা জটিল মেসেজিং সিস্টেমের জন্য ব্যবহৃত হয়। Spring Cloud Stream RabbitMQ এর সাথে সহজে ইন্টিগ্রেট করা যায়।
১. Maven ডিপেনডেন্সি
RabbitMQ-এর সাথে Spring Cloud Stream ইন্টিগ্রেশন করতে নিচের ডিপেনডেন্সি আপনার pom.xml ফাইলে যোগ করতে হবে:
<dependencies>
<!-- Spring Cloud Stream RabbitMQ Dependency -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<!-- Spring Boot Starter Web (if needed) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
২. application.yml কনফিগারেশন
RabbitMQ-এর সাথে Spring Cloud Stream ইন্টিগ্রেশন করতে নিচের কনফিগারেশন ফাইলটি যোগ করুন:
spring:
cloud:
stream:
bindings:
input:
destination: my_queue
group: my-group
content-type: application/json
output:
destination: my_queue
content-type: application/json
rabbit:
binder:
brokers: localhost:5672 # RabbitMQ broker URL
এখানে, input এবং output RabbitMQ-এর সাথে যোগাযোগের জন্য কনফিগার করা হয়েছে। my_queue RabbitMQ-তে একটি কিউ থাকবে যেখানে মেসেজ পাঠানো এবং গ্রহণ করা হবে।
৩. Stream Listener এবং Source তৈরি করা
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Sink;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.integration.annotation.MessageEndpoint;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Service;
@EnableBinding({Source.class, Sink.class})
@Service
public class RabbitStreamService {
// Message Producer
@StreamListener(Source.OUTPUT)
@SendTo(Source.OUTPUT) // Sending back the message
public String processMessage(String message) {
System.out.println("Received message: " + message);
return "Processed: " + message;
}
// Message Consumer
@StreamListener(Sink.INPUT)
public void consumeMessage(String message) {
System.out.println("Consumed message: " + message);
}
}
Spring Cloud Stream Integration with Kafka এবং RabbitMQ-এর উপসংহার
- Spring Cloud Stream সহজেই Kafka এবং RabbitMQ এর সাথে ইন্টিগ্রেট করা যায়।
- আপনি Spring Cloud Stream ব্যবহার করে মেসেজ প্রযোজক (Producer) এবং মেসেজ গ্রহণকারী (Consumer) তৈরি করতে পারেন।
- Apache Kafka বা RabbitMQ ব্যবহারের মাধ্যমে আপনি মাইক্রোসার্ভিস আর্কিটেকচারে অ্যাসিনক্রোনাস কমিউনিকেশন করতে পারবেন, যা পারফরম্যান্স বৃদ্ধি এবং সিস্টেমের স্কেলেবিলিটি নিশ্চিত করে।
এই ইন্টিগ্রেশন আপনাকে মাইক্রোসার্ভিস অ্যাপ্লিকেশনে ইভেন্ট-ড্রিভেন আর্কিটেকচার এবং মেসেজিং সিস্টেমের ব্যবহার সহজ করবে।
Read more