이전에는 Netflix Zuul을 사용하여 API Gateway를 구현했는데, 이번에는 Spring Cloud Gateway를 사용해보자.
(푸가로 스프링 클라우드 게이트웨이는 zuul과는 다르게 비동기를 제공한다.)
먼저 Spring Cloud Gateway를 사용하는 게이트웨이 프로젝트를 만들어야 한다.
아래와 같은 의존성들을 추가하여 apigateway-service라는 이름의 스프링 부트 프로젝트를 만들었다.
그리고 아래와 같이 yml을 작성해준다.
server:
port: 8000
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: apigateway-service
cloud:
gateway:
routes:
- id: first-service
uri: http://localhost:8081/
predicates: #조건
- Path=/first-service/**
- id: second-service
uri: http://localhost:8082/
predicates:
- Path=/second-service/**
아직은 유레카에 등록하지 않았고, cloud.gateway.routes에 마이크로서비스들을 등록할 수 있다.
id는 등록될 서비스의 이름
uri는 목적지 uri.
predicate는 uri조건이다.
즉 경로가 Predicate에 Path=/first-service/** 이하로 들어오면 http://localhost:8081 로 라우팅해주는 것이다.
ex) 클라이언트가 http://localhost:8080/first-service/welcome 으로 요청을 보내면
http://localhost:8081/first-service/welcome 으로 라우팅 해준다.
이제 이를 실행시켜보자.
주목할 점은 이전의 스프링 부트 프로젝트들은 tomcat서버로 구동되었다면 이번에는 비동기 서버인 netty서버로 구동되었다는 것이다.
그전에 현재 yml의 정보를 보면 클라이언트는 "http://localhost:8000/first-service/**" 또는 "http://localhost:8000/second-service/**"로 요청을 한다. 하여 first-service와 second-service의 request mapping에 이와 같은 uri를 추가해주어야 한다.
package com.example.firstservice;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/first-service") // "/first-service" 추가
public class FirstServiceController {
@GetMapping("/welcome")
public String welcome() {
return "Welcome to the First service.";
}
}
package com.example.secondservice;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/second-service")// "/second-service" 추가
@Slf4j
public class SecondServiceController {
@GetMapping("/welcome")
public String welcome() {
return "Welcome to the Second service.";
}
}
이제 한번 테스트해보자.
출처 : 인프런 Lee Dowon님의 강의와 PDF 자료
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4
'spring cloud' 카테고리의 다른 글
API Gateway Service - Spring Cloud Gateway + Eureka (0) | 2022.03.01 |
---|---|
API Gateway Service - Spring Cloud Gateway - Filter추가하기 (1) | 2022.03.01 |
API Gateway Service - Netflix Zuul (0) | 2022.02.28 |
Service Discovery - User service 등록하기 (0) | 2022.02.28 |
Service Discovery - Spring Cloud Netflix Eureka (0) | 2022.02.27 |