美文网首页
[SpringCloud] Gateway 简单使用

[SpringCloud] Gateway 简单使用

作者: LCN233 | 来源:发表于2019-10-06 21:14 被阅读0次

[SpringCloud] Gateway 简单使用

spring cloud 的网关功能在低版本是通过 Netflix 的 zuul 实现的,但是到了高版本的 SpringCloud,使用的是 Spring 团队自己开发的 gateway,所以这里就不整理 zuul 的使用了,直接上 gateway。

前提说明

因为 SpirngBoot,SpringCloud 的各个版本之间差异还是挺大的,所以在参照本博客进行学习时,有可能出现因为版本不一致,而出现不同的问题。如果可以和本项目使用的环境保持一致,即使不一致,也尽可能不要跨大版本。

  1. jdk8
  2. SpringBoot : 2.1.4.RELEASE
  3. SpringCloud : Greenwich.SR1
  4. Maven 多模块

准备

参考一下 这个 里面的环境准备,搭建出2个服务端,1个服务提供者,1个网关服务(也是一个eureka的客户端)

然后在服务提供者,提供一个 REST API

@RestController
public class ServiceController {

    @GetMapping("/server/{num}")
    public String service(@PathVariable("num")int num) {
        String resp = "服务提供端收到了消息:" + num;
        System.out.println("服务提供者进行了服务");
        return resp;
    }
}

网关服务 依赖

<dependencies>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>

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

引入 eureka 的客户端,让其可以被 eureka 进行观察,gateway是基于 netty + webflux 实现的,所以本身已经支持 web 功能,可以不用 web 相关的依赖

启动类注解

@EnableEurekaClient
@SpringBootApplication
public class GatewayService {

    public static void main(String[] args) {
        SpringApplication.run(GatewayService.class,args);
    }
}

我们这里把网关也交由 eureka 管理,所以注解上 客户端相关的注解

配置我们的路由规则

spring:
  cloud:
    gateway:
      # 配置路由规则,访问当前网关的 /server/* 会转发请求到 http://localhost:9091/server/*
      routes:
      # 路由Id,需要唯一
      - id: service-com.can.route
        uri: http://localhost:9091
        predicates:
        - Path=/server/*

这是如果你通过浏览器访问 http://你网关的Ip:端口/server/1 这个请求经过网关后会被转到 localhost:9091/server

路由的配置通过代码进行配置

@Configuration
public class RouteConfigruation {

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        /**
         * 配置了一个 id 为 second_route,访问 /second/* 会被重定向到 http://localhost:9091/second/*
         */
        return builder.routes()
                .route("second_route",r -> r.path("/second/*").uri("http://localhost:9091/second/*"))
                .build();
    }
}

路由网关支持的几种配置

关键字 作用 示例
After 请求在指定的时间后 - After=2018-01-20T06:06:06+08:00[Asia/Shanghai]
Before 请求在指定的时间前 - Before=2018-01-20T06:06:06+08:00[Asia/Shanghai]
Between 的请求在指定的时间内 - Between=2018-01-20T06:06:06+08:00[Asia/Shanghai],2019-01-20T06:06:06+08:00[Asia/Shanghai]
Cookie 请求必须带某个key的Cookie,value 是一个正则表达式 - Cookie=key,regularExpression
Header 请求头必须带某个key,value 是一个正则表达式 - Header=X-Request-Id,\d+
Host 请求来至于对应的主机,才做处理,通过正则配置 - Host=**.baidu.com
Mehtod 请求的方式限制 -Method=GET
Path 请求路径匹配,也是一个正则 - Path=/server/{num}
Query 请求包括指定的请求参数,同时支持指定参数(正则设置)的匹配 - Query=arg 或者 - Query=key,regularExpression
RemoteAddr 请求来自于某个Id - RemoteAddr=192.168.1.1/24

上面的规则不仅可以单独使用,也可以进行组合使用

代码

GitHub

相关文章

网友评论

      本文标题:[SpringCloud] Gateway 简单使用

      本文链接:https://www.haomeiwen.com/subject/cuhppctx.html