[SpringBoot] spring cloud gateway - 1

@SpringBootApplication
@RestController
public class Scg1Application {
    @GetMapping("/user/test")
    public String user() {
        return "user";
    }

    public static void main(String[] args) {
        SpringApplication.run(Scg1Application.class, args);
    }

}​
spring:
  cloud:
    gateway:
      routes:
        - id: user-api
          uri: http://localhost:8081/
          predicates:
            - Path=/user/**

스프링부트에 scg(spring cloud gateway)를 이용해서 gateway구성을 해보자

 

springboot -> gateway만 선택

gateway를 구성하는 방법은 2가지가 있는데 

- java code로 작성

- application.properties(application.yaml) 파일에 작성

 

application.properties(application.yaml) 파일에 작성하는 방법을 알아보도록 하겠습니다.

spring:
  cloud:
    gateway:
      routes:
        - id: user-api
          uri: http://localhost:8081/
          predicates:
            - Path=/user/**

 

localhsot:8081이라는 서버가 있다고 하면, /user/** path로 들어왔을때 요청을 localhost:8081로 보낼수 있습니다.

 

@SpringBootApplication
@RestController
public class ScgApplication {
    @GetMapping
    public String index() {
        return "home";
    }

	public static void main(String[] args) {
		SpringApplication.run(ScgApplication.class, args);
	}
}

메인코드가 위와 같을때 

 

localhost:8080으로 접속시 -> home이라는 결과를 리턴하고 8081 서버에 구성이 아래와 같을때

@SpringBootApplication
@RestController
public class Scg1Application {
    @GetMapping("/user/test")
    public String user() {
        return "user";
    }

    public static void main(String[] args) {
        SpringApplication.run(Scg1Application.class, args);
    }

}

 

localhost:8080/user/test 로 접속시 

user라는 결과를 리턴하는것을 볼수 있습니다.

 

아래와 같이 java코드로 좀더 디테일하게 설정할수가 있습니다. 

@SpringBootApplication
public class DemogatewayApplication {
	@Bean
	public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
		return builder.routes()
			.route("path_route", r -> r.path("/get")
				.uri("http://httpbin.org"))
			.route("host_route", r -> r.host("*.myhost.org")
				.uri("http://httpbin.org"))
			.route("rewrite_route", r -> r.host("*.rewrite.org")
				.filters(f -> f.rewritePath("/foo/(?<segment>.*)", "/${segment}"))
				.uri("http://httpbin.org"))
			.route("hystrix_route", r -> r.host("*.hystrix.org")
				.filters(f -> f.hystrix(c -> c.setName("slowcmd")))
				.uri("http://httpbin.org"))
			.route("hystrix_fallback_route", r -> r.host("*.hystrixfallback.org")
				.filters(f -> f.hystrix(c -> c.setName("slowcmd").setFallbackUri("forward:/hystrixfallback")))
				.uri("http://httpbin.org"))
			.route("limit_route", r -> r
				.host("*.limited.org").and().path("/anything/**")
				.filters(f -> f.requestRateLimiter(c -> c.setRateLimiter(redisRateLimiter())))
				.uri("http://httpbin.org"))
			.build();
	}
}

자세한 내용은 아래 공식사이트에서 더 확인이 가능합니다.

 

https://spring.io/projects/spring-cloud-gateway

 

다음 포스팅에서는 로그를 통해 어떻게 데이터들이 전달되는지 확인해보겠습니다.