반응형

현재 유저서버를 8080포트에서, 공지서버를 8081포트에서 사용하고 있다.

이렇게 분리되어 있는 서버를 gateway를 사용하여, 하나의 서버로 모으려고 한다.

gateway도 하나의 모듈을 생성하여 개발했다.

 

 

일단 필요한 의존성들이다.

    implementation("org.springframework.boot:spring-boot-starter-webflux")
    implementation("org.springframework.cloud:spring-cloud-starter-circuitbreaker-reactor-resilience4j:3.1.2")
    implementation("org.springframework.cloud:spring-cloud-starter-gateway:4.1.5")

 

gateway만 사용하기에 이렇게만 의존성을 추가해줬다.

 

이제 yml을 작성해보자

spring:
  cloud:
    gateway:
      routes:
        - id: user
          uri: http://localhost:8080
          predicates:
            - Path=/users/**
        - id: post
          uri: http://localhost:8081
          predicates:
            - Path=/posts/**

 

이 부분으로 설명을 해보도록 하겠다.

- id: user
  uri: http://localhost:8080
  predicates:
    - Path=/users/**

 

gateway서버는 12040포트를 사용하고 있는데, predicates로 들어오는 주소를 저장해준다.

Path를 /users/**로 지정해주었기에, http://localhost:12040/users/**로 들어오는 모든 주소는 http://localhost:8080/users/**로 변경되어 요청이 되게 된다.

 

이제 Circuit Breaker를 설정해보자.

 

Circuit Breaker는 만약 각각의 서버에 응답이 없는 경우, 설정하여 각각 지정된 응답이 나오도록 해준다.

Circuit Breaker에 대한 자세한 설명은 하지 않고, 어떻게 설정했는지만 보여주도록 하겠다.

resilience4j:
  timelimiter:
    configs:
      default:
        timeout-duration:
          seconds: 3

  circuitbreaker:
    configs:
      default:
        sliding-window-size: 4
        failure-rate-threshold: 50
        automatic-transition-from-open-to-half-open-enabled: true
        wait-duration-in-open-state:
          nanos: 5000

이렇게 Default로 circuitBreaker들을 설정을 하고

 

위로 돌아가서

spring:
  cloud:
    gateway:
      routes:
        - id: user
          uri: http://localhost:8080
          predicates:
            - Path=/users/**
          filters:
            - name: CircuitBreaker //CircuitBreaker 설정
              args:
                name: userCircuitBreaker //CircuitBreaker 설정
                fallbackUri: forward:/fallback/user //CircuitBreaker 설정
        - id: post
          uri: http://localhost:8081
          predicates:
            - Path=/posts/**
          filters:
            - name: CircuitBreaker
              args:
                name: postCircuitBreaker
                fallbackUri: forward:/fallback/post

 

filter를 이용해 CircuitBreaker를 설정해준다.

만약 실패한 경우 지정한 fallbackUri에 따라 지정된 응답이 출력된다.

 

Gateway만 실행하여 테스트 해보자.

이렇게 작성을 해서 요청을 해보았는데

 

인증서버에서 응답을 받지 못해 fallbackUri에 따라 실행 된 것을 볼 수 있다.

+ Recent posts