微服务学习11——spring cloud的网关zuul
1,为什么需要网关服务
如果有很多个微服务,用户需要依次去和各个微服务打交道吗?当然不需要,这样很不方便,通过一个网关就可以了!
通过中间的一层gateway访问即可
2,服务网关的要素
(1)稳定性,高可用;要是网关不可用,那么所有服务都不可用了!
(2)性能和并发性;
(3)安全性
(4)扩展性
3,常用的网关方案
(1)Nginx+Lua,性能好,具有高可用性,并且具有良好的扩展性(它本身被设计成耦合度极低的各个模块)
(2)KONG,基于Nginx二次开发,是商业软件,得花钱
(3)Tyk,是一个开源的、轻量级、快速、可伸缩的API网关,支持配额和速度限制。Go语言开发的,性能和扩展性上海市不错的。
(4)Spring Cloud Zuul,用了spring cloud再用zuul还是很合适的,快速上手的好方案。但是一代的zuul在性能上不具备优势
4,Zuul的特点
(1)路由+过滤器=Zuul
(2)核心是一系列的过滤器
5,Zuul的四种过滤器API
(1)前置(Pre)
(2)路由(Route)
(3)后置(Post)
(4)错误(Error)
Zuul整个的架构图如下:
6,请求生命周期
7,调用zuul
实际上调用spring cloud zuul相对比较简单
(1)pom加入依赖
(2)在启动类上加入@EnableZuulProxy
(3)启动服务后,按照如下格式可以访问其他服务!
zuul服务/微服务名/访问路径:
http://localhost:8080/product/product/list
这样就可以访问,product的 /product/list服务。
8,自定义路由
在yml文件中加入这么一段即可:
zuul:
routes:
myProduct:
path: /myProduct/**
serviceId: product
访问就可以用这种方式:
http://localhost:8080/myProduct/product/list
上面的这段有简便写法:
zuul:
routes:
# myProduct:
# path: /myProduct/**
# serviceId: product
# 简洁写法
product: /myProduct/**
如果要将一些接口隐藏而不暴露出来,加上ignored即可:
zuul:
routes:
# myProduct:
# path: /myProduct/**
# serviceId: product
# 简洁写法、
product: /myProduct/**
# 排除某些路由
ignored-patterns:
- /myProduct/product/list
- /product/product/list
当然也可以用通配符:
/**/product/list
还没有评论,来说两句吧...