Spring Cloud Gateway路由配置怎么做?快速入门教程与实战示例
作者:ADRU
微服务网关SpringCloudGateway
1.概述
Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供简单、有效和统一的API路由管理方式,Spring Cloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且还基于Filer链的方式提供了网关基本的功能,
例如:安全、监控/埋点、限流等。
2.核心概念
网关提供API全托管服务,丰富的API管理功能,辅助企业管理大规模的API,以降低管理成本和安全风险,包括协议适配、协议转发、安全策略、防刷、流量、监控日志等贡呢。
一般来说网关对外暴露的URL或者接口信息,我们统称为路由信息。
如果研发过网关中间件或者使用过Zuul的人,会知道网关的核心是Filter以及Filter Chain(Filter责任链)。Sprig Cloud Gateway也具有路由和Filter的概念。
下面介绍一下Spring Cloud Gateway中几个重要的概念。
路由。路由是网关最基础的部分,路由信息有一个ID、一个目的URL、一组断言和一组Filter组成。如果断言路由为真,则说明请求的URL和配置匹配
断言。Java8中的断言函数。Spring Cloud Gateway中的断言函数输入类型是Spring5.0框架中的ServerWebExchange。Spring Cloud Gateway中的断言函数允许开发者去定义匹配来自于http request中的任何信息,比如请求头和参数等。
过滤器。一个标准的Spring webFilter。Spring cloud gateway中的filter分为两种类型的Filter,分别是Gateway Filter和Global Filter。过滤器Filter将会对请求和响应进行修改处理

如上图中所示,http请求会先被ngnix进行过滤将有用的请求交给网关也就是今天说的Gateway,然后由Gateway交给对应的api
快速入门
以Spring Boot框架开发为例,启动一个Gateway服务模块(以Consul作为注册中心),一个后端服务模块。client端请求经gateway服务把请求路由到后端服务。
前提条件:
Consul:版本1.5.0。
Spring bot:版本2.1.5。
Spring cloud:版本Greenwich.SR1。
Redis:版本5.0.5。
1.微服务开发
这里以使用Spring Boot框架开发微服务为例,启动一个服务并注册到Consul。
引入依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>注册服务到Consul,配置文件配置如下:
spring: application: name: service-consumer cloud: consul: host: 127.0.0.1 port: 8500 discovery: service-name: service-consumer
如下定义RestController,发布HTTP接口。
(注:此为服务端配置,经Gateway把请求路由转发到该服务上。)
@RestController@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
@GetMapping(value = "/info")
public User info() {
return userService.info();
}
}
2.网关配置创建一个Gateway服务,引入以下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>启动类配置如下:
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
Spring Cloud Gateway对client端请求起到路由功能,主要配置如下:
server: port: 8098spring: application: name: service-gateway cloud: gateway: discovery: locator: enabled: true lower-case-service-id: true consul: host: 127.0.0.1 #注册gateway网关到consul port: 8500 discovery: service-name: service-gateway
此时使用http://localhost:8089/service-consumer/user/info访问服务,网关即可对服务进行路由转发,把请求转发到具体后端服务上。
此时,url中使用的url前缀service-consumer,是后端服务在Consul注册的服务名称转为小写字母以后的字符串。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
