springcloudAlibaba的学习(九):网关组件gateway

简介

gateway的简单介绍和使用。

gateway

网关,系统的统一入口,为微服务架构提供一种简单且有效api路由的管理方式

gateway的功能:

  • 动态路由,能够匹配任何请求属性,如请求头,主体,url
  • 对路由指定断言和过滤器
  • 支持路径重写
  • 权限校验
  • 限流

基本概念

路由:根据请求的url和配置的服务进行匹配,然后路由到对应的服务上
断言:断言函数,请求(请求头,cookie,参数)匹配的话就进行路由
过滤器:可以对请求和响应进行处理

简单使用

pom.xml添加依赖
  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
application.yml的配置
server:
  port: 8088
spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      routes:
        - id: order_route  
          uri: http://localhost:8020  
          predicates:
            - Path=/order-server/**
		  filters:
            - StripPrefix=1  

routes:路由规则
id:是路由的唯一标识
uri:会路由转发到的位置
predicates:断言规则,不是所有的请求都会路由转发到uri中的位置,只有匹配断言规则的才会被转发
path:请求中带有这个order-service前缀的才会路由
filter:过滤器
stripPrexfix:内置的一种过滤器,转发之前会去掉第一层的路径

例子:
有一个请求:http://localhost:8088/order-server/order/add
由于order_route的配置,gateway会先去除order-server这部分路径,然后将剩下的/order/add部分转发给http://localhost:8020,即后端处理订单的服务。

整合nacos

在上面的例子中,uri是写死的,后期不好维护,服务的管理应该交给nacos的。

修改pom.xml

添加nacos依赖

       <!-- nacos服务注册与发现 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
修改yml文件
server:
  port: 8088
spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      routes:
        - id: order_route  
          uri: lb://order-server
          predicates:
            - Path=/order-server/**
		  filters:
            - StripPrefix=1 
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        username: nacos
        password: nacos
   

uri: lb://order-server
lb标识使用nacos的本地负载均衡策略
order-server是服务名

断言

作用:请求gateway的时使用断言对请求进行匹配,匹配成功就路由转发。
分为:内置断言和自定义断言

常用的内置断言:
  • 基于datetime类型的断言工厂
  • 基于远程地址的断言工厂
  • 基于cookie的断言工厂
  • 基于header的断言工厂
  • 基于host的断言工厂
  • 基于method请求方法的断言工厂
  • 基于query请求参数的断言工厂

其实就是对各种不同的条件加判断
例如基于datetime类型的断言工厂,就是对请求的时间去进行判断,是否早于/晚于/位于 哪个时间段
其他也类似,如地址,cookie,header,host,method中是否包含某个字段,某个key的值是否是指定字段等。

过滤器

作用:可以通过过滤器对请求和响应进行一些业务逻辑的处理。
分为:局部过滤器和全局过滤器。

局部过滤器是针对其中的一个路由,全局过滤器会对所有的路由起作用。

常见的内置局部过滤器工厂:
  • AddRequestHeader:为原始请求添加header
  • AddRequestParameter:为原始请求添加请求参数
  • AddResponseHeader:为原始响应添加header
  • DedupeResponseHeader:剔除响应头中重复的值
  • PrefixPath:为原始请求路径提交前缀
  • FallbackHeaders:为fallbackuri的请求头中添加具体的异常信息
  • RedirectTo:重定向
全局过滤器工厂
  • LoadBalancerClientFilter :负载均衡客户端相关过滤器
  • forwardPathFilter:路径转发相关过滤器

例如之前的配置中的uri: lb://order-server,
Spring Cloud Gateway会识别lb://前缀并自动调用Spring CloudLoadBalancer来处理负载均衡逻辑,而Spring CloudLoadBalancer内部会使用LoadBalancerClientFilter或相应的负载均衡逻辑。

gateway跨域的处理

跨域:跨源资源共享,cors,是一种浏览器的安全策略,在浏览器中,出于安全考虑,存在一种被称为“同源策略”的限制,来自不同源的资源不能相互访问

同源策略:协议、域名和端口号三者共同组成,只要其中任意一项不同,就认为是不同的源。

修改application.yml文件
server:
  port: 8088
spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      routes:
        - id: order_route  
          uri: lb://order-server
          predicates:
            - Path=/order-server/**
		  filters:
            - StripPrefix=1 
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        username: nacos
        password: nacos

      globalcors:
        cors-configurations:
          '[/**]':   
            allowedOrigins: "*"   
            allowedMethods:
              - GET
              - POST

allowedOrigins: “*” :允许跨域访问的资源
allowedMethods: 允许跨域访问的方法的请求方式

gateway整合sentinel流控降级

修改pom.xml文件

添加sentinel的相关依赖

        <!--sentinel整合gateway>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
        </dependency>

        <!--sentinel的依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
修改application.yml文件

添加配置

    sentinel:
      transport:
        dashboard: 127.0.0.1:8858
sentinel控制台进行流控

在这里插入图片描述
新增之后,就会对这个order_route资源进行流控了。

设置流控规则

在这里插入图片描述
参数属性有点类似于断言,只有符合规则的才会进行流控
比如指定client IP,在匹配串中输入条件,只有请求ip是等于输入条件的进行流控。

通过api分组的方式流控

先设定好api分组的规则
在这里插入图片描述

然后在流控规则中设置
在这里插入图片描述
这样,就会对api分组中设置的url进行流控了。

gateway高可用

运行多个gateway的实例,使用nginx来负载均衡去反向代理。

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值