SpringCloud入门学习之Gateway(三)

22 篇文章 0 订阅
11 篇文章 0 订阅

SpringCloud Gateway

SpringCloud Gateway 是Spring提供的一种网关。

工作原理图:

在这里插入图片描述

客户端访问SpringCloud Gateway,如果请求与网关路由匹配,则由SpringCloud Gateway发送到网关的web程序处理。

谈一谈我的理解,所谓网关就是在我们微服务集群前设置一个唯一流量入口,所有的请求都必须先通过网关,既然是唯一流量入口,那么就可以承担过滤器的角色。比如我们定义一些规则,只有符合这些规则的请求才可以通过并转发,或者充当过滤器角色做一些权限校验流量控制等工作。总之网关是非常重要的一环。它是保护我们后宫(微服务集群)的第一道保障。

SpringCloud GateWay

Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。
我之前用过zuul,我觉得gateway是在zuul的一些基础上做了扩充和优化。相比zuul还是有很大的提升。

我们来实际操作一下,简单入门,因为gateway涉及到的配置非常之多,这里推荐官方文档,讲解的非常清楚。

1.pom.xml 我们引入依赖

        <!--网关依赖包-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

2.bootstrap.yml 配置

 gateway:
 	 discovery:
        locator:
          enabled: false  #gateway开启服务注册发现
          lower-case-service-id: true  #true 只能识别小写 false 只能识别大写
      routes:   #自定义路由  url: lb:+服务id 路由的服务地址
        - id: host_route   #路由Id
          uri: http://localhost:8013   #路由地址
          predicates:    #谓语  可以使用正则
            - Path=/toserver/**
          #springcloud gateway 提供了很多灵活的谓语匹配
          #域名过滤 - Host=**.pk.** # 请求域名携带pk的,则转发
          #请求参数过滤  - Query=username, zzz* # 请求参数含有username,且值满足zzz开头的,则转发(对值的匹配可以省略)
          #请求头过滤 - Header=request, \d+ # 如果请求头含有request,且为数字,则转发
          #cookie过滤 - Cookie=name, zzzgd # 如果携带cookie,参数名为name,值为zzzgd,则转发
          #路径过滤 - Path=/zzzgd/** # 请求地址携带zzzgd的,则转发
          # 路由到其他服务,url需要用[lb://]+[serviceId]  比如上面的例子
          #过滤前缀 - StripPrefix=1  去掉toserver
          #时间过滤 - After=2019-01-01T17:42:47.789-07:00[America/Denver] # 如果请求时间大于该时间,则转发
          # http动词过滤 - Method=GET  请求是get方式的才进行转发
          # ip地址过滤  - RemoteAddr=192.168.1.1/24   符合地址才进行转发
SpringCloud Gateway 涉及到三个词汇大家需要了解。
routes:路由网关的基本构建块。它由ID,目标URI,谓词集合和过滤器集合定义。如果聚合谓词为真,则匹配路由。
predicates:这是一个 Java 8函数谓词。输入类型是 Spring FrameworkServerWebExchange。这允许开发人员匹配来自HTTP请求的任何内容,例如标头或参数。
filters:这些是使用特定工厂构建的 Spring FrameworkGatewayFilter实例。这里,可以在发送下游请求之前或之后修改请求和响应。(我上述代码已经列出了很多种类)
routes: 定义了我们的路由id,和转发url
predicates: 定义了我们转发的条件规则,如果符合规则那么进行转发。SpringCloud Gateway 提供了多种规则供我们使用,具体的可以看官方文档。
filters: 定义了我们的过滤规则,对请求或相应做出修改。(关于Filter过滤器,请大家参照官方文档,根据自己需求配置,这里不再赘述)

启动项目,我们来访问一下。

在这里插入图片描述

我们上述配置路由为访问端口号为8013的服务。
我们访问localhost:8003/hello

在这里插入图片描述

网关按我们配置的路由规则 帮我们转发到 端口号为8013的server3上去了。
这里还要说明一下 之前使用zuul的时候,zuul可以和Eureka注册中心通信,可以自动拉取一份注册中心各个微服务的注册配置,然后根据微服务的Application.name自动做一个映射 serverId : /serverId/** ,gateway也有这个功能,discovery.locator.enabled 该配置是否启动根据Eureka注册中心的信息自动映射路由,如果我们设置为true 那么我们不需要在配置中配置路由,就可以访问localhost:8003/SERVER3/hello 就直接能访问到server3了。
lower-case-service-id 这个配置是开启小写功能的(默认大写),因为在Eureka中 服务注册都是以大写来注册的,如果你想用小写来访问就开启这个。

更多的细节需要大家去查阅官方文档,目前网上对这个的资料还不是太多好像。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值