什么是网关
- API Gateway,是系统的唯一对外的入口,介于客户端和服务器端之间的中间层,处理非业务功能提供路由请求、鉴权、监控、缓存、限流等功能。
- 统一接入
- 智能路由
- AB测试、灰度测试
- 负载均衡、容灾处理
- 日志埋点(类似Nignx日志)
- 流量监控
- 限流处理
- 服务降级
- 安全防护
- 鉴权处理
- 监控
- 机器网络隔离
- 主流的网关
- zuul:是Netflix开源的微服务网关,和Eureka,Ribbon,Hystrix等组件配合使用,依赖组件比较多,性能教差
- kong: 由Mashape公司开源的,基于Nginx的API gateway
- nginx+lua:是一个高性能的HTTP和反向代理服务器,lua是脚本语言,让Nginx执行Lua脚本,并且高并发、非阻塞的处理各种请求
- springcloud gateway: Spring公司专门开发的网关,替代zuul
注意:AlibabaCloud全家桶还没对应的网关,那么就用SpringCloud官方推荐的Gateway
什么是 SpringCloud Gateway
- Spring官方出品,基于Spring5+Reactor技术开发的网关
- 性能强劲基于Reactor+WebFlux、功能多样
- 基于springboot2.x, 直接可以jar包方式运行
创建SpringCloud网关项目和依赖添加
新建class-api-gateway项目,和之前的新建步骤一样。并且在java目录下新建com.study包
网关项目添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
网关项目添加启动类
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);
}
}
网关项目创建application.yml文件,并配置
server:
port: 8888
spring:
application:
name: class-api-gateway
cloud:
gateway:
routes: #路由:数组形式,可以是多个
- id: order-service #路由唯一标识
uri: http://127.0.0.1:8000 #想要转发到的地址
order: 1 #优先级,数字越小优先级越高
predicates: #断言 配置哪个路径才转发
- Path=/order-server/** #请求时前缀是/order-server/进行转发
filters: #过滤器,请求在传递过程中通过过滤器修改
- StripPrefix=1 #去掉第一层前缀,因为订单服务接口url不包含/order-server,所以会将其过滤掉
#访问路径 http://localhost:8888/order-server/api/v1/video_order/threadTest
#转发路径 http://localhost:8000/order-server/api/v1/video_order/threadTest
#需要过滤器去掉前面第一层,过滤器去掉后url:
# http://localhost:8000/api/v1/video_order/threadTest
启动网关服务和订单服务测试
//访问8888端口,会自动转到8000端口的订单服务
http://localhost:8888/order-server/api/v1/video_order/threadTest