1.什么是微服务的⽹关和应⽤场景
- 什么是⽹关
API Gateway,是系统的唯⼀对外的⼊⼝,介于客户端和服务器端之间的中间层,处理⾮业务功能提供路由请求、鉴权、监控、缓存、限流等功能
统⼀接⼊:智能路由,AB测试、灰度测试,负载均衡、容灾处理,⽇志埋点(类似Nignx⽇志)
流量监控:限流处理,服务降级
安全防护:鉴权处理,监控,机器⽹络隔离
- 主流的⽹关
zuul:是Netflix开源的微服务⽹关,和Eureka,Ribbon,Hystrix等组件配合使⽤,依赖组件⽐较多,性能较差
kong: 由Mashape公司开源的,基于Nginx的API gateway
nginx+lua:是⼀个⾼性能的HTTP和反向代理服务器,lua是脚本语⾔,让Nginx执⾏Lua脚本,并且⾼并发、⾮阻塞的处理各种请求
springcloud gateway: Spring公司专⻔开发的⽹关,替代zuul
2.微服务的⽹关SpringCloud Gateway
3.SpringCloud Gateway项⽬创建和依赖添加
创建Gateway项⽬,添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
配置文件
server:
port: 8888
spring:
application:
name: api-gateway
cloud:
gateway:
routes: #数组形式
- id: order-service #路由唯⼀标识
uri: http://127.0.0.1:8000 #想要转发到的地址
order: 1 #优先级,数字越⼩优先级越⾼
predicates: #断⾔ 配置哪个路径才转发
- Path=/order-server/**
filters: #过滤器,请求在传递过程中通过过滤器修改
- StripPrefix=1 #去掉第⼀层前缀
#访问路径 http://localhost:8888/order-server/api/v1/video_order/list
#转发路径 http://localhost:8000/order-server/api/v1/video_order/list
#需要过滤器去掉前⾯第⼀层
测试
4.SpringCloud Gateway⽹关整合Nacos
原先存在的问题:微服务地址写死,负载均衡没做到
添加Nacos服务治理配置
⽹关添加naocs依赖
<!--添加nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
启动类开启⽀持
@EnableDiscoveryClient
修改配置⽂件
server:
port: 8888
spring:
application:
name: api-gateway
cloud:
nacos:
discovery:
server-addr: 192.168.3.104:8848
gateway:
routes: #数组形式
- id: order-service #路由唯⼀标识
#uri: http://127.0.0.1:8000 #想要转发到的地址
uri: lb://xdclass-order-service #从nacos获取名称转发,lb是负载均衡轮训策略
order: 1 #优先级,数字越⼩优先级越⾼
predicates: #断⾔ 配置哪个路径才转发
- Path=/order-server/**
filters: #过滤器,请求在传递过程中通过过滤器修改
- StripPrefix=1 #去掉第⼀层前缀
discovery:
locator:
enabled: true #开启⽹关拉取nacos的服务
测试