微服务⽹关Spring Cloud Gateway

单块应⽤时代

单块+API时代

微服务?

微服务+⽹关

⽹关职责

关于Zuul1

基于blocking servlet API

不⽀持SSE或者WebSocket

路由灵活度⼀般

Netflix专有功能

Spring Cloud Gateway

基于Spring, Reactor, Boot 2

⽀持基于配置或Java代码⽅式的灵活路由

路由⽀持path/host/header/parameters等

⽀持过滤器

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

架构

简单过滤器

@Slf4j
public class SimpleFilter implements GatewayFilter {

@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
 log.info("BEFORE");
 return chain.filter(exchange)
 .then(Mono.fromRunnable(() -> {
 log.info("AFTER");
 }));
 }
}

YAML配置

spring:
 cloud:
  gateway:
   - id: foo_route
     uri: lb://foo
     predicates:
     - Host=**.foo.org
     - Path=/headers
     - Method=GET
     - Header=X-Request-Id, \d+
     - Query=foo, ba.
     - Query=baz
     - Cookie=chocolate, ch.p
     - After=1900-01-20T17:42:47.789-07:00[America/Denver]
     filters:
     - AddRequestHeader=X-Request-Foo, Bar
     - AddResponseHeader=X-Response-Foo, Bar
     - Hystrix=foo
     - SecureHeaders
     - RewritePath=/foo/(?<segment>.*), /$\{segment}

Java配置

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder,
 ThrottleGatewayFilterFactory throttle) {
 return builder.routes()
 .route(r -> r.host("**.abc.org").and().path("/image/png")
 .filters(f -> f.addResponseHeader("X-TestHeader", "foobar"))
 .uri("http://httpbin.org:80")
 )
 .route(r -> r.path("/image/webp")
 .filters(f -> f.addResponseHeader("X-AnotherHeader", "baz"))
 .uri("http://httpbin.org:80")
 )
 .route(r -> r.order(-1)
 .host("**.throttle.org").and().path("/get")
 .filters(f -> f.filter(throttle.apply(1, 1, 10,
 TimeUnit.SECONDS)))
 .uri("http://httpbin.org:80")
 )
 .build();
}

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值