springcloud-gateway

Spring Cloud Gateway 具有如下特性:

基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0
进行构建动态路由:能够匹配任何请求属性: 可以对路由指定 Predicate (断言)和 Filter
(过滤器)集成Hystrix的断路器功能; 集成 Spring Cloud 服务发现功能; 易于编写的 Predicate (断言) 和
Filter (过滤器) ; 请求限流功能;支持路径重写。

Spring Cloud Gateway 与 Zuul的区别

1.Zuul 1.x,是一个基于阻塞 I/ O的 API Gateway
2、Zuul 1.x 基于Servlet 2.5使用阻架构它不支持任长连接(如 WebSocket) Zuul 的设计模式和Nginx较像,每次 0 操作都是以工作线程中洗择一个执行,请求线程被阳寒到工作线程完成,但是差别是Nginx 用C++ 实现,Zuu 用Java 实现,而JVM
本身会有第-次加载较慢的情况,使得Zuul 的性能相对较差。
3.Zuul 2x理念更先进,想基于Netty非阻塞和支持长连接,SpringCloud目前还没有整合。Zuul 2x的性能较 Zuul 1x 有较大提在性能方面,根据官方提供的基准测试,Spring Cloud Gateway 的 RPS (每秒请求数)是Zuul的 1.6倍
4.Spring Cloud Gateway 建立在 Spring Framework 5、Project Reactor 和 Spring Boot 2 之上,使用非阻塞 APl.
5.Spring Cloud Gateway 还支持 WebSocket, 并且与Spring紧密集成拥有更好的开发体验

gateway的主要功能
路由 断言 过滤
在这里插入图片描述

1.路由
路由是构建网关的基本模块,它由ID,目标UR1,一系列的断言和过滤器组成,如果断言为true则匹配该路由

2.断言
参考的是Java8的iavalutil.function.Predicate 开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由

3.过滤
指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。

基础配置

引入依赖 主要不可以有 springboot web的依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

yml配置

需要注意的是uri的协议为lb,表示启用Gateway的负载均衡功能
lb://serviceName gateway在微服务中自动为我们创建的负载均衡uri

server:
  port: 9097
spring:
  application:
    name: cloud_gateway
  cloud:
    nacos:
      discovery:
        server-addr: 39.105.151.241:8848
      config:
        server-addr: 39.105.151.241:8848
        file-extension: yml
    gateway:
      routes: #路由
        - id: b-server #服务id
          uri: http://localhost:9093 #服务地址
          predicates:
            - Path=/b_server/** #匹配路径 如果为ture 则路由到uri
        - id: a-server
          uri: http://localhost:8090
          predicates: #断言
            - Path=/provider/**  #匹配路径断言
            - After=2020-02-21T16:51:37.485+08:00[Asia/shanghail] #表示这个时间之后可以访问
            - bofer=2020-02-21T16:51:37.485+08:00[Asia/shanghail]#表示这个时间之钱可以访问
            - between=
            - cookie= usename value  #Cookie Route Predicate需要两个参数,一个是 Cookie name,一个是正则表达式
            - Hear= name value  一个是属性名称和一个正则表达式
            - Host=
            - Query=  GET 

            


过滤器案例

@Component
public class GatewayConfig implements GlobalFilter, Ordered {


    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    //获取用户名
        String username = exchange.getRequest().getQueryParams().getFirst("username");
        /*如果用户名为空不合法*/
        if (username == null) {
            /*拦截*/
            exchange.getResponse().setRawStatusCode(HttpStatus.SC_NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }
        /*放行*/
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return 0;
    }
}

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是杨杨呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值