java springCloud gateway网关路由详细使用教程
文章目录
1、gateway网关路由是什么?
网关路由的配置方式有多种,常见的有基于配置文件、基于代码和基于注册中心的方式。
- 基于配置文件:这种方式是通过在网关服务器上编写一个或多个配置文件,来定义路由规则和过滤器规则。这种方式的优点是简单易用,可以方便地修改和管理。缺点是需要重启网关服务器才能生效,以及可能存在配置文件不一致或冲突的问题。
- 基于代码:这种方式是通过在网关服务器上编写代码,来动态地创建和注册路由规则和过滤器规则。这种方式的优点是灵活强大,可以实现复杂的逻辑和功能。缺点是需要编写更多的代码,以及可能存在代码错误或漏洞的问题。
- 基于注册中心:这种方式是通过在网关服务器上连接一个或多个注册中心,来自动地发现和更新路由规则和过滤器规则。注册中心是一种专门用于管理服务信息的系统,它可以提供服务注册、发现、监控等功能。这种方式的优点是高效可靠,可以实现动态地调整和负载均衡。缺点是需要依赖外部的注册中心,以及可能存在网络延迟或不稳定的问题。
2、如何使用gateway
(1) 创建网关服务
在项目中创建一个名为gatway的模块用于网关路由服务
(2) 引入依赖
在gatway模块pom文件中引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
(3) 编写启动类
在gateway
模块的com.yangzhuo.gateway
包下新建一个启动类:
代码如下:
package com.yangzhuo.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
(4)配置路由
接下来,在gateway模块的resources目录下创建application.yaml文件,内容如下:
server:
port: 8080
spring:
application:
name: gateway
cloud:
nacos:
server-addr: # 这里写nacos的地址
gateway:
routes:
- id: book# 路由规则id,自定义,唯一
uri: lb://book-service # 路由的目标服务,lb代表负载均衡,会从注册中心拉取服务列表
predicates: # 路由断言,判断当前请求是否符合当前规则,符合则路由到目标服务
- Path=/book/**,/search/** # 这里是以请求路径作为判断规则
按照这个格式对所有微服务模块添加配置文件
gateway:
routes:
- id: book# 路由规则id,自定义,唯一
uri: lb://book-service # 路由的目标服务,lb代表负载均衡,会从注册中心拉取服务列表
predicates: # 路由断言,判断当前请求是否符合当前规则,符合则路由到目标服务
- Path=/book/**,/search/** # 这里是以请求路径作为判断规则
(5)路由断言的类型(补充)
名称 | 说明 | 示例 |
---|---|---|
After | 是某个时间点后的请求 | - After=2037-01-20T17:42:47.789-07:00[America/Denver] |
Before | 是某个时间点之前的请求 | - Before=2031-04-13T15:14:47.433+08:00[Asia/Shanghai] |
Between | 是某两个时间点之前的请求 | - Between=2037-01-20T17:42:47.789-07:00[America/Denver], |
2037-01-21T17:42:47.789-07:00[America/Denver] | ||
Cookie | 请求必须包含某些cookie | - Cookie=chocolate, ch.p |
Header | 请求必须包含某些header | - Header=X-Request-Id, \d+ |
Host | 请求必须是访问某个host(域名) | - Host=.somehost.org,.anotherhost.org |
Method | 请求方式必须是指定方式 | - Method=GET,POST |
Path | 请求路径必须符合指定规则 | - Path=/red/{segment},/blue/** |
Query | 请求参数必须包含指定参数 | - Query=name, Jack或者- Query=name |
RemoteAddr | 请求者的ip必须是指定范围 | - RemoteAddr=192.168.1.1/24 |
weight | 权重处理 |
3、总结
- Spring Cloud Gateway是一个基于Spring Boot 2.x和Spring WebFlux的微服务网关,它提供了一种简单且灵活的方式来实现API路由和治理。通过Spring Cloud Gateway,开发人员能够构建具有高度可扩展性和可靠性的微服务应用程序。
- Spring Cloud Gateway的核心功能包括路由、断路器、过滤器和限流等。路由是Spring Cloud Gateway最基本的特性之一,它允许开发人员将请求路由到不同的后端服务。路由可以基于URL、HTTP方法、请求头等多种因素进行配置。开发人员可以使用Spring Cloud Gateway提供的默认路由规则,也可以通过编程方式自定义路由规则。
- 断路器是Spring Cloud Gateway提供的一种用于监控和熔断服务的工具。通过断路器,开发人员可以实时监控服务的健康状况,并在服务出现问题时快速熔断,以避免问题扩散到整个系统。
过滤器是Spring Cloud Gateway中另一个非常有用的特性,它允许开发人员在请求到达后端服务之前或之后执行自定义逻辑。例如,可以通过过滤器实现请求的身份验证、日志记录或请求规范化等操作。 - 限流是Spring Cloud Gateway提供的一种保护后端服务的机制。通过限流,开发人员可以限制系统的吞吐量和并发量,以避免因过多的请求而导致的系统崩溃。Spring Cloud Gateway提供了多种限流算法,如令牌桶、漏桶等,供开发人员选择。
- 总之,Spring Cloud Gateway作为微服务架构中的网关组件,提供了强大的路由、断路器、过滤器和限流等功能,帮助开发人员构建可靠、可扩展的微服务应用程序。