SpringCloud组件七之GateWay-网关(G版本)

清疚 2022-02-16 04:45 325阅读 0赞

一.GateWay简介

Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。

  • Route(路由):这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。
  • Predicate(断言):这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。
  • Filter(过滤器):这是org.springframework.cloud.gateway.filter.GatewayFilter的实例,我们可以使用它修改请求和响应。

二.项目现状

  • 具有两个微服务,一个是注册中心(registry),另一个是服务提供者(provider)
  • 服务提供者 - provider
  • 项目配置细节

    server:
    port: 8081
    spring:
    application:

    1. name: server-provider

    eureka:
    client:

    1. service-url:
    2. defaultZone: http://127.0.0.1:10010/eureka
  • 微服务提供的两个接口

    @RestController
    public class TsetController {

    1. @GetMapping("hello")
    2. public String hello(){
    3. return "Hello,我是provider";
    4. }
    5. @GetMapping("hi")
    6. public String hi(){
    7. return "hi,我是provider";
    8. }

    }

  • 项目情况
    在这里插入图片描述

三.项目构建-gateway

Spring Cloud GateWay官方文档

  • POM文件



    org.springframework.cloud
    spring-cloud-starter-gateway


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client

  • 项目配置

    server:
    port: 8088

    spring:
    application:

    1. name: gateway-server

    cloud:

    1. gateway:
    2. discovery:
    3. locator:
    4. enabled: true

    是否与服务注册于发现组件进行结合,

    设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能。

    eureka:
    client:

    1. service-url:
    2. defaultZone: http://127.0.0.1:10010/eureka

四.运行项目

  • 服务注册完成
    在这里插入图片描述
  • 访问provider项目
    http://127.0.0.1:8081/hello,没问题

Hello,我是provider

  • 访问gateway项目
    http://127.0.0.1:8088/SERVER-PROVIDER/hi

hi,我是provider

  • 问题一:服务名需要大写才访问,是否可以通过小写服务名访问
    添加配置:spring.cloud.gateway.discovery.locator.lowerCaseServiceId:true即可

    spring:
    application:

    1. name: gateway-server

    cloud:

    1. gateway:
    2. discovery:
    3. locator:
    4. enabled: true #是否与服务注册于发现组件进行结合,设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能。
    5. lowerCaseServiceId: true #该配置开启后,服务名可以小写
  • 访问gateway项目-小写服务名
    http://127.0.0.1:8088/server-provider/hi

hi,我是provider

  • 问题二:是否可以自定义路由

    routes:

    1. - id: provider-routes #路由名称:不重复即可
    2. uri: lb://SERVER-PROVIDER #lb:从eureka中获取服务
    3. predicates: #谓语:url包含provider
    4. - Path=/provider/** filters: #过滤器:过滤器从第一个之后开始截取 - StripPrefix=1
  • 完成配置

    spring:
    application:

    1. name: gateway-server

    cloud:

    1. gateway:
    2. discovery:
    3. locator:
    4. enabled: true #是否与服务注册于发现组件进行结合,设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能。
    5. lowerCaseServiceId: true #该配置开启后,服务名可以小写
    6. routes:
    7. - id: provider-routes
    8. uri: lb://SERVER-PROVIDER #lb:从eureka中获取服务
    9. predicates:
    10. - Path=/provider/** filters: - StripPrefix=1
  • 访问provider项目的/hi接口

方式一:http://127.0.0.1:8088/server-provider/hi

方式二:http://127.0.0.1:8088/provider/hi

  • 以上为GateWay的路由简单配置,还可以配置内置predicates,filters,具体参考Spring Cloud GateWay官方文档。

GitHub项目地址:https://github.com/oldgarlic/spring-cloud

发表评论

表情:
评论列表 (有 0 条评论,325人围观)

还没有评论,来说两句吧...

相关阅读