Spring Cloud Gateway

105 阅读3分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路。

参考视频链接

微服务网关

服务网关 = 路由转发 + 过滤器

  1. 路由转发:接收一切外界请求,转发到后端的微服务上去;
  2. 过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。

所有的微服务api接口入口都是从网关实现转发。 微服务网关解决问题: 3. 解决统一微服务登录认证问题 减少代码冗余性 4. 解决跨域的问题 5. 保护服务 限流 黑名单和白名单控制 6. 权限控制 7. 统一日志处理

过滤器与网关之间的区别

过滤器适合于单个服务请求过滤 网关适合于过滤整个微服务请求 过滤器属于局部过滤 网关属于全局过滤 总结:网关能解决微服务代码冗余的问题。

Zuul与Gateway有哪些区别

Zuul网关属于netfix公司开源的产品,属于第一代微服务网关 Gateway属于SpringCloud自研发的网关框架,属于第二代微服务网关相比来说SpringCloudGateway性能比Zuul性能要好。

注意:Zuul网关底层基于Servlet实现的,紫色是的Api,不支持长连接。 SpringCloudGateway基于Spring5构建,能够实现响应式非阻塞的Api,支持长连接,能够更好的整合Spring体系的产品,依赖SpringBoot-WebFlux。

组件名称所属公司组件简介
ZuulNetflix停更进维 基于servlet实现
Zuul2Netflix正在从新开发
gatewaySpringCloudSpringCloud自己研发的一套非阻塞的网络异步网关 基于WebFlux实现

Nginx与Gateway底层实现网关有哪些区别:

  1. Nginx底层基于C语言实现:
  2. Gateway底层基于java语言编写:

在微服务架构中:验证token会话信息 nginx 是验证token信息 ?Token=lesd nginx+lua语言实现 对于我们java语言开发者来说,需要去学lua语言,学习成本非常高: Gateway底层基于我们java语言编写的,对于我们java开发者来说能够更好快速上手解决我们在微服务网关遇到的难题。

导入Gateway依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
</dependencies>

gateway 底层基于 webflux实现 springboot-web 底层 springmvc servlet类 加了gateway依赖后,不用加web依赖

application配置

server:
  port: 81
####服务网关名称
spring:
  application:
    name: mayikt-gateway
  cloud:
    gateway:
      discovery:
        locator:
          ####开启以服务id去注册中心上获取转发地址
          enabled: true
        ###路由策略
      routes:
        ###路由id
        - id: mayikt
          ####转发http://www.mayikt.com/
          uri: http://www.mayikt.com/
          ###匹配规则
          predicates:
            - Path=/mayikt/**
            #### 可以忽略跳过一级
            filters:
              - StripPrefix=1

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

网关的集群

使用Ivs统一管理nginx的集群: 使用nginx统一管理网关的集群: 在这里插入图片描述

nginx: 配置文件nginx.conf 先配置集群地址列表 监听端口号:80 server_name:拦截 gw.mayikt.com 通过负载均衡轮询的方式跳到 mayiktgwadds里面的地址 在这里插入图片描述 再到etc下面找到hosts文件 编辑后面加上在这里插入图片描述 测试: 在这里插入图片描述 验证请求参数是否有带上token 在这里插入图片描述 token为空: 在这里插入图片描述 带着token的 在这里插入图片描述 把过滤器放到gateway实现,能够减少代码的冗余性。