且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

SpringCloud06_Gateway的概述、工程案例代码、微服务动态路由、Predicate的使用、详解Filter(一)

更新时间:2021-09-10 07:49:22

①. gateway的概述


①. SpringCloud Gateway是SpringCloud的一个全新项目,基于spring5.0 + spring boot2.0+Project Reactor等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式


②. SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty


③. SpringCloud Gateway的目标提供统一的路由方式且基于Filter键的方式提供了网关基本的功能,例如:安全 | 监控 | 指标和限流(动态路由、认证授权、令牌限流)


SpringCloud06_Gateway的概述、工程案例代码、微服务动态路由、Predicate的使用、详解Filter(一)


SpringCloud06_Gateway的概述、工程案例代码、微服务动态路由、Predicate的使用、详解Filter(一)


②. 路由、断言、过滤器


①. 路由(route) 路由信息的组成:由一个ID、一个目的URL、一组断言工厂、一组Filter组成。如果路由断言为真,说明请求URL和配置路由匹配


②. 断言(Predicate) 参考的是java8的java.util.function.Predicate开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由


③. 过滤器(Filter) 一个标准的Spring WebFilter。 Spring Cloud Gateway中的Filter分为两种类型的Filter,分别是Gateway Filter和Global Filter。过滤器Filter将会对请求和响应进行修改处理


SpringCloud06_Gateway的概述、工程案例代码、微服务动态路由、Predicate的使用、详解Filter(一)


③. 新建module9527 yml的配置方式


  • ①. cloud-gateway-gateway9527


  • ②. pom
    注意:要移除web和boot防止报错


   <dependencies>
        <!--新增gateway-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>com.atguigu.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--
        移除这两个
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>-->
        <!--   <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>-->

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>


③. 主启动类


package com.atguigu.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class GateWayMain9527 {
    public static void main(String[] args) {
        SpringApplication.run(GateWayMain9527.class, args);
    }
}


④. yml配置(重点)


server:
  port: 9527
spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
      routes:
        - id: payment_routh #路由的ID,没有固定规则但要求唯一,建议配合服务名
          uri: http://localhost:8001   #匹配后提供服务的路由地址
          predicates:
            - Path=/payment/get/**   #断言,路径相匹配的进行路由

        - id: payment_routh2
          uri: http://localhost:8001
          predicates:
            - Path=/payment/lb/**   #断言,路径相匹配的进行路由
eureka:
  instance:
    hostname: cloud-gateway-service
  client:
    service-url:
      register-with-eureka: true
      fetch-registry: true
      defaultZone: http://eureka7001.com:7001/eureka


⑤. 测试:

启动7001

启动8001(cloud-provider-payment8001)

启动9527网关

访问说明(添加网关前 添加网关后)


SpringCloud06_Gateway的概述、工程案例代码、微服务动态路由、Predicate的使用、详解Filter(一)


SpringCloud06_Gateway的概述、工程案例代码、微服务动态路由、Predicate的使用、详解Filter(一)