Spring Cloud Config Server একটি সার্ভিস যা মাইক্রোসার্ভিস আর্কিটেকচারে কনফিগারেশন ম্যানেজমেন্ট করতে ব্যবহৃত হয়। এটি একটি কেন্দ্রীয় কনফিগারেশন স্টোর হিসেবে কাজ করে, যেখানে সমস্ত মাইক্রোসার্ভিসের কনফিগারেশন এক জায়গায় রাখা হয় এবং বিভিন্ন সার্ভিসগুলি সেই কনফিগারেশন রিটার্ন করতে পারে। এই কনফিগারেশনগুলি Git, JDBC, File System ইত্যাদি থেকে রিট্রিভ করা যেতে পারে।
Spring Cloud Config Server মূলত একটি centralized configuration server হিসেবে কাজ করে, যেখানে সমস্ত মাইক্রোসার্ভিসের জন্য কনফিগারেশন একত্রিত করা হয় এবং সার্ভিসগুলো সহজে সেই কনফিগারেশন ব্যবহার করতে পারে।
Spring Cloud Config Server সেটআপ করার জন্য ধাপসমূহ:
১. Spring Cloud Config Server ডিপেনডেন্সি যোগ করা
প্রথমে, আপনাকে Spring Cloud Config Server ডিপেনডেন্সি আপনার pom.xml-এ যোগ করতে হবে।
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
এটি আপনার প্রজেক্টে Spring Cloud Config Server এর জন্য প্রয়োজনীয় সমস্ত ডিপেনডেন্সি যোগ করবে।
২. Config Server কনফিগারেশন
Config Server-এর জন্য @EnableConfigServer অ্যানোটেশন ব্যবহার করুন। এটি স্প্রিং বুট অ্যাপ্লিকেশনকে একটি কনফিগারেশন সার্ভার হিসাবে কনফিগার করবে।
ConfigServerApplication.java:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
এই ক্লাসটি Spring Boot application এবং Config Server এর জন্য শুরু করার জন্য প্রয়োজনীয় অ্যানোটেশন দিয়ে সেটআপ করা হয়েছে।
৩. Config Server কনফিগারেশন ফাইল (application.yml)
application.yml বা application.properties ফাইলের মাধ্যমে কনফিগারেশন সার্ভারের বিভিন্ন কনফিগারেশন সেট করুন। সাধারণত এটি Git রেপোজিটরি থেকে কনফিগারেশন ফাইলগুলো রিট্রিভ করতে ব্যবহৃত হয়।
application.yml:
server:
port: 8888
spring:
cloud:
config:
server:
git:
uri: https://github.com/your/repository
clone-on-start: true
এখানে, uri দিয়ে আপনি Git repository এর URL দিন যেখানে আপনার কনফিগারেশন ফাইলগুলি রাখা আছে। এই কনফিগারেশন ফাইলটি YAML অথবা properties ফরম্যাটে থাকতে পারে। এছাড়া, clone-on-start সেটিংটি সার্ভার চালু হলে গিট রিপোজিটরি থেকে কনফিগারেশন ফাইল ক্লোন করার জন্য ব্যবহৃত হয়।
৪. Config Server এর জন্য Git রিপোজিটরি প্রস্তুত করা
Config Server সাধারণত Git রিপোজিটরি থেকে কনফিগারেশন ফাইল পাবে। এটি একটি সাধারণ Git repository হতে পারে, যেখানে মাইক্রোসার্ভিসগুলির জন্য কনফিগারেশন রাখা থাকে।
উদাহরণ: Git Repo Structure
/config-repo
├── application.yml
├── service1.yml
└── service2.yml
এখানে, application.yml গ্লোবাল কনফিগারেশন হতে পারে, এবং service1.yml এবং service2.yml নির্দিষ্ট সার্ভিসের কনফিগারেশন।
৫. Config Client কনফিগারেশন (Client Side)
মাইক্রোসার্ভিসগুলোতে কনফিগারেশন প্রাপ্তি নিশ্চিত করতে, আপনাকে ক্লায়েন্ট সাইডে spring-cloud-starter-config ডিপেনডেন্সি যোগ করতে হবে এবং config server এর URL কনফিগার করতে হবে।
pom.xml (Client Side):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
application.yml (Client Side):
spring:
cloud:
config:
uri: http://localhost:8888
এখানে uri সেট করা হয়েছে যেখানে Config Server রান করছে। এটি কনফিগারেশন রিট্রিভ করার জন্য Config Server এর এন্ডপয়েন্ট।
৬. Config Server থেকে কনফিগারেশন রিটার্ভ করা
একবার Config Server চালু হলে, ক্লায়েন্ট মাইক্রোসার্ভিসগুলি কনফিগারেশন তথ্য Config Server থেকে রিট্রিভ করতে সক্ষম হবে।
উদাহরণ:
ধরা যাক, application.yml ফাইলের মধ্যে এই কনফিগারেশনটি রয়েছে:
myapp:
name: My Spring Cloud Application
description: This is a Spring Cloud Example
এটি আপনার ক্লায়েন্ট মাইক্রোসার্ভিসে পাওয়া যাবে এবং আপনি এটি ব্যবহার করতে পারবেন।
ক্লায়েন্ট অ্যাপ্লিকেশনে কনফিগারেশন প্রাপ্তি:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AppController {
@Value("${myapp.name}")
private String appName;
@Value("${myapp.description}")
private String appDescription;
@GetMapping("/config")
public String getConfig() {
return "App Name: " + appName + ", Description: " + appDescription;
}
}
এটি Config Server থেকে কনফিগারেশন ডেটা রিটার্ভ করে এবং একটি REST API এর মাধ্যমে এটি প্রদর্শন করবে।
৭. Config Server এবং Client এর মধ্যে Communication
- Config Server এবং Client এর মধ্যে যোগাযোগ HTTP এর মাধ্যমে ঘটে।
- Client কনফিগারেশন প্রাপ্তির জন্য Config Server এর /actuator/env বা /config/{application}/{profile} এন্ডপয়েন্ট কল করে।
৮. Config Server এর নিরাপত্তা
আপনি OAuth2 বা Basic Authentication ব্যবহার করে Config Server সুরক্ষিত করতে পারেন। উদাহরণস্বরূপ, যদি আপনাকে Basic Authentication ব্যবহার করতে হয়, তাহলে আপনাকে application.yml ফাইলে ইউজারনেম এবং পাসওয়ার্ড সেট করতে হবে।
application.yml (Config Server Security):
spring:
security:
user:
name: config-user
password: config-password
উপসংহার
Spring Cloud Config Server মাইক্রোসার্ভিস আর্কিটেকচারের জন্য একটি গুরুত্বপূর্ণ উপাদান, যা সমস্ত মাইক্রোসার্ভিসের জন্য একটি কেন্দ্রীয় কনফিগারেশন সার্ভিস সরবরাহ করে। এটি বিভিন্ন পরিবেশে মাইক্রোসার্ভিসগুলির কনফিগারেশন সিঙ্ক্রোনাইজ করতে সাহায্য করে, এবং পরিবর্তনগুলো মাইক্রোসার্ভিসে সহজে প্রয়োগ করা সম্ভব হয়। এটি Git, JDBC বা ফাইল সিস্টেমের মাধ্যমে কনফিগারেশন ম্যানেজ করতে পারে, যা মাইক্রোসার্ভিসগুলির জন্য একীভূত কনফিগারেশন ম্যানেজমেন্ট নিশ্চিত করে।
Spring Cloud Config Server একটি কেন্দ্রীয় কনফিগারেশন সার্ভিস যা মাইক্রোসার্ভিস আর্কিটেকচারের মধ্যে সমস্ত সার্ভিসের কনফিগারেশন সেন্ট্রালাইজড এবং ম্যানেজ করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের কনফিগারেশনগুলি একটি কেন্দ্রীয় রিপোজিটরি (যেমন Git, SVN বা ফাইল সিস্টেম) থেকে একসাথে সংগ্রহ এবং রিফ্রেশ করতে পারেন। এতে সার্ভিসগুলো নির্ভরশীল হয়ে পড়ে না যে তাদের কনফিগারেশন ফাইল কোথায় সঞ্চিত আছে এবং তা ডেভেলপমেন্ট বা প্রোডাকশন পরিবেশে কিভাবে কনফিগার করা হয়েছে।
Config Server একটি সার্ভার হিসাবে কাজ করে, যা ক্লায়েন্টদের কনফিগারেশন প্রদান করে, এবং কনফিগারেশনগুলি আপডেটের ক্ষেত্রে পরিবর্তনগুলো রিফ্রেশ করতে সাহায্য করে।
Config Server এর প্রয়োজনীয়তা:
- কেন্দ্রীভূত কনফিগারেশন ম্যানেজমেন্ট:
- যখন অনেক মাইক্রোসার্ভিস একসাথে কাজ করে, তখন প্রতিটি সার্ভিসের কনফিগারেশন আলাদাভাবে রাখা এবং ম্যানেজ করা কঠিন হয়ে পড়ে।
Spring Cloud Config Serverএর মাধ্যমে সমস্ত সার্ভিসের কনফিগারেশন এক জায়গায় রাখা এবং এটি ম্যানেজ করা সহজ হয়।
- যখন অনেক মাইক্রোসার্ভিস একসাথে কাজ করে, তখন প্রতিটি সার্ভিসের কনফিগারেশন আলাদাভাবে রাখা এবং ম্যানেজ করা কঠিন হয়ে পড়ে।
- ডাইনামিক কনফিগারেশন রিফ্রেশ:
- Config Server আপনাকে সার্ভিসের কনফিগারেশন পরিবর্তন করার জন্য গিট রিপোজিটরি বা অন্য উৎস ব্যবহার করতে দেয়। কনফিগারেশন পরিবর্তনগুলি শুধুমাত্র একটি সেন্ট্রাল অবস্থানে করা হয় এবং তা স্বয়ংক্রিয়ভাবে সমস্ত ক্লায়েন্ট সার্ভিসে প্রোপাগেট করা যায়।
- কনফিগারেশন পরিবর্তনের পর সার্ভিস গুলি নিজের কনফিগারেশন রিফ্রেশ করে নেয়।
- কনফিগারেশন রিপোজিটরি:
- কনফিগারেশন ফাইলগুলি যেমন
application.propertiesবাapplication.ymlএক্সটার্নাল রিপোজিটরি (যেমন Git) থেকে লোড করা হয়, যা ডেভেলপারদের জন্য বেশ সুবিধাজনক। একাধিক অ্যাপ্লিকেশন কনফিগারেশন একই রিপোজিটরির মধ্যে রাখা যেতে পারে।
- কনফিগারেশন ফাইলগুলি যেমন
- বিভিন্ন পরিবেশের কনফিগারেশন পরিচালনা:
- Config Server বিভিন্ন পরিবেশের জন্য আলাদা আলাদা কনফিগারেশন ফাইল রাখতে সহায়ক। যেমন, আপনি
application-dev.properties,application-prod.propertiesবাapplication-test.propertiesফাইল তৈরি করতে পারেন।
- Config Server বিভিন্ন পরিবেশের জন্য আলাদা আলাদা কনফিগারেশন ফাইল রাখতে সহায়ক। যেমন, আপনি
- অডিট এবং ট্র্যাকিং:
- সমস্ত কনফিগারেশন ফাইল এক রিপোজিটরিতে রাখলে, আপনি সহজেই কনফিগারেশন পরিবর্তন ট্র্যাক করতে পারবেন এবং যখন পরিবর্তন করা হয়েছে তা দেখতে পারবেন। গিট রিপোজিটরি ব্যবহার করলে, অডিট লগ পাওয়া যায় এবং পরিবর্তনের ইতিহাস বজায় থাকে।
- একটি কেন্দ্রীয় ব্যবস্থায় সুরক্ষা:
- সেন্ট্রাল কনফিগারেশন সার্ভিস ব্যবহার করার মাধ্যমে নিরাপত্তা নিশ্চিত করা যায়, কারণ আপনি কনফিগারেশন নিরাপদ এবং নিয়ন্ত্রণযোগ্যভাবে ম্যানেজ করতে পারেন।
Spring Cloud Config Server কীভাবে কাজ করে?
Config Server সাধারণত একটি RESTful সার্ভিস যা কনফিগারেশন ফাইলগুলিকে Git বা SVN রিপোজিটরি থেকে লোড করে এবং ক্লায়েন্টদের প্রদান করে।
- কনফিগারেশন সেন্ট্রালাইজেশন:
- আপনি সমস্ত কনফিগারেশন ফাইল একসাথে গিট রিপোজিটরিতে সংরক্ষণ করতে পারেন, এবং Config Server সেই ফাইলগুলি ক্লায়েন্ট সার্ভিসে প্রদান করবে।
- রিফ্রেশ পদ্ধতি:
- Config Server থেকে কনফিগারেশন রিফ্রেশ করার জন্য /refresh এন্ডপয়েন্ট ব্যবহার করা হয়। এটি অ্যাপ্লিকেশনকে তার কনফিগারেশন রিফ্রেশ করার জন্য সিগন্যাল দেয়।
- Environment-specific কনফিগারেশন:
- Config Server পরিবেশভিত্তিক কনফিগারেশন ফাইল ব্যবহার করতে পারে (যেমন,
application-dev.properties,application-prod.properties)। এই ফাইলগুলো নির্দিষ্ট পরিবেশের জন্য কনফিগারেশন সংরক্ষণ করে।
- Config Server পরিবেশভিত্তিক কনফিগারেশন ফাইল ব্যবহার করতে পারে (যেমন,
Spring Cloud Config Server কনফিগারেশন উদাহরণ:
Config Server সেটআপ:
প্রথমে, Spring Cloud Config Server অ্যাপ্লিকেশন তৈরি করতে হবে।
pom.xml (Config Server ডিপেন্ডেন্সি):
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>application.yml (Config Server কনফিগারেশন):
spring: cloud: config: server: git: uri: https://github.com/your-repo/config-repo searchPaths: '{application}' cloneOnStart: trueএই কনফিগারেশনটি একটি Git রিপোজিটরির URL প্রদান করে যেখানে কনফিগারেশন ফাইলগুলি সংরক্ষিত থাকে।
Config Client সেটআপ:
pom.xml (Config Client ডিপেন্ডেন্সি):
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>application.yml (Config Client কনফিগারেশন):
spring: application: name: my-service cloud: config: uri: http://localhost:8888 # Config Server URIএই কনফিগারেশনটি Config Server থেকে কনফিগারেশন ডাটা রিট্রাইভ করবে।
- কনফিগারেশন রিফ্রেশিং: কনফিগারেশন পরিবর্তন হলে আপনি
POST /actuator/refreshএন্ডপয়েন্টে রিকোয়েস্ট পাঠিয়ে কনফিগারেশন রিফ্রেশ করতে পারেন।
Config Server এর সুবিধা:
- কেন্দ্রীভূত কনফিগারেশন: মাইক্রোসার্ভিস আর্কিটেকচারে কনফিগারেশন কেন্দ্রীয়ভাবে পরিচালনা করা সম্ভব।
- ডাইনামিক কনফিগারেশন রিফ্রেশ: কনফিগারেশন পরিবর্তন করলে, সমস্ত সার্ভিসে তা সহজে রিফ্রেশ করা যায়।
- বিভিন্ন পরিবেশের কনফিগারেশন: ডেভেলপমেন্ট, প্রোডাকশন ইত্যাদি পরিবেশে আলাদা আলাদা কনফিগারেশন রাখা যায়।
- নিরাপত্তা: একটি কেন্দ্রীয় কনফিগারেশন সার্ভিস নিরাপদে কনফিগারেশন সংরক্ষণ করতে সাহায্য করে।
উপসংহার:
Spring Cloud Config Server একটি শক্তিশালী টুল যা মাইক্রোসার্ভিস আর্কিটেকচারের কনফিগারেশন ম্যানেজমেন্টকে সহজ করে তোলে। এটি সার্ভিসগুলির কনফিগারেশন সেন্ট্রালাইজ করতে, পরিবর্তন করতে এবং নিরাপদে পরিচালনা করতে সহায়ক, ফলে আপনার অ্যাপ্লিকেশন আরও স্কেলেবল এবং ম্যানেজযোগ্য হয়ে ওঠে।
Spring Cloud Config Server হল একটি সেন্ট্রাল কনফিগারেশন সার্ভিস, যা Spring Boot অ্যাপ্লিকেশনগুলির কনফিগারেশন স্টোর এবং ম্যানেজ করার জন্য ব্যবহৃত হয়। এটি মাইক্রোসার্ভিস আর্কিটেকচারে সমস্ত সার্ভিসের কনফিগারেশনকে একটি সেন্ট্রাল প্লেসে রাখার সুবিধা দেয় এবং আপনার অ্যাপ্লিকেশনকে কনফিগারেশন পরিবর্তনগুলি সহজে এক্সেস করার অনুমতি দেয়।
Spring Cloud Config Server সেটআপ এবং কনফিগারেশন প্রক্রিয়া:
ধাপ ১: প্রয়োজনীয় ডিপেনডেন্সি যোগ করুন
প্রথমে Spring Cloud Config Server এবং Spring Cloud Config Client এর জন্য প্রয়োজনীয় ডিপেনডেন্সি আপনার pom.xml ফাইলে যোগ করুন।
Config Server Dependency (pom.xml):
<dependencies>
<!-- Spring Boot Starter Web for REST API -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Cloud Config Server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- Spring Boot Starter Actuator (Optional for monitoring) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
Config Client Dependency (pom.xml):
<dependencies>
<!-- Spring Boot Starter Web for REST API -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Cloud Config Client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
ধাপ ২: Config Server কনফিগার করুন
2.1. Config Server অ্যাপ্লিকেশন তৈরি করুন:
Spring Cloud Config Server সঠিকভাবে কাজ করার জন্য আপনাকে @EnableConfigServer এনোটেশন ব্যবহার করে একটি অ্যাপ্লিকেশন তৈরি করতে হবে। এই অ্যাপ্লিকেশনটি আপনার সমস্ত মাইক্রোসার্ভিসের কনফিগারেশন পাঠাবে।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
2.2. application.properties কনফিগারেশন:
application.properties বা application.yml ফাইল কনফিগার করে Config Server-কে বলুন কোন রিপোজিটরি থেকে কনফিগারেশন ফাইল পড়তে হবে।
# Config Server Configuration
server.port=8888
spring.cloud.config.server.git.uri=https://github.com/your-username/your-config-repository
spring.cloud.config.server.git.clone-on-start=true
spring.cloud.config.server.git.searchPaths=configs
spring.cloud.config.server.git.username=your-username
spring.cloud.config.server.git.password=your-password
spring.cloud.config.server.git.uri: এটি গিট রিপোজিটরি ইউআরএল যেখানে আপনার কনফিগারেশন ফাইল রয়েছে।spring.cloud.config.server.git.searchPaths: কনফিগারেশন ফাইলের অবস্থান (যদি আপনি গিট রিপোজিটরিতে একাধিক ফোল্ডার ব্যবহার করেন)।spring.cloud.config.server.git.usernameওspring.cloud.config.server.git.password: যদি রিপোজিটরি প্রাইভেট হয়, তবে আপনার গিট রিপোজিটরি অ্যাক্সেসের জন্য ইউজারনেম এবং পাসওয়ার্ড ব্যবহার করতে হবে।
ধাপ ৩: Config Server এর জন্য Git Repository তৈরি করুন
Config Server গিট রিপোজিটরি থেকে কনফিগারেশন ফাইল পড়বে, তাই একটি গিট রিপোজিটরি তৈরি করুন (যদি আপনি আগে থেকেই না করে থাকেন)। আপনি এখানে কনফিগারেশন ফাইল যেমন application.properties বা application.yml রাখতে পারেন।
উদাহরণ:
# application.yml
server:
port: 8081
spring:
application:
name: my-service
এই ফাইলটি গিট রিপোজিটরিতে যোগ করুন এবং Config Server-এ ব্যবহার করার জন্য সেট আপ করুন।
ধাপ ৪: Config Client কনফিগার করুন
Config Client সেট আপ করতে হলে, spring-cloud-starter-config ডিপেনডেন্সি এবং কনফিগারেশন প্রপার্টি যোগ করতে হবে।
4.1. Client অ্যাপ্লিকেশন তৈরি করুন:
Client অ্যাপ্লিকেশন আপনার Spring Boot অ্যাপ্লিকেশন হতে পারে, যা কনফিগারেশন সার্ভার থেকে কনফিগারেশন গ্রহণ করবে।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
4.2. Client কনফিগারেশন (application.properties):
Config Client-এর application.properties ফাইলে আপনি Config Server এর ইউআরএল এবং সার্ভিসের নাম উল্লেখ করবেন।
# Config Client Configuration
spring.application.name=my-service
spring.cloud.config.uri=http://localhost:8888
এখানে, spring.cloud.config.uri Config Server-এর URL যেখানে আপনার কনফিগারেশন ফাইল রাখা আছে।
4.3. Client কনফিগারেশন ব্যবহার:
@RefreshScope এনোটেশন ব্যবহার করে ডাইনামিক কনফিগারেশন রিফ্রেশ করার অনুমতি দেওয়া যায়।
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 ConfigClientController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/config")
public String getConfig() {
return "Config Server Port: " + serverPort;
}
}
এখানে, @Value("${server.port}") কনফিগারেশন ফাইল থেকে server.port প্রপার্টি কে ইনজেক্ট করবে এবং /config এ এই কনফিগারেশন প্রদর্শন করবে।
ধাপ ৫: Config Server এবং Client চালু করুন
- প্রথমে Config Server অ্যাপ্লিকেশন চালু করুন।
- তারপর Config Client অ্যাপ্লিকেশন চালু করুন।
- ব্রাউজারে
http://localhost:8081/configগিয়ে কনফিগারেশন তথ্য দেখুন।
ধাপ ৬: কনফিগারেশন রিফ্রেশ করুন (Optional)
যদি আপনি কনফিগারেশন পরিবর্তন করতে চান এবং সেটা Client অ্যাপ্লিকেশন-এ রিফ্রেশ করতে চান, তবে আপনি @RefreshScope ব্যবহার করতে পারেন এবং /actuator/refresh এ POST রিকোয়েস্ট পাঠাতে পারেন।
curl -X POST http://localhost:8081/actuator/refresh
এটি Config Server থেকে নতুন কনফিগারেশন লোড করবে এবং Client অ্যাপ্লিকেশন তা রিফ্রেশ করবে।
সংক্ষেপে:
- Config Server একটি সেন্ট্রাল কনফিগারেশন ম্যানেজমেন্ট সিস্টেম তৈরি করে যা মাইক্রোসার্ভিস অ্যাপ্লিকেশনগুলির কনফিগারেশন সেন্ট্রালাইজ করে রাখে।
- Config Server থেকে গিট রিপোজিটরি অথবা ফাইল সিস্টেমের মাধ্যমে কনফিগারেশন লোড করা যায়।
- Config Client অ্যাপ্লিকেশন কনফিগারেশন গ্রহণ করে এবং
@RefreshScopeব্যবহার করে কনফিগারেশন রিফ্রেশ করতে সক্ষম হয়।
Spring Cloud Config ব্যবহারের মাধ্যমে আপনি কনফিগারেশন ম্যানেজমেন্ট প্রক্রিয়া সহজ ও সেন্ট্রালাইজড করতে পারেন, যা মাইক্রোসার্ভিস আর্কিটেকচারের জন্য অত্যন্ত কার্যকর।
Spring Cloud-এ Git Repository ব্যবহার করে কনফিগারেশন Externalize করা একটি শক্তিশালী বৈশিষ্ট্য, যা মাইক্রোসার্ভিস আর্কিটেকচারে কনফিগারেশন ম্যানেজমেন্ট সহজ করে। এটি আপনার অ্যাপ্লিকেশনের কনফিগারেশনকে একত্রে সংরক্ষণ করতে এবং সার্ভিসগুলোকে ডাইনামিকভাবে কনফিগারেশন আপডেট করতে সক্ষম করে, যার ফলে কনফিগারেশন পরিবর্তন করার জন্য সার্ভিসের রিইস্টার্ট করার প্রয়োজন হয় না।
Git Repository ব্যবহার করে কনফিগারেশন Externalize করার উপকারিতা:
- Centralized Configuration: সমস্ত সার্ভিসের কনফিগারেশন এক জায়গায় রাখা সম্ভব হয়।
- Dynamic Refresh: কনফিগারেশন পরিবর্তন করতে হলে সার্ভিস রিইস্টার্ট করার প্রয়োজন হয় না।
- Version Control: কনফিগারেশন ফাইলগুলো Git-এর মাধ্যমে ভার্সন কন্ট্রোল করা যায়, যা ট্র্যাকিং এবং রোলব্যাক সহজ করে।
Spring Cloud Config Server: Git Repository ব্যবহার করে কনফিগারেশন Externalize করা
Spring Cloud Config Server-এর মাধ্যমে Git Repository থেকে কনফিগারেশন লোড করা হয়। এর জন্য আপনাকে দুটি প্রধান উপাদান তৈরি করতে হবে:
- Spring Cloud Config Server (যা Git Repository থেকে কনফিগারেশন লোড করবে)
- Spring Cloud Config Client (যা Config Server থেকে কনফিগারেশন ব্যবহার করবে)
1. Spring Cloud Config Server Configuration
Spring Cloud Config Server তৈরি করতে প্রথমে একটি Spring Boot অ্যাপ্লিকেশন তৈরি করুন এবং spring-cloud-config-server ডিপেন্ডেন্সি যুক্ত করুন।
Maven Dependency (pom.xml)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
Config Server Configuration (application.yml)
Config Server-এর জন্য application.yml বা application.properties ফাইল কনফিগার করুন। এখানে আমরা Git repository থেকে কনফিগারেশন ফাইল লোড করব।
server:
port: 8888 # Config server runs on port 8888
spring:
cloud:
config:
server:
git:
uri: https://github.com/your-org/config-repo # Replace with your Git repository URL
searchPaths: '{application}' # Optional: specifies which directory within the repo to search for config
clone-on-start: true # Optionally clone on start
username: your-username # Optional: if repository is private
password: your-password # Optional: if repository is private
Config Server Enablement (ConfigServerApplication.java)
Config Server সক্রিয় করতে @EnableConfigServer ব্যবহার করুন।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
2. Spring Cloud Config Client Configuration
Config Client একটি মাইক্রোসার্ভিস যা Config Server থেকে কনফিগারেশন ফাইল লোড করবে।
Maven Dependency (pom.xml)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
Client Application Configuration (application.yml)
Config Client এ application.yml বা application.properties ফাইল কনফিগার করুন এবং Config Server URL উল্লেখ করুন।
spring:
application:
name: my-service # Name of the client service
cloud:
config:
uri: http://localhost:8888 # Config Server URL
Client Application Example (ClientApplication.java)
Config Client-এর একটি সাধারণ উদাহরণ:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
@GetMapping("/config-info")
public String getConfigInfo() {
return "Config loaded successfully from Config Server!";
}
}
3. Git Repository Configuration File
Git Repository এ কনফিগারেশন ফাইলগুলো রাখুন। উদাহরণস্বরূপ, যদি আপনার মাইক্রোসার্ভিসের নাম my-service হয়, তবে আপনার Git repository এ একটি my-service.yml অথবা application.yml ফাইল থাকতে হবে।
Example my-service.yml in Git Repo:
server:
port: 8081 # Custom port for this client
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: user
password: password
4. Refresh Configuration Dynamically
Spring Cloud Config Server এবং Client এর সাহায্যে কনফিগারেশনকে ডাইনামিকালি রিফ্রেশ করা যায়, অর্থাৎ কনফিগারেশন পরিবর্তন করলেও সার্ভিস রিইস্টার্ট করার প্রয়োজন হয় না।
Actuator Endpoint for Refresh (Client Application)
Config Client এ spring-boot-starter-actuator ডিপেন্ডেন্সি যুক্ত করুন।
Maven Dependency:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Config Client এর application.yml এ রিফ্রেশ কল করার জন্য @RefreshScope এবং /actuator/refresh এনডপয়েন্ট সক্রিয় করুন।
Add @RefreshScope annotation:
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;
@RefreshScope
@RestController
public class ConfigController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/config-port")
public String getConfigPort() {
return "Server port from config: " + serverPort;
}
}
Trigger Refresh:
কনফিগারেশন রিফ্রেশ করতে, /actuator/refresh এ HTTP POST রিকোয়েস্ট পাঠান।
curl -X POST http://localhost:8081/actuator/refresh
এটি কনফিগারেশন পুনরায় লোড করবে এবং যেকোনো পরিবর্তন অ্যাপ্লিকেশনে প্রতিফলিত হবে।
5. Spring Cloud Config Server with GitHub Example
Config Server এবং Client এর পুরো কাঠামো GitHub ব্যবহার করে কনফিগারেশন ম্যানেজমেন্টের জন্য সাজানো যায়। যখন কনফিগারেশন GitHub repository থেকে সরবরাহ করা হয়, তখন এটি ডেভেলপারদের জন্য খুবই সুবিধাজনক এবং কনফিগারেশন আপডেট এবং রোলব্যাক সহজ হয়।
উপসংহার:
Spring Cloud Config Server এবং GitHub repository ব্যবহার করে কনফিগারেশন Externalize করার মাধ্যমে আপনি মাইক্রোসার্ভিস আর্কিটেকচারের জন্য সেন্ট্রালাইজড কনফিগারেশন ম্যানেজমেন্ট বাস্তবায়ন করতে পারেন। এর মাধ্যমে আপনি আপনার সার্ভিসের কনফিগারেশন সহজভাবে ম্যানেজ এবং ডাইনামিকভাবে আপডেট করতে পারবেন, যেটি সিস্টেমের ফ্লেক্সিবিলিটি এবং মেইনটেনিবিলিটি বৃদ্ধি করবে।
যদি আরো কোনো অংশে সাহায্য বা বিস্তারিত ব্যাখ্যা প্রয়োজন হয়, জানাবেন! 😊
স্প্রিং ক্লাউড কনফিগারেশন (Spring Cloud Config) হল একটি সেন্ট্রাল কনফিগারেশন সার্ভিস যা মাইক্রোসার্ভিসগুলির জন্য কনফিগারেশন ম্যানেজমেন্ট সহজ করে। স্প্রিং ক্লাউড কনফিগ সার্ভার কনফিগারেশন ফাইলগুলোকে একটি সেন্ট্রাল প্লেসে রাখে এবং মাইক্রোসার্ভিসগুলো কনফিগারেশন পাওয়ার জন্য এই সার্ভিসে রিকোয়েস্ট করে। এতে অ্যাপ্লিকেশনগুলির কনফিগারেশন পরিবর্তন সহজে করা যায়, এবং সমস্ত সার্ভিসে পরিবর্তনগুলো সিঙ্ক্রোনাইজড থাকে।
স্প্রিং ক্লাউড কনফিগ সার্ভার (Spring Cloud Config Server) এবং কনফিগ ক্লায়েন্ট (Config Client) ইন্টিগ্রেশন:
স্প্রিং ক্লাউড কনফিগ সার্ভার এবং কনফিগ ক্লায়েন্ট এর ইন্টিগ্রেশন করার জন্য দুটি পৃথক অ্যাপ্লিকেশন তৈরি করতে হয়:
- Config Server - সেন্ট্রাল কনফিগারেশন সার্ভিস।
- Config Client - কনফিগারেশন সার্ভিস থেকে কনফিগারেশন নেওয়া মাইক্রোসার্ভিস।
ধাপ ১: Spring Cloud Config Server Setup
১.1 Config Server প্রজেক্ট তৈরি করুন
স্প্রিং ক্লাউড কনফিগ সার্ভার তৈরি করতে, নিচের ডিপেনডেন্সি গুলো pom.xml বা build.gradle-এ যুক্ত করুন:
pom.xml (Config Server):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
১.2 Config Server Application Class
@EnableConfigServer অ্যানোটেশন ব্যবহার করে স্প্রিং কনফিগ সার্ভার সক্রিয় করতে হবে।
package com.example.configserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
১.3 application.yml কনফিগারেশন (Config Server)
এখন Config Server-এর application.yml অথবা application.properties ফাইলে কনফিগারেশন রিসোর্সের লোকেশন উল্লেখ করতে হবে। উদাহরণস্বরূপ, একটি Git রেপোজিটরি ব্যবহার করতে পারেন যেখানে কনফিগারেশন ফাইল সংরক্ষিত থাকবে।
application.yml (Config Server):
server:
port: 8888
spring:
cloud:
config:
server:
git:
uri: https://github.com/your-repo/config-repository
searchPaths: '{application}'
এখানে uri হলো Git রিপোজিটরির URL যেখানে কনফিগারেশন ফাইল সংরক্ষিত থাকে।
১.4 Git Repository Structure (Config Repository)
কনফিগ ফাইল গুলো Git রিপোজিটরিতে এইভাবে রাখা হয়:
config-repository
├── application.yml
└── service-name.yml
application.yml: সাধারণ কনফিগারেশন।service-name.yml: নির্দিষ্ট মাইক্রোসার্ভিসের কনফিগারেশন।
ধাপ ২: Spring Cloud Config Client Setup
২.1 Config Client প্রজেক্ট তৈরি করুন
Config Client অ্যাপ্লিকেশন তৈরি করতে নিচের ডিপেনডেন্সি গুলো pom.xml বা build.gradle-এ যুক্ত করুন:
pom.xml (Config Client):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
২.2 Config Client Application Class
Config Client অ্যাপ্লিকেশনের মধ্যে @SpringBootApplication অ্যানোটেশন থাকবে, এবং কনফিগ সার্ভারের কনফিগারেশন ফাইল গ্রহণ করার জন্য @EnableConfigServer প্রয়োজন নেই।
package com.example.configclient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
২.3 application.yml কনফিগারেশন (Config Client)
Config Client অ্যাপ্লিকেশনের application.yml বা application.properties ফাইলে কনফিগ সার্ভারের লোকেশন এবং কনফিগের ফাইল নাম উল্লেখ করতে হবে।
application.yml (Config Client):
spring:
application:
name: service-name # service-name এর সাথে মিলিয়ে config server থেকে কনফিগ আনা হবে
cloud:
config:
uri: http://localhost:8888 # Config Server এর URL
২.4 @Value বা @ConfigurationProperties ব্যবহার করে কনফিগ মান আনা
Config Client অ্যাপ্লিকেশন থেকে কনফিগ মান গ্রহণ করতে, @Value অথবা @ConfigurationProperties ব্যবহার করা যায়।
কনফিগ মান গ্রহণের উদাহরণ:
package com.example.configclient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class ConfigClientRunner implements CommandLineRunner {
@Value("${custom.property}")
private String customProperty;
@Override
public void run(String... args) throws Exception {
System.out.println("Fetched Property from Config Server: " + customProperty);
}
}
এখানে custom.property Config Server থেকে আসে।
ধাপ ৩: Config Server এবং Client টেস্ট করা
৩.1 Config Server রান করুন
Config Server অ্যাপ্লিকেশন চালু করুন:
mvn spring-boot:run -Dspring-boot.run.profiles=default
৩.2 Config Client রান করুন
Config Client অ্যাপ্লিকেশন চালু করুন:
mvn spring-boot:run
আপনি দেখতে পাবেন যে Config Client সার্ভিসটি কনফিগ সার্ভার থেকে কনফিগ গ্রহণ করে এবং তা কনসোলে আউটপুট হিসেবে দেখাবে।
স্প্রিং ক্লাউড কনফিগ সার্ভার এবং ক্লায়েন্টের উপকারিতা:
- কেন্দ্রীভূত কনফিগারেশন: মাইক্রোসার্ভিসের কনফিগারেশন এক জায়গায় রাখা যায় এবং সমস্ত সার্ভিসে সেটি সিঙ্ক্রোনাইজড থাকে।
- ডাইনামিক কনফিগারেশন রিলোড: কনফিগারেশন পরিবর্তন হলে, সার্ভিসগুলো আবার কনফিগ সার্ভার থেকে আপডেট নিতে পারে।
- Git সাপোর্ট: Git রেপোজিটরি থেকে কনফিগ ফাইলগুলি সরাসরি ব্যবহৃত হতে পারে, যা ডেভেলপমেন্টের সময় কনফিগ ম্যানেজমেন্ট আরও সহজ করে।
এভাবে আপনি স্প্রিং ক্লাউড কনফিগ সার্ভার (Spring Cloud Config Server) এবং স্প্রিং ক্লাউড কনফিগ ক্লায়েন্ট (Config Client) এর মাধ্যমে সেন্ট্রাল কনফিগারেশন ম্যানেজমেন্ট ইন্টিগ্রেট করতে পারবেন।
Read more