大家好我是苏麟今天带来Geteway.
Gateway服务网关
Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统 一的 API 路由管理方式。
官网 : spring.io/projects/spring-cloud-gateway/
网关
Gateway网关是我们服务的守门神,所有微服务的统一入口。
网关的功能特性:
- 路由
- 负载均衡
- 统一鉴权
- 跨域
- 统一业务处理(缓存)
- 访问控制
- 发布控制
- 流量染色
- 接口保护:
- 限制请求
- 信息脱敏
- 降级
- 限流
- 超时时间
- 统一日志
- 统一文档
架构图:
网关分为两种:
1.全局网关(接入层网关):作用是负载均衡,请求日志等,不和业务逻辑绑定.
2.业务网关(微服务层网关):会有一定逻辑,作用是将请求转发到不同的业务/项目/接口/服务
Gateway快速入门
下面,我们就演示下网关的基本路由功能。基本步骤如下:
1. 创建SpringBoot工程gateway,引入网关依赖
2. 编写启动类
3. 编写基础配置和路由规则
4. 启动网关服务进行测试
1)创建gateway服务,引入依赖
创建服务:
引入依赖:
<!-- 网关依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服务发现依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2)编写启动类
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
3)编写基础配置和路由规则
server:
port: 10010 # 网关 端口
spring:
application:
name: gateway #服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos 地址
gateway:
routes: # 网关路由配置
- id: user-service
#uri: http://127.0.0.0.1:8848 #路由的目的地址 http 是固定地址
uri: lb://userservice # 路由的目的地址 lb是负载均衡,后面跟上服务名称
predicates: #路由断言 , 判断请求路由是否符合规则
- Path=/user/** # 以/user/开头的都符合规则
- id: orderserver
uri: lb://orderserver
predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
- Path=/order/** # 这个是按照路径匹配,只要以/user/开头就符合要求
我们将符合 Path 规则的一切请求,都代理到 uri 参数指定的地址。
本例中,我们将 /user/** 开头的请求,代理到 lb://userservice ,lb是负载均衡,根据服务名拉取 服务列表,实现负载均衡。
4)重启测试
重启网关,访问http://localhost:10010/user/1时,符合 /user/** 规则,请求转发到uri:http://users ervice/user/1,得到了结果:
5)网关路由的流程图
整个访问的流程如下:
总结:
网关搭建步骤:
1. 创建项目,引入nacos服务发现和gateway依赖
2. 配置application.yml,包括服务基本信息、nacos地址、路由
路由配置包括:
1. 路由id:路由的唯一标示
2. 路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡
3. 路由断言(predicates):判断路由的规则
4. 路由过滤器(filters):对请求或响应做处理
更多知识全在官网,想要了解更全面更仔细去官方网站,那里不仅有小Demo还有文字讲解.
这期就到这里下期见!