Spring Cloud Gateway - Load Balancer

 

Eureka Flow

 

먼저 apigateway와 first-service , second-service의 pom.xml에 

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

가 추가되어 있어야 한다.

그리고 apigateway와 first-service , second-service의 application.yml에 eureka를 등록해 준다.

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka

그리고 apigateway에는 application.yml에 uri를 수정해준다.

server:
  port: 8000

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka


spring:
  application:
    name: apigateway-service
  cloud:
    gateway:
      default-filters:
        - name: GlobalFilter
          args:
            baseMessage: Spring Cloud Gateway Global Filter
            preLogger: true
            postLogger: true
      routes:
        - id: first-service
          uri: lb://MY-FIRST-SERVICE
          predicates:
            - Path=/first-service/**
          filters:
            - CustomFilter
        - id: second-service
          uri: lb://MY-SECOND-SERVICE
          predicates:
            - Path=/second-service/**
          filters:
            - name: CustomFilter
            - name: LoggingFilter
              args:
                baseMessage: Hi, there Logging
                preLogger: true
                postLogger: true

 

Second-Service

package com.example.secondservice;

import lombok.extern.slf4j.Slf4j;
import org.springframework.core.env.Environment;
import javax.servlet.http.HttpServletRequest;

@RestController
@RequestMapping("/second-service")
@Slf4j
public class SecondServiceController {

    Environment env;

    public SecondServiceController(Environment env) {
        this.env = env;
    }

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

    @GetMapping("/message")
    public String message(@RequestHeader("second-request") String header) {
        log.info(header);
        return "Hello World in Second Service";
    }

    @GetMapping("/check")
    public String check(HttpServletRequest request) {
        log.info("Server port={}", request.getServerPort());
        return String.format("Hi there. This is a message from Second Service %s", env.getProperty("local.server.port"));
        //return "Hi there. This is a message from Second Service";
    }
}

그리고 각 서버들을 실행하여 Eureka에 접속해보면 아래와 같은 결과를 볼 수 있다

 

접속을 하게되면 라운드로빈 방식으로 번갈아가며 접속하게 된다.

'📚 Spring > Spring Cloud' 카테고리의 다른 글

Spring Cloud Config의 이해  (0) 2022.01.29
SpringCloud의 이해  (0) 2022.01.28
Spring Cloud Gateway - Logging Filter  (0) 2021.09.29
Spring Cloud Gateway - Global Filter  (0) 2021.09.27
Spring Cloud Gateway - Custom Filter  (0) 2021.09.27

Designed by JB FACTORY