Gateway网关组件_2022.09.21

学习基于记录,而不止于记录。

希望自己能坚持下去~

0.写在前面

首先贴上官网地址
撰写本文时Gateway版本:3.1.3

1.场景分析

  微服务集群服务隐藏在网关之后,出入口统一,结合注册中心实现通信,加入负载均衡,并且和客户端与微服务之间实现解耦。
  gateway支持定制化匹配规则实现网关路由,同时拥有过滤器链,可以管理和调度微服务网关,对请求进行过滤、流控和精准指向。如下图所示:


架构演示图

2.过滤器

过滤器

3.核心代码

3.1 自定义路由

第一个路由:根据请求url匹配,将/get请求,路由向http://httpbin.org
第二个路由:根据host,并且开头有通配符*匹配
第三个路由:依旧是根据host匹配,额外加入了路径重写
后续就不具体解释,基本顾名思义。

@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();
    }
}

3.2 过滤器

只需要重写GlobalFilter,组件化过滤器,实现Ordered可以做到过滤器排序。

/**
 * token过滤器
 */
@Component
@Slf4j
public class AuthFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
         // 此处可以加入各种校验,比如token校验等
        return chain.filter(exchange);
    }

    /**
     * 设置过滤器的执行顺序
     *
     * @return
     */
    @Override
    public int getOrder() {
        return HIGHEST_PRECEDENCE;
    }
}

4.总结

  之前微服务架构路由管理是交给traefik实现的,后来换成Gateway。traefik

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。