0
点赞
收藏
分享

微信扫一扫

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

闲嫌咸贤 2022-04-27 阅读 53
java后端

一.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:
    name: server-provider
    eureka:
    client:
    service-url:
    defaultZone: http://127.0.0.1:10010/eureka

  • 微服务提供的两个接口

    @RestController
    public class TsetController {

    @GetMapping("hello")
    public String hello(){
        return "Hello,我是provider";
    }
    
    @GetMapping("hi")
    public String hi(){
        return "hi,我是provider";
    }
    

    }

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

三.项目构建-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:
    name: gateway-server
    cloud:
    gateway:
    discovery:
    locator:
    enabled: true
    #是否与服务注册于发现组件进行结合,
    #设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能。
    eureka:
    client:
    service-url:
    defaultZone: http://127.0.0.1:10010/eureka

四.运行项目

  • 服务注册完成
    在这里插入图片描述
  • 访问provider项目
    http://127.0.0.1:8081/hello,没问题
  • 访问gateway项目
    http://127.0.0.1:8088/SERVER-PROVIDER/hi
  • 问题一:服务名需要大写才访问,是否可以通过小写服务名访问
    添加配置:spring.cloud.gateway.discovery.locator.lowerCaseServiceId:true即可

    spring:
    application:
    name: gateway-server
    cloud:
    gateway:
    discovery:
    locator:
    enabled: true #是否与服务注册于发现组件进行结合,设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能。
    lowerCaseServiceId: true #该配置开启后,服务名可以小写

  • 访问gateway项目-小写服务名
    http://127.0.0.1:8088/server-provider/hi

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

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

    spring:
    application:
    name: gateway-server
    cloud:
    gateway:
    discovery:
    locator:
    enabled: true #是否与服务注册于发现组件进行结合,设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能。
    lowerCaseServiceId: true #该配置开启后,服务名可以小写
    routes:
    - id: provider-routes
    uri: lb://SERVER-PROVIDER #lb:从eureka中获取服务
    predicates:
    - Path=/provider/**
    filters:
    - StripPrefix=1

  • 访问provider项目的/hi接口

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

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

举报

相关推荐

0 条评论