본문 바로가기

MSA (MicroServiceArchitecture)/Eureka & Spring Cloud Gateway

MSA (LoadBalancer 실행)

# MSA 아키텍처 구성을 위한 LoadBalancer 실행하기

- firstproject에서 application.yaml 파일을 아래와 같이 입력하여 랜덤 포트를 받을수 있도록 설정한다.

server:
  port: 0

spring:
  application :
    name: first-service

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka
    instance :
      instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}

1. vm 옵션을 활성화 하여 새로운 프로젝트 실행

- 실행 코드는 아래와 같다.

-Dserver.port=9092

2. gradle 명령어를 활용하여 실행

- 터미널에서 아래 명령어를 활용하여 실행

./gradlew bootRun

./gradlew bootRun --args='--server.port=9092'

3. FirstService에 /check 항목에 포트번호 표시

- FirstService Controller에 /check 항목을 호출시 서버 포트번호가 표시되도록 설정

기존 코드를 아래와 같이 수정한다. env 항목과 log에 포트 번호를 표시할 수 있도록 코드를 추가한다.

package MSA.MSAFirstService;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
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;

import javax.servlet.http.HttpServletRequest;

@Slf4j
@RestController
@RequestMapping("/first-service")
public class FirstServiceController {

    Environment env;

    @Autowired
    public FirstServiceController(Environment env) {
        this.env = env;
    }

    @GetMapping("/welcome")
    public String welcome() {
        return "Welcome to the First Service.";
    }

    @GetMapping("/message")
    //메세지라는 메소드가 실행됨에 있어서 "first-request" 헤더값을 받아오고, 그 값이 header안에 저장이 된다.
    public String message(@RequestHeader("first-request") String header) {
        log.info(header);
        return "Hello World in First Service.";
    }

    @GetMapping("/check")
    public String check(HttpServletRequest request) {
        log.info("Server port={}", request.getServerPort());

        return String.format("Hi, there. This is a message from First Service on Port %s"
                , env.getProperty("local.server.port"));
    }
}

그리고 인텔리J에서 터미널 항목을 통해 9091과 9095로 서비스가 실행되도록 로드밸런싱을 구성한다.

결과는 아래와 같다.

- 라운드 로빈 방식으로 한번씩 접속을 하는 것을 볼 수 있다.