What is?
- Spring Cloud Gateway는 API Gateway를 제공
- API들의 단일지점을 제공
- API들에 공통된 작업을 수행할 수 있음(Filter)
- 로깅, 모니터링 가능
USE
dependencies
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
}
설정하기
spring.application.name=api-gateway
server.port=8765
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
- 이제 다음과 같이 localhost:8765/SERVICE-NAME을 통해서 접근이 가능하다.
- spring.cloud.gateway.discovery.locator.lower-case-service-id 다음 설정을 통해 소문자의 경우도 접근이 가능하다.
좀 더 설정하기
- ApiGatewayConfiguration.java
@Configuration
public class ApiGatewayConfiguration {
@Bean
public RouteLocator gatewayRouter(RouteLocatorBuilder builder) {
return builder.routes()
.route(p -> p
.path("/get")
.filters(f -> f
.addRequestHeader("MyHeader", "MyURI")
.addRequestParameter("Param", "MyValue"))
.uri("http://httpbin.org:80"))
.route(p -> p.path("/currency-exchange/**")
.uri("lb://currency-exchange"))
.route(p -> p.path("/currency-conversion/**")
.uri("lb://currency-conversion"))
.route(p -> p.path("/currency-conversion-feign/**")
.uri("lb://currency-conversion"))
.route(p -> p.path("/currency-conversion-new/**")
.filters(f -> f.rewritePath(
"/currency-conversion-new/(?<segment>.*)",
"/currency-conversion-feign/${segment}"))
.uri("lb://currency-conversion"))
.build();
}
}
- 다음과 같은 route를 통해 사용자의 요청을 라우팅 할 수있다.
- filter를 적용하여 작업을 수행할 수 있다.
- rewritePathsms 사용자의 요청을 변환한다.