微服务网关gateway的简单使用

先看概念:

在这里插入图片描述

本人翻译:构建一套分布式系统不一定是复杂和容易出问题的。Spring Cloud为分布式系统提供了一套简单且具有高可用性的编程模版。帮助开发者能够快速构建具有扩展性的,可靠的,协调的分布式应用。Spring Cloud 是基于SpringBoot的基础上构建的,这使得开发者们能够更容易更快速地进行生产工作。

大概就是这个意思,本人英语水平有限。从图中来看,Gateway是横穿在客户端和服务端中间的,它虽然叫网关,但是它其实也是一个SpringBoot项目,一个关卡口,所有请求都必须过了它这关才能往下走。
作用:

(1)可做网关级别的安全校验和权限校验。
(2)强制规范请求方式和请求参数。
(3)定时限流和定时熔断,配合HystrixCommand做熔断后的服务降级。Hystrix服务熔断和Hystrix DashBoard仪表盘

三大核心概念:

(1)路由Route
(2)断言
(3)过滤器

简单来说,就是一个不断过滤的过程,请求进来之后,我们会指定部分请求路径映射到对应的Server Name (ServerName下会有服务集群,但是这层调用我们可以用Ribbon+Feign做),然后断言规则会进行一些Header的参数校验,Cookies的参数校验,接口可用的时间判断,最后通过过滤器的过滤链再做一层判断。全部校验都通过之后,才会允许发起调用。

怎么用?(默认已经有服务注册中心和消费端生产端的基础)

(1)pom.XML引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>jojo.springcloud</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-gateway</artifactId>

    <dependencies>
        <!--GateWay网关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>2.2.1.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--熔断器-->
        <dependency>
            <groupId>com.netflix.hystrix</groupId>
            <artifactId>hystrix-javanica</artifactId>
            <version>RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>cloud-commons-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.netflix.hystrix</groupId>
            <artifactId>hystrix-metrics-event-stream</artifactId>
        </dependency>
    </dependencies>

</project>

(2)修改properties或者yml配置文件(注意缩进):

server:
  port: 9500

spring:
  application:
    name: cloud-gateway-service
  # 配置网关信息
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true #开启从注册中心动态创建路由功能,利用微服务名进行路由
      routes:
        - id: circulate_route
          uri: lb://CLOUD-CIRCULATE-SERVICE
          # 断言
          predicates:
            - Path=/demo/testBreaker # 这个表示指定路由路径,如果是/demo/*就表示只需要判断匹配 /demo
            # 配置路由的生效时间
            # - After=2020-09-23T14:40:32.874+08:00[Asia/Shanghai]
            # - Before=XXXXXXXX (在XXXX时间段之前生效的路由)
            # - Between=XXXXXXXXXX,XXXXXXXXX (在XXXXX和XXXXXXX时间段内生效的路由)
            # 更高级别的权限与接口安全配置
            # - Cookie=username,jojo  # 这里表示请求testBreaker接口必须携带cookie,username = jojo的信息
            # - Header=X-Request-Id, \d+ # 这里表示Header请求头必须携带X-Request-Id属性,并且值必须是整数的正则表达式。
            # - Query=id, \d+ # 这里表示必须携带参数,并且参数叫做id,并且参数必须是正整数

        - id: circulate_route1
          uri: lb://CLOUD-CIRCULATE-SERVICE
          predicates:
            - Path=/demo/test

eureka:
  client:
    # 是否注册进eureka
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      # 集群版注册中心
      defaultZone: http://eureka7000.com:7000/eureka,http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

(3)主启动类:

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

注意由于yml文件不配数据源,这个网关服务也不需要查数据库,所以一定要排除DataSource的自动扫描配置类,不然启动不起来。

测试一下:

在这里插入图片描述

现在时间是:

在这里插入图片描述
在这里插入图片描述

因为指定的是40分,所以该路由还未开放,显示404也很正常,我们等一分钟后:

在这里插入图片描述
在这里插入图片描述

成功~!从此微服务的网关就配好了,剩下的就是根据每个服务集群配好Server Name,然后把网关这个服务套上个域名即可。

更多玩法配置看官网:https://spring.io/projects/spring-cloud-gateway
学习视频支持B站的尚硅谷我阳哥!!!
尚硅谷2020最新版SpringCloud(H版&alibaba)框架开发教程全套完整版从入门到精通(大牛讲授spring cloud)

猜你喜欢

转载自blog.csdn.net/whiteBearClimb/article/details/108773318