Spring Cloud Gateway初体验

Posted meetzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud Gateway初体验相关的知识,希望对你有一定的参考价值。

前段时间项目上打算使用gateway替换掉zuul1.0于是我简单的体验了一下。

gateway是什么:Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。这里需要注意一下gateway使用的netty+webflux实现,不要加入web依赖,需要加入webflux依赖。

gateway与zuul的区别的简单比较:gateway使用的是异步请求,zuul是同步请求,gateway的数据封装在ServerWebExchange里,zuul封装在RequestContext里。

过滤器:gateway有两种filter,一种是GlobalFilter一种是GatewayFilter,全局过滤器默认对所有路由有效,gatewayFilter需要进行指定。

spring:
  cloud:
    gateway:
    # 配置所有路由的默认过滤器 这里配置的是gatewayFilter
      default-filters:
      routes:
      - id: server-test  # 服务的id
        uri: lb://server-test #服务的application名称
        order: 0 #路由级别
        predicates:
        - Path=/bus/**  #前缀
        filters:
        - StripPrefix=1 #去前缀 去几层  

关于重写数据:由于gateway是异步的最好不要对响应的body进行操作,如果需要操作的话需要重写writeWith方法,简单事例如下:

ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(response) {
            @Override
            public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
                if (body instanceof Flux) {
                    Flux<? extends DataBuffer> fluxBody = (Flux<? extends DataBuffer>) body;
                            return super.writeWith(fluxBody.map(dataBuffer -> {
                            //在这边需要对dataBuffer拿到字节数组进行操作
                            return response.bufferFactory().wrap(nodeObject.getBytes());
                        }));
                }
                return super.writeWith(body);
            }
        };
        return chain.filter(exchange.mutate().response(decoratedResponse).build();
}

 只是简单的分享,后续有时间会尽量分享更多的细节...


以上是关于Spring Cloud Gateway初体验的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Alibaba - 24 Gateway-路由断言(Predicate)过滤器(Filter)初体验

spring cloud 初体验

Spring Cloud(01)——初体验

Spring Cloud Alibaba 初体验 Nacos 服务注册与发现

SpringCloud初体验:Sidecar 将 PHP 这类非 Java 生态语言的服务接入 Spring Cloud

Spring Cloud Gateway 远程代码执行漏洞(CVE-2022-22947)