Spring Cloud Gateway হল একটি API গেটওয়ে সলিউশন যা মাইক্রোসার্ভিস আর্কিটেকচারে গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি Spring WebFlux ভিত্তিক, যা হাই পারফরম্যান্স এবং রিঅ্যাকটিভ সার্ভিস রাউটিং প্রদান করে। Spring Cloud Gateway ক্লায়েন্টের রিকোয়েস্টকে বিভিন্ন মাইক্রোসার্ভিসে রাউট করে, একাধিক ফিচার যেমন লোড ব্যালান্সিং, রিকোয়েস্ট ফিল্টারিং, সিকিউরিটি, লগিং, এবং রেট লিমিটিং সরবরাহ করে।
API গেটওয়ে হিসাবে Spring Cloud Gateway সার্ভিসের মধ্যে কমপ্লেক্স রাউটিং, রিকোয়েস্ট/রেসপন্স ম্যানিপুলেশন এবং ইন্টিগ্রেশন সহজ করে তোলে। এটি Spring Boot এবং Spring Cloud ইকোসিস্টেমের মধ্যে একটি অত্যন্ত গুরুত্বপূর্ণ উপাদান।
প্রথমে আপনার pom.xml
ফাইলে Spring Cloud Gateway এর জন্য প্রয়োজনীয় ডিপেন্ডেন্সি যোগ করুন।
<dependencies>
<!-- Spring Boot Starter WebFlux for Reactive Programming -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<!-- Spring Cloud Gateway Dependency -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- Eureka Discovery Client for Service Discovery -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
Note: Spring Cloud Gateway ডিপেন্ডেন্সি Spring WebFlux এর উপর ভিত্তি করে কাজ করে, যা রিঅ্যাকটিভ প্রোগ্রামিংয়ের জন্য ব্যবহৃত হয়।
Spring Cloud Gateway কনফিগারেশনের জন্য application.yml
অথবা application.properties
ফাইলে প্রয়োজনীয় সেটিংস যোগ করুন।
Example application.yml
:
spring:
cloud:
gateway:
routes:
- id: service_route
uri: lb://my-service # Load Balancing with Eureka
predicates:
- Path=/my-service/** # Path matching
filters:
- AddRequestHeader=X-Request-Foo, Bar # Add header to the request
- RewritePath=/my-service/(?<segment>.*), /${segment} # Path rewriting
# Discovery client for service discovery
discovery:
locator:
enabled: true # Enable dynamic service discovery
server:
port: 8080 # Port for Gateway service
lb://
ব্যবহারের মাধ্যমে Eureka বা Consul সার্ভিস ডিসকভারি প্ল্যাটফর্মের মাধ্যমে লোড ব্যালান্সিং করা হয়।আপনি যদি নির্দিষ্ট রাউটিং কনফিগারেশন করতে চান, তবে Spring Cloud Gateway এ RouteLocator ব্যবহার করা যায়।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.RouteLocatorBuilder;
@Configuration
public class GatewayConfig {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("service_route", r -> r.path("/service/**")
.uri("http://localhost:8081"))
.route("service_load_balanced", r -> r.path("/loadbalanced/**")
.uri("lb://my-service"))
.build();
}
}
এখানে:
"http://localhost:8081"
: সরাসরি URL এ রিকোয়েস্ট রাউট করা হয়।"lb://my-service"
: Eureka সার্ভিস ডিসকভারি ব্যবহার করে লোড ব্যালান্সিং করা হয়।Spring Cloud Gateway সাধারণত Eureka সার্ভিস ডিসকভারি প্ল্যাটফর্মের সঙ্গে কাজ করে। এটি @EnableEurekaClient
এবং সার্ভিসের নামের মাধ্যমে সার্ভিস অবস্থান খুঁজে বের করে।
Eureka Client Configuration:
@EnableEurekaClient
@SpringBootApplication
public class MyServiceApplication {
public static void main(String[] args) {
SpringApplication.run(MyServiceApplication.class, args);
}
}
application.yml (Eureka Client Configuration):
spring:
application:
name: my-service
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/ # Eureka Server URL
Spring Cloud Gateway বিভিন্ন ধরনের filters ব্যবহার করতে দেয়, যেমন:
Example Filter:
spring:
cloud:
gateway:
routes:
- id: my-route
uri: http://localhost:8081
filters:
- AddRequestHeader=Authorization, Bearer mytoken123
- RequestRateLimiter=2,5 # Limit to 2 requests per second, with a burst capacity of 5
my-service
) চালু করুন এবং Spring Cloud Gateway এর মাধ্যমে রাউটিং পরীক্ষা করুন।Authentication & Authorization (OAuth2/JWT): Spring Cloud Gateway OAuth2 এবং JWT authentication সমর্থন করে, যা API রিকোয়েস্টের জন্য নিরাপত্তা প্রদান করে।
Example OAuth2 Security Configuration:
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR_CLIENT_ID
client-secret: YOUR_CLIENT_SECRET
scope: profile, email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
Rate Limiting: Spring Cloud Gateway রেট লিমিটিং ফিচার সমর্থন করে, যা নির্দিষ্ট পরিমাণ রিকোয়েস্টের পরে সার্ভিস রিকোয়েস্ট ব্লক বা থ্রটল করতে পারে।
Example Rate Limiting:
spring:
cloud:
gateway:
routes:
- id: rate_limit_route
uri: lb://my-service
predicates:
- Path=/my-service/**
filters:
- RequestRateLimiter=1,1
Spring Cloud Gateway হল একটি অত্যন্ত শক্তিশালী API গেটওয়ে, যা সার্ভিস রাউটিং, ফিল্টারিং, সিকিউরিটি, এবং অন্যান্য ফিচার প্রদান করে। এটি মাইক্রোসার্ভিস আর্কিটেকচারে highly flexible এবং performant API গেটওয়ে সমাধান প্রদান করে। Spring Cloud Gateway ব্যবহার করে আপনি সহজে মাইক্রোসার্ভিসগুলোর মধ্যে রিকোয়েস্ট গেটওয়ে, ফিল্টারিং, এবং সার্ভিস কমিউনিকেশন পরিচালনা করতে পারবেন।
API Gateway হল একটি সার্ভিস যা মাইক্রোসার্ভিস আর্কিটেকচারে একাধিক ব্যাকএন্ড সার্ভিসের জন্য একক পয়েন্ট হিসেবে কাজ করে। এটি ক্লায়েন্ট (যেমন ওয়েব ব্রাউজার বা মোবাইল অ্যাপ্লিকেশন) এবং ব্যাকএন্ড মাইক্রোসার্ভিসগুলির মধ্যে একটি ব্রোকার হিসেবে কাজ করে, যা বিভিন্ন সার্ভিসের রিকোয়েস্ট এবং রেসপন্সগুলো কেন্দ্রীভূতভাবে পরিচালনা করে। API Gateway মাইক্রোসার্ভিসের যোগাযোগ সহজ করে এবং সার্ভিসগুলির মধ্যে লোড ব্যালান্সিং, সিকিউরিটি, রাউটিং, ফিল্টারিং এবং মনিটরিং কার্যক্রম সম্পাদন করে।
API Gateway মাইক্রোসার্ভিস আর্কিটেকচারে একাধিক কারণে গুরুত্বপূর্ণ। এর প্রধান কিছু প্রয়োজনীয়তা নিচে আলোচনা করা হলো:
Spring Cloud Gateway হল Spring Framework এর একটি প্রকল্প যা API Gateway হিসেবে ব্যবহৃত হয়। এটি ক্লাউড-নেটিভ অ্যাপ্লিকেশনগুলির জন্য একটি শক্তিশালী এবং কনফিগারেবল API Gateway প্রদান করে।
Maven:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
Gradle:
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
spring:
cloud:
gateway:
routes:
- id: example-route
uri: http://localhost:8080
predicates:
- Path=/api/**
filters:
- AddRequestHeader=X-Request-Foo, Bar
Path
, Host
, Method
ইত্যাদি।@SpringBootApplication
public class SpringCloudGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudGatewayApplication.class, args);
}
}
API Gateway মাইক্রোসার্ভিস আর্কিটেকচারে একটি অত্যন্ত গুরুত্বপূর্ণ উপাদান, যা সার্ভিসগুলির মধ্যে যোগাযোগ সহজ করে, লোড ব্যালান্সিং, সিকিউরিটি, রাউটিং, এবং মনিটরিং কার্যক্রম সেন্ট্রালাইজডভাবে পরিচালনা করতে সাহায্য করে। Spring Cloud Gateway Spring ফ্রেমওয়ার্কের একটি শক্তিশালী API গেটওয়ে সমাধান, যা মাইক্রোসার্ভিস অ্যাপ্লিকেশনগুলোতে খুব কার্যকরীভাবে কাজ করে।
যদি আরো বিস্তারিত জানার প্রয়োজন হয় বা অন্য কোনো প্রশ্ন থাকে, জানাতে পারেন! 😊
Spring Cloud Gateway একটি API গেটওয়ে প্রকল্প, যা Spring Framework-এ নির্মিত এবং মাইক্রোসার্ভিস আর্কিটেকচারে ব্যবহৃত হয়। এটি বিভিন্ন ধরনের রাউটিং, ফিল্টারিং, লোড ব্যালান্সিং, সিকিউরিটি, রেট লিমিটিং, এবং সার্ভিস কমিউনিকেশন সহজ করে। Spring Cloud Gateway ব্যবহার করে, আপনি API গেটওয়ে হিসেবে একটি একক এন্ট্রি পয়েন্ট তৈরি করতে পারেন, যা আপনার মাইক্রোসার্ভিসগুলিতে সমস্ত ইনকামিং ট্রাফিক রাউট করবে।
Spring Cloud Gateway কে সাধারণত Eureka, OAuth2, JWT, বা Rate Limiting এর সাথে একত্রে ব্যবহার করা হয়।
এখানে Spring Cloud Gateway সেটআপ এবং কনফিগার করার ধাপগুলো আলোচনা করা হয়েছে।
প্রথমে, Spring Cloud Gateway সেটআপ করার জন্য আপনাকে Maven বা Gradle এর মাধ্যমে ডিপেনডেন্সি যোগ করতে হবে।
<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>
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
implementation 'org.springframework.boot:spring-boot-starter-web'
application.yml
বা application.properties
ফাইলে Spring Cloud Gateway কনফিগার করুন। এখানে গেটওয়ে রাউটিং এবং অন্যান্য ফিচার কনফিগার করা হবে।
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/**
।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 ফিল্টার ব্যবহার করে API রিকোয়েস্ট এবং রেসপন্সগুলির উপর বিভিন্ন ধরনের অপারেশন করা যায়। যেমন, হেডার যোগ করা, কাস্টম রাউটিং, রেট লিমিটিং ইত্যাদি।
spring:
cloud:
gateway:
routes:
- id: serviceA
uri: lb://serviceA
predicates:
- Path=/serviceA/**
filters:
- AddRequestHeader=X-Request-Foo, Bar
- AddResponseHeader=X-Response-Foo, Baz
এখানে, দুটি ফিল্টার ব্যবহার করা হয়েছে:
X-Request-Foo: Bar
)।X-Response-Foo: Baz
)।আপনি 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-এ সিকিউরিটি কনফিগার করতে OAuth2, JWT, অথবা Basic Authentication ব্যবহার করা যেতে পারে।
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 থেকে অথেন্টিকেশন এবং অথোরাইজেশন চালু করবে।
spring:
cloud:
gateway:
routes:
- id: serviceA
uri: lb://serviceA
predicates:
- Path=/serviceA/**
filters:
- name: JwtTokenFilter
এটি JWT টোকেন যাচাই করার জন্য একটি কাস্টম ফিল্টার (যেমন JwtTokenFilter
) ব্যবহার করবে।
Spring Cloud Gateway সাধারণত Eureka এবং Spring Cloud Discovery এর সাথে ইন্টিগ্রেট করা হয়। এটি সার্ভিস ডিসকভারি এবং ক্লায়েন্ট-সাইড লোড ব্যালান্সিং সাপোর্ট করে।
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:
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 Boot অ্যাপ্লিকেশন হিসেবে এটি রান করতে হবে:
mvn spring-boot:run # Maven ব্যবহারকারী
অথবা
./gradlew bootRun # Gradle ব্যবহারকারী
Spring Cloud Gateway একটি শক্তিশালী API গেটওয়ে সমাধান, যা রাউটিং, ফিল্টারিং, সিকিউরিটি, রেট লিমিটিং এবং সার্ভিস ডিসকভারি সমর্থন করে। এটি মাইক্রোসার্ভিস আর্কিটেকচারের জন্য অত্যন্ত কার্যকরী, যেখানে একাধিক সার্ভিসের মধ্যে ট্রাফিক সেন্ট্রালাইজডভাবে পরিচালিত হয়। Spring Cloud Gateway সেটআপ করা এবং কনফিগার করা বেশ সহজ এবং এতে Spring Cloud-এর অন্যান্য কম্পোনেন্ট যেমন Eureka, OAuth2, JWT ইত্যাদি ইন্টিগ্রেশন করা যায়।
Spring Cloud Gateway একটি আধুনিক API গেটওয়ে যা Routing, Filters, এবং Predicates এর মাধ্যমে HTTP রিকোয়েস্টগুলিকে রাউট এবং পরিচালনা করতে সহায়তা করে। এর মাধ্যমে সার্ভিসগুলো সহজে রাউট করা যায়, ফিল্টারিং করা যায় এবং নির্দিষ্ট শর্তে কাজ করতে পারে। নিচে Routing, Filters, এবং Predicates এর ব্যবহার তুলে ধরা হয়েছে।
Routing এর মাধ্যমে API গেটওয়ে রিকোয়েস্টগুলোকে নির্দিষ্ট সার্ভিসের কাছে পাঠায়। Spring Cloud Gateway রাউটিং কনফিগারেশন application.yml
ফাইলে করা হয়।
spring:
cloud:
gateway:
routes:
- id: route1
uri: http://example-service:8081 # Destination service URI
predicates:
- Path=/service1/** # Path Predicate
filters:
- AddRequestHeader=X-Request-Foo, Bar
- id: route2
uri: http://another-service:8082
predicates:
- Path=/service2/** # Path Predicate
filters:
- AddRequestHeader=X-Request-Foo, Baz
এখানে দুটি রাউট তৈরি করা হয়েছে:
route1
: /service1/**
পাথে আসা রিকোয়েস্টগুলো example-service
এ রাউট করা হবে।route2
: /service2/**
পাথে আসা রিকোয়েস্টগুলো another-service
এ রাউট করা হবে।Predicates হল শর্ত যা রিকোয়েস্টের সাথে ম্যাচ করে এবং কোন রাউট নির্বাচন করা হবে তা নির্ধারণ করে। Spring Cloud Gateway-এ বিভিন্ন ধরনের Predicate রয়েছে, যা আপনি Path
, Method
, Host
, Query
, Header
ইত্যাদি দ্বারা কনফিগার করতে পারেন।
Path Predicate: রিকোয়েস্ট URL পাথের উপর ভিত্তি করে রাউটিং সিদ্ধান্ত নেয়।
predicates:
- Path=/service1/**
Method Predicate: রিকোয়েস্ট মেথডের উপর ভিত্তি করে রাউট নির্বাচন করা হয় (যেমন: GET
, POST
, ইত্যাদি)।
predicates:
- Method=POST
Host Predicate: রিকোয়েস্ট হোস্টনেমের উপর ভিত্তি করে রাউট নির্বাচন করা হয়।
predicates:
- Host=example.com
Query Predicate: URL এর কুয়েরি প্যারামিটার দিয়ে রাউট নির্বাচন করা হয়।
predicates:
- Query=param=value
Header Predicate: রিকোয়েস্ট হেডারে নির্দিষ্ট ভ্যালু দিয়ে রাউট নির্বাচন করা হয়।
predicates:
- Header=X-Request-Foo=Bar
একাধিক Predicates ব্যবহার করে একসাথে শর্ত দেওয়া যায়। প্রতিটি Predicate যেকোনো সময়ে OR
বা AND
শর্তে যুক্ত হতে পারে। একাধিক Predicate যোগ করতে:
predicates:
- Path=/service1/**
- Method=GET
- Header=X-Request-Foo=Bar
এটি রিকোয়েস্টের Path /service1/**
হতে হবে, মেথড GET
হওয়া উচিত এবং X-Request-Foo
হেডারে Bar
থাকতে হবে।
Filters Spring Cloud Gateway-এ HTTP রিকোয়েস্ট এবং রেসপন্সে পরিবর্তন আনার জন্য ব্যবহৃত হয়। Filters ক্লায়েন্ট থেকে সার্ভারে যাওয়া রিকোয়েস্ট অথবা সার্ভার থেকে ক্লায়েন্টে যাওয়া রেসপন্সের ওপর কাজ করতে পারে।
AddRequestHeader: রিকোয়েস্ট হেডারে নতুন হেডার যোগ করে।
filters:
- AddRequestHeader=X-Request-Foo, Bar
AddResponseHeader: রেসপন্স হেডারে নতুন হেডার যোগ করে।
filters:
- AddResponseHeader=X-Response-Foo, Baz
SetPath: রিকোয়েস্টের পাথ পরিবর্তন করে।
filters:
- SetPath=/newpath/**
RewritePath: পাথ রাইটারে প্রি-ডিফাইন্ড পাথ দিয়ে রিকোয়েস্ট রাউট করে।
filters:
- RewritePath=/service/(?<segment>.*), /new-service/${segment}
RequestRateLimiter: রিকোয়েস্ট রেট লিমিটিং পরিচালনা করে।
filters:
- RequestRateLimiter=redis-rate-limiter.replenishRate=10, redis-rate-limiter.burstCapacity=20
Spring Cloud Gateway-এ আপনি কাস্টম ফিল্টার তৈরি করতে পারেন। উদাহরণস্বরূপ, একটি কাস্টম ফিল্টার যা রিকোয়েস্টে লগিং যোগ করবে:
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
@Component
public class LoggingFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
// Log the incoming request path
System.out.println("Request Path: " + exchange.getRequest().getURI().getPath());
return chain.filter(exchange);
}
}
এটি গেটওয়ে রিকোয়েস্টে প্রক্রিয়া শুরু হওয়ার আগে রিকোয়েস্টের পাথ লগ করবে। কাস্টম ফিল্টার স্প্রিং বুট অ্যাপ্লিকেশনের মধ্যে @Component
অ্যানোটেশন দিয়ে রেজিস্টার করা যেতে পারে।
Spring Cloud Gateway-এর ব্যবহার কনফিগারেশন উদাহরণ:
spring:
cloud:
gateway:
routes:
- id: route1
uri: http://service1:8080
predicates:
- Path=/api/service1/**
- Method=GET
- Header=X-Request-Foo=Bar
filters:
- AddRequestHeader=X-Request-Id, 12345
- AddResponseHeader=X-Response-Time, 67890
এটি /api/service1/**
পাথ, GET
মেথড এবং X-Request-Foo=Bar
হেডার সহ রিকোয়েস্টগুলোর জন্য service1
সার্ভিসে রাউট করবে, এবং রিকোয়েস্ট এবং রেসপন্সে অতিরিক্ত হেডার যোগ করবে।
Path
, Method
, Header
, Host
, Query
ইত্যাদি।Spring Cloud Gateway এর মাধ্যমে আপনি শক্তিশালী API গেটওয়ে কনফিগারেশন করতে পারেন, যা কাস্টম রাউটিং, ফিল্টারিং এবং শর্তাবলী প্রদান করে, এর মাধ্যমে মাইক্রোসার্ভিসে রিকোয়েস্ট পরিচালনা করা হয়।
Spring Cloud API Gateway হল একটি শক্তিশালী এবং নমনীয় সমাধান যা বিভিন্ন মাইক্রোসার্ভিসের জন্য একটি একক প্রবেশদ্বার হিসেবে কাজ করে। এটি রিকোয়েস্ট রাউটিং, অথেনটিকেশন, রেট লিমিটিং, লোড ব্যালান্সিং, এবং আরও অনেক কাজ সহজে পরিচালনা করতে পারে। API Gateway-এর মাধ্যমে, ক্লায়েন্ট শুধুমাত্র একটি পয়েন্ট ব্যবহার করে একাধিক সার্ভিসে রিকোয়েস্ট পাঠাতে পারে।
এখানে আমরা Spring Cloud Gateway ব্যবহার করে API Gateway বাস্তবায়ন করার একটি উদাহরণ দেখবো।
এখানে আমরা দুটি সার্ভিস তৈরি করবো:
/hello
পাথের মাধ্যমে একটি বার্তা রিটার্ন করবে।spring-cloud-starter-gateway
)API Gateway এ প্রয়োজনীয় ডিপেনডেন্সি:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-cloud-starter-eureka-client
)Service A এর জন্য মাইক্রোসার্ভিস রেজিস্ট্রেশন এবং ডিসকভারির জন্য ডিপেনডেন্সি:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-web</artifactId>
</dependency>
Service A একটি সাধারণ Spring Boot অ্যাপ্লিকেশন হবে যা /hello
পাথে একটি বার্তা রিটার্ন করবে।
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ServiceAController {
@GetMapping("/hello")
public String sayHello() {
return "Hello from Service A!";
}
}
application.yml
:spring:
application:
name: service-a
server:
port: 8081
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
Eureka Server হল একটি Service Discovery সার্ভিস যা সমস্ত মাইক্রোসার্ভিসকে রেজিস্টার করতে সহায়ক। API Gateway এবং Service A উভয় সার্ভিসই Eureka Server এর মাধ্যমে রেজিস্টার হবে।
application.yml
:server:
port: 8761
eureka:
client:
registerWithEureka: false
fetchRegistry: false
এখন আমরা একটি API Gateway তৈরি করবো যা Service A থেকে রিকোয়েস্ট রাউট করবে। এখানে আমরা Spring Cloud Gateway ব্যবহার করব, যা মাইক্রোসার্ভিসের জন্য একটি একক রাউটিং পয়েন্ট হিসেবে কাজ করবে।
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.util.UriComponentsBuilder;
@Configuration
public class GatewayConfig {
@Bean
public FilterRegistrationBean<GatewayFilter> myFilter() {
FilterRegistrationBean<GatewayFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new GatewayFilter());
registrationBean.addUrlPatterns("/service-a/**");
return registrationBean;
}
}
application.yml
:spring:
application:
name: api-gateway
server:
port: 8080
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
cloud:
gateway:
routes:
- id: service-a-route
uri: lb://service-a # Load-balanced URI for Service A
predicates:
- Path=/service-a/** # Match requests to /service-a/**
এখানে lb://service-a
দিয়ে Ribbon লোড ব্যালান্সিং ব্যবহার করা হচ্ছে। এতে API Gateway ক্লায়েন্ট-সাইড লোড ব্যালান্সিং সহ Service A-এ রিকোয়েস্ট রাউট করবে।
আমরা Service A এবং API Gateway উভয় সার্ভিসকে Eureka Server এর সাথে রেজিস্টার করতে পারবো যাতে তারা একে অপরকে ডিসকভার করতে পারে।
application.yml
(Eureka Client Configuration):spring:
application:
name: api-gateway
server:
port: 8080
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
application.yml
(Eureka Client Configuration):spring:
application:
name: service-a
server:
port: 8081
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
প্রথমে Eureka Server চালু করুন:
mvn spring-boot:run -Dspring-boot.run.profiles=eureka
তারপর Service A চালু করুন:
mvn spring-boot:run -Dspring-boot.run.profiles=service-a
এরপর API Gateway চালু করুন:
mvn spring-boot:run -Dspring-boot.run.profiles=api-gateway
এখন আপনি API Gateway-এর মাধ্যমে Service A থেকে রিকোয়েস্ট ফেচ করতে পারবেন।
Service A-এর /hello
পাথটি রাউট করতে API Gateway-এর /service-a/hello
পাথ ব্যবহার করুন।
/service-a/hello
পাথ টেস্ট করা:GET http://localhost:8080/service-a/hello
এটি Service A থেকে "Hello from Service A!"
বার্তা রিটার্ন করবে।
যেহেতু Eureka সার্ভিস ডিসকভারি ব্যবহার করা হচ্ছে এবং API Gateway লোড ব্যালান্সিং সহ Ribbon ব্যবহার করে রিকোয়েস্ট রাউট করছে, Service A এর একাধিক ইনস্ট্যান্স যোগ করা হলে, API Gateway সেগুলির মধ্যে রিকোয়েস্টগুলি ব্যালান্স করবে।
এভাবে, Spring Cloud Gateway ব্যবহার করে আপনি একটি API Gateway বাস্তবায়ন করতে পারেন যা আপনার সমস্ত মাইক্রোসার্ভিসের জন্য একটি একক প্রবেশপথ হিসেবে কাজ করবে। এটি Service Discovery, Routing, Load Balancing, এবং আরও অনেক গুরুত্বপূর্ণ ফিচার সরবরাহ করে। Spring Cloud Gateway ব্যবহার করে API গুলির রাউটিং এবং বিভিন্ন মাইক্রোসার্ভিসের মধ্যে যোগাযোগ আরও সহজ এবং কার্যকর হয়ে ওঠে।
Read more