Spring Cloud Gateway একটি API গেটওয়ে প্রকল্প, যা Spring Framework-এ নির্মিত এবং মাইক্রোসার্ভিস আর্কিটেকচারে ব্যবহৃত হয়। এটি বিভিন্ন ধরনের রাউটিং, ফিল্টারিং, লোড ব্যালান্সিং, সিকিউরিটি, রেট লিমিটিং, এবং সার্ভিস কমিউনিকেশন সহজ করে। Spring Cloud Gateway ব্যবহার করে, আপনি API গেটওয়ে হিসেবে একটি একক এন্ট্রি পয়েন্ট তৈরি করতে পারেন, যা আপনার মাইক্রোসার্ভিসগুলিতে সমস্ত ইনকামিং ট্রাফিক রাউট করবে।
Spring Cloud Gateway কে সাধারণত Eureka, OAuth2, JWT, বা Rate Limiting এর সাথে একত্রে ব্যবহার করা হয়।
এখানে Spring Cloud Gateway সেটআপ এবং কনফিগার করার ধাপগুলো আলোচনা করা হয়েছে।
১. Spring Cloud Gateway ডিপেনডেন্সি যোগ করা
প্রথমে, Spring Cloud Gateway সেটআপ করার জন্য আপনাকে Maven বা Gradle এর মাধ্যমে ডিপেনডেন্সি যোগ করতে হবে।
Maven ডিপেনডেন্সি
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Gradle ডিপেনডেন্সি
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
implementation 'org.springframework.boot:spring-boot-starter-web'
২. Spring Cloud Gateway কনফিগারেশন
application.yml বা application.properties ফাইলে Spring Cloud Gateway কনফিগার করুন। এখানে গেটওয়ে রাউটিং এবং অন্যান্য ফিচার কনফিগার করা হবে।
application.yml কনফিগারেশন উদাহরণ
spring:
cloud:
gateway:
routes:
- id: serviceA
uri: lb://serviceA
predicates:
- Path=/serviceA/**
- id: serviceB
uri: lb://serviceB
predicates:
- Path=/serviceB/**
এখানে, আমরা দুটি সার্ভিস (serviceA এবং serviceB) রাউট করেছি:
lb://serviceAওlb://serviceBএর মাধ্যমে Eureka সার্ভিস ডিসকভারি ব্যবহার করা হচ্ছে, যেখানে গেটওয়ে সার্ভিসের নামের মাধ্যমে সার্ভিস রেজিস্ট্রি থেকে সার্ভিসটি খুঁজে পাবে এবং রাউট করবে।predicatesএর মাধ্যমে সার্ভিসের জন্য URL প্যাথ কনফিগার করা হচ্ছে, যেমন/serviceA/**বা/serviceB/**।
application.properties কনফিগারেশন উদাহরণ
spring.cloud.gateway.routes[0].id=serviceA
spring.cloud.gateway.routes[0].uri=lb://serviceA
spring.cloud.gateway.routes[0].predicates[0]=Path=/serviceA/**
spring.cloud.gateway.routes[1].id=serviceB
spring.cloud.gateway.routes[1].uri=lb://serviceB
spring.cloud.gateway.routes[1].predicates[0]=Path=/serviceB/**
৩. Spring Cloud Gateway ফিল্টারিং কনফিগারেশন
Spring Cloud Gateway ফিল্টার ব্যবহার করে API রিকোয়েস্ট এবং রেসপন্সগুলির উপর বিভিন্ন ধরনের অপারেশন করা যায়। যেমন, হেডার যোগ করা, কাস্টম রাউটিং, রেট লিমিটিং ইত্যাদি।
ফিল্টার উদাহরণ
spring:
cloud:
gateway:
routes:
- id: serviceA
uri: lb://serviceA
predicates:
- Path=/serviceA/**
filters:
- AddRequestHeader=X-Request-Foo, Bar
- AddResponseHeader=X-Response-Foo, Baz
এখানে, দুটি ফিল্টার ব্যবহার করা হয়েছে:
- AddRequestHeader: API রিকোয়েস্টে একটি কাস্টম হেডার যোগ করা হয়েছে (
X-Request-Foo: Bar)। - AddResponseHeader: API রেসপন্সে একটি কাস্টম হেডার যোগ করা হয়েছে (
X-Response-Foo: Baz)।
Rate Limiting Filter
আপনি Spring Cloud Gateway-এ রেট লিমিটিংও কনফিগার করতে পারেন।
spring:
cloud:
gateway:
routes:
- id: serviceA
uri: lb://serviceA
predicates:
- Path=/serviceA/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 10
redis-rate-limiter.burstCapacity: 20
এটি Redis ব্যবহার করে প্রতি সেকেন্ডে 10টি রিকোয়েস্ট এবং প্রতি সেকেন্ডে 20টি উচ্চতর রিকোয়েস্ট ব্যারাস্ট করার অনুমতি দেবে।
৪. Spring Cloud Gateway Security কনফিগারেশন
Spring Cloud Gateway-এ সিকিউরিটি কনফিগার করতে OAuth2, JWT, অথবা Basic Authentication ব্যবহার করা যেতে পারে।
OAuth2 Security উদাহরণ
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR-CLIENT-ID
client-secret: YOUR-CLIENT-SECRET
scope: profile, email
authorization-grant-type: authorization_code
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
client-name: Google
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
এটি OAuth2 ব্যবহার করে Google থেকে অথেন্টিকেশন এবং অথোরাইজেশন চালু করবে।
JWT Security উদাহরণ
spring:
cloud:
gateway:
routes:
- id: serviceA
uri: lb://serviceA
predicates:
- Path=/serviceA/**
filters:
- name: JwtTokenFilter
এটি JWT টোকেন যাচাই করার জন্য একটি কাস্টম ফিল্টার (যেমন JwtTokenFilter) ব্যবহার করবে।
৫. Spring Cloud Gateway ইন্টিগ্রেশন
Spring Cloud Gateway সাধারণত Eureka এবং Spring Cloud Discovery এর সাথে ইন্টিগ্রেট করা হয়। এটি সার্ভিস ডিসকভারি এবং ক্লায়েন্ট-সাইড লোড ব্যালান্সিং সাপোর্ট করে।
Eureka সার্ভিস ডিসকভারি ব্যবহার
Eureka সার্ভিস ডিসকভারি কনফিগার করুন যাতে Gateway সার্ভিসগুলোকে সার্ভিস রেজিস্ট্রির মাধ্যমে রাউট করতে পারে।
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/ # Eureka সার্ভার URL
এখানে discovery.locator.enabled: true সাপোর্ট করবে Eureka সার্ভিস ডিসকভারি। এটি সার্ভিস রেজিস্ট্রিতে থাকা সার্ভিসগুলিকে গেটওয়ে-তে রাউট করার জন্য সক্রিয় করবে।
৬. Spring Cloud Gateway এবং Eureka Integration উদাহরণ
spring:
cloud:
gateway:
routes:
- id: order-service
uri: lb://order-service
predicates:
- Path=/orders/**
- id: product-service
uri: lb://product-service
predicates:
- Path=/products/**
এখানে, আমরা Eureka ব্যবহার করে order-service এবং product-service রাউট করেছি। lb:// (লোড ব্যালান্সার) প্রটোকল Eureka সার্ভিস ডিসকভারি সিস্টেম থেকে সার্ভিস ইন্সট্যান্সগুলি সনাক্ত করবে।
৭. Spring Cloud Gateway শুরু করা
Spring Cloud Gateway চালু করার জন্য, আপনাকে Spring Boot অ্যাপ্লিকেশন হিসেবে এটি রান করতে হবে:
mvn spring-boot:run # Maven ব্যবহারকারী
অথবা
./gradlew bootRun # Gradle ব্যবহারকারী
উপসংহার
Spring Cloud Gateway একটি শক্তিশালী API গেটওয়ে সমাধান, যা রাউটিং, ফিল্টারিং, সিকিউরিটি, রেট লিমিটিং এবং সার্ভিস ডিসকভারি সমর্থন করে। এটি মাইক্রোসার্ভিস আর্কিটেকচারের জন্য অত্যন্ত কার্যকরী, যেখানে একাধিক সার্ভিসের মধ্যে ট্রাফিক সেন্ট্রালাইজডভাবে পরিচালিত হয়। Spring Cloud Gateway সেটআপ করা এবং কনফিগার করা বেশ সহজ এবং এতে Spring Cloud-এর অন্যান্য কম্পোনেন্ট যেমন Eureka, OAuth2, JWT ইত্যাদি ইন্টিগ্রেশন করা যায়।
Read more