项目
博客
文档
归档
资源链接
关于我
项目
博客
文档
归档
资源链接
关于我
九. 微服务核心组件之网关讲解
2020-12-01
·
softbabet博主
·
原创
·
·
本文共 311个字,预计阅读需要 2分钟。
### 微服务的网关和应用场景 什么是网关 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包方式运行。 [官方文档](https://spring.io/projects/spring-cloud-gateway) ### SpringCloud Gateway项目创建和依赖添加 创建Gateway项目 添加依赖(不需要web) ```xml
org.springframework.cloud
spring-cloud-starter-gateway
``` 配置配置文件: ```yml server: port: 8888 spring: application: name: api-gateway cloud: gateway: routes: #数组形式 - id: video-service #路由唯一标识 uri: http://127.0.0.1:9000 #想要转发到的地址 order: 1 #优先级,数字越小优先级越高 predicates: #断言 配置哪个路径才转发 - Path=/video-server/** filters: #过滤器,请求在传递过程中通过过滤器修改 - StripPrefix=1 #去掉第一层前缀 ``` > 原内部api请求路径:http://localhost:9000/api/v1/video/find_by_id?videoId=40 > > 外部gateway提供的路径:http://localhost:8888/video-server/api/v1/video/find_by_id?videoId=40 ### SpringCloud Gateway网关整合Nacos开发实战 原先存在的问题 - 微服务地址写死 - 负载均衡没做到 添加Nacos服务治理配置 - 网关添加naocs依赖 ```xml
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
``` 启动类开启支持`@EnableDiscoveryClient` 修改配置文件 ```yml server: port: 8888 spring: application: name: api-gateway cloud: nacos: discovery: server-addr: 192.168.127.12:8848 gateway: routes: #数组形式 - id: video-service #路由唯一标识 #uri: http://127.0.0.1:9000 #想要转发到的地址 uri: lb://yuan-video-service # 从nacos获取名称转发,lb是负载均衡轮训策略 #order: 1 #优先级,数字越小优先级越高 predicates: #断言 配置哪个路径才转发 - Path=/video-server/** filters: #过滤器,请求在传递过程中通过过滤器修改 - StripPrefix=1 #去掉第一层前缀 discovery: locator: enabled: true #开启网关拉取nacos的服务 ```