Spring Cloud Bus হল একটি টুল যা মাইক্রোসার্ভিস আর্কিটেকচারে ডিস্ট্রিবিউটেড সিস্টেমের মধ্যে মেসেজ ব্রডকাস্ট এবং ইভেন্ট স্ট্রিমিংয়ের সুবিধা প্রদান করে। এটি সাধারণত কনফিগারেশন পরিবর্তন বা সার্ভিসের মধ্যে ইভেন্ট ট্রিগার করার জন্য ব্যবহৃত হয়।
Spring Cloud Bus ব্যবহার করে আপনি একটি সার্ভিস থেকে অন্য সার্ভিসে লক্ষণীয় (notification) বা ইভেন্ট পাঠাতে পারেন। এটি RabbitMQ বা Kafka এর মাধ্যমে মেসেজ পাঠায় এবং সার্ভিসগুলির মধ্যে দ্রুত পরিবর্তন সিঙ্ক্রোনাইজ করতে সাহায্য করে।
Spring Cloud Bus এর প্রধান বৈশিষ্ট্য
- Event Bus:
- সার্ভিসের মধ্যে ইভেন্ট ট্রান্সমিশন সহজতর করে।
- Configuration Changes:
- Spring Cloud Config এর মাধ্যমে কনফিগারেশন পরিবর্তন সবার মধ্যে প্রচার করা যায়। যখন কনফিগারেশন পরিবর্তিত হয়, Bus তা স্বয়ংক্রিয়ভাবে অন্যান্য সার্ভিসে প্রচার করে।
- Real-time Notifications:
- সার্ভিসের মধ্যে কোন পরিবর্তন হলে বা কোনো ইভেন্ট ঘটলে তা অন্য সার্ভিসগুলোকে দ্রুত জানানো যায়।
- Decoupled Communication:
- মেসেজিং সিস্টেম (যেমন Kafka বা RabbitMQ) ব্যবহার করে সার্ভিসগুলির মধ্যে যোগাযোগ করা হয়, যার ফলে বিভিন্ন সার্ভিস একে অপর থেকে স্বাধীনভাবে কাজ করতে পারে।
Spring Cloud Bus ব্যবহার করার উদাহরণ
এখানে একটি উদাহরণ দেওয়া হয়েছে যেখানে RabbitMQ ব্যবহার করা হয়েছে Spring Cloud Bus-এর সাথে। আমরা দেখব কিভাবে একটি সার্ভিস কনফিগারেশন পরিবর্তনের সঙ্গে সাথে অন্যান্য সার্ভিসকে তা জানাতে পারে।
Step 1: RabbitMQ ডিপ্লয়মেন্ট
Spring Cloud Bus RabbitMQ বা Kafka ব্যবহার করে মেসেজ ব্রডকাস্ট করে, তাই প্রথমেই আপনাকে RabbitMQ ইনস্টল করতে হবে। আপনি Docker ব্যবহার করে RabbitMQ চালু করতে পারেন:
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
RabbitMQ UI তে প্রবেশ করতে আপনি http://localhost:15672 এ গিয়ে লগইন করতে পারেন (ডিফল্ট ইউজারনেম এবং পাসওয়ার্ড: guest/guest)।
Step 2: Spring Cloud Bus সেটআপ
pom.xml-এ ডিপেনডেন্সি যোগ করাSpring Cloud Bus ব্যবহার করার জন্য নিচের ডিপেনডেন্সি গুলি
pom.xmlফাইলে যোগ করতে হবে:<dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Cloud Bus with RabbitMQ --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> <!-- Spring Cloud Config Client (Optional) --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> </dependencies>application.propertiesকনফিগারেশনSpring Cloud Bus RabbitMQ ব্যবহার করতে
application.propertiesফাইলে নিম্নলিখিত কনফিগারেশন যোগ করুন:# RabbitMQ connection configuration spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 # Spring Cloud Bus configuration spring.application.name=my-service spring.cloud.bus.enabled=truespring.rabbitmq.hostএবংspring.rabbitmq.portদ্বারা RabbitMQ সার্ভারের অবস্থান উল্লেখ করা হয়।spring.cloud.bus.enabled=trueদ্বারা Spring Cloud Bus সক্রিয় করা হয়।
@RefreshScopeঅ্যানোটেশনSpring Cloud Config এর মাধ্যমে কনফিগারেশন পরিবর্তন করতে,
@RefreshScopeঅ্যানোটেশন ব্যবহার করা হয়। এটি কনফিগারেশন পরিবর্তনের সময় Bean গুলিকে রিফ্রেশ করে।import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RefreshScope public class MyController { @Value("${message:Hello, World!}") private String message; @GetMapping("/message") public String getMessage() { return message; } }এখানে,
messageপ্রপার্টিapplication.propertiesফাইল থেকে নেওয়া হয়েছে, এবং Spring Cloud Bus-এর মাধ্যমে কনফিগারেশন পরিবর্তনের পরে এই অ্যাপ্লিকেশনটি নতুন কনফিগারেশন নিয়ে কাজ করবে।
Step 3: Spring Cloud Config Server (Optional)
Spring Cloud Config Server কনফিগারেশন ম্যানেজ করার জন্য ব্যবহৃত হয়। এটি আপনাকে সার্ভিস কনফিগারেশন সেন্ট্রালি ম্যানেজ করতে সহায়ক হয়। নিচে Config Server এর উদাহরণ দেয়া হল:
Config Server সেটআপ:
pom.xmlফাইলে Spring Cloud Config Server ডিপেনডেন্সি যোগ করুন:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>application.propertiesফাইলে কনফিগারেশন যোগ করা:spring.cloud.config.server.git.uri=https://github.com/your-config-repository spring.cloud.config.server.git.clone-on-start=true
Step 4: কনফিগারেশন পরিবর্তন এবং ব্রডকাস্ট
Spring Cloud Bus কনফিগারেশন পরিবর্তন বা অন্যান্য ইভেন্ট ব্রডকাস্ট করার জন্য ব্যবহৃত হয়। একবার যদি কনফিগারেশন পরিবর্তন হয়, তাহলে Bus এই পরিবর্তনগুলো সকল ক্লায়েন্ট সার্ভিসে পাঠাবে।
Actuator Refresh Endpoint
Spring Cloud Config-এর সাথে ইন্টিগ্রেশন করতে
/actuator/refreshএন্ডপয়েন্ট ব্যবহার করা হয়, যা কনফিগারেশন রিফ্রেশ করার জন্য কার্যকর।curl -X POST http://localhost:8080/actuator/refreshএটি কনফিগারেশন রিফ্রেশ করে এবং Spring Cloud Bus অন্যান্য সার্ভিসে কনফিগারেশন পরিবর্তন ব্রডকাস্ট করবে।
Step 5: Spring Cloud Bus ব্যবহার করা
এখন যদি আপনার কনফিগারেশন পরিবর্তন হয়, Spring Cloud Bus এটি RabbitMQ বা Kafka এর মাধ্যমে অন্যান্য সার্ভিসে ব্রডকাস্ট করবে। উদাহরণস্বরূপ:
- সার্ভিস A কনফিগারেশন পরিবর্তন হলে, সার্ভিস B এবং C তা স্বয়ংক্রিয়ভাবে গ্রহণ করবে।
- আপনি
@RefreshScopeব্যবহার করে সার্ভিস B এবং C তে কনফিগারেশন রিফ্রেশ করতে পারবেন।
উপসংহার
Spring Cloud Bus মাইক্রোসার্ভিস আর্কিটেকচারে দ্রুত কনফিগারেশন পরিবর্তন এবং ইভেন্ট ব্রডকাস্ট করার জন্য একটি শক্তিশালী সমাধান। এটি RabbitMQ বা Kafka ব্যবহার করে সার্ভিসগুলোর মধ্যে মেসেজ বা ইভেন্ট ট্রান্সমিট করতে সক্ষম। সার্ভিসের মধ্যে কনফিগারেশন পরিবর্তন সিঙ্ক্রোনাইজ করতে এবং মাইক্রোসার্ভিস গুলোর মধ্যে দ্রুত পরিবর্তন জানতে Spring Cloud Bus অত্যন্ত কার্যকর।
Read more