아래와 같이 yml 파일에 있는 설정들을 true로 바꾸고 defaultZone을 유레카 서버로 입력해준다.
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
register-with-eureka: true
fetch-registry: true
라우츠 아래의 uri도 아래와 같은 형식으로 바꾼다.
routes:
- id: first-service
uri: lb://MY-FIRST-SERVICE
기존에는 http 프로토콜을 이용해서 localhost:8081을 호출하는 방식이었는데, 이제는 유레카 서버에 가서 클라이언트 요청 정보를 전달해주는 방식이 된다.
서버를 기동하면
이렇게 gateway, service 두 개가 유레카 서버에 올라온 것을 확인할 수 있다.
first service와 second service를 두 개씩 돌렸다. 밑줄 친 녀석들이 새로 돌아가고 있는 녀석들이다.
포스트맨으로 first service로 요청을 줘보면 잘 들어온다. 그런데 어느 서비스로(포트로) 요청이 들어오는지 어떻게 알 수 있을까?
server:
port: 0
eureka:
instance:
instance-id: ${spring.application.name}:${spring.application.instance-id:${random.value}}
포트 번호를 0(랜덤포트)으로 바꾸고 유레카에 insstance id를 부여해준다. 재기동 시켜보면, instance id에 포트 번호는 기록이 안되었지만 서비스 이름에 마우스를 올리면 포트번호가 잘뜬다.
나의 경우에는 57729포트를 사용하고 있다.
음... 이걸 로그로 남기려고 컨트롤러의 check 매서드를 수정했다.
@GetMapping("/check")
public String check(HttpServletRequest request) {
// ServletReq 에서 가져오는 방법
log.info("Server port = {}", request.getServerPort());
// 환경변수에 등록되어진 정보 중에서 랜덤하게 할당되어진 로컬 서버 포트를 통해서 가져옴
return String.format("Hi, there. This is a message from First Server on Port %s"
, env.getProperty("local.server.port"));
}
수정한후 포스트맨에서 연달아 접속해보았다.
로드밸런싱이 된 포트 번호를 잘 확인할 수 있다.