1、Zuul是干什么?
Routing is an integral part of a microservice architecture. For example, / may be mapped to your web application, /api/users is mapped to the user service and /api/shop is mapped to the shop service. Zuul is a JVM-based router and server-side load balancer from Netflix.(原文)
路由在微服务体系结构的一个组成部分。例如,/
可以映射到您的Web应用程序,/api/users
映射到用户服务,并将/api/shop
映射到商店服务。Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器。
zuul 是netflix开源的一个APIGateway 服务器, 本质上是一个web servlet应用。
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.
Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
Zuul可以通过加载动态过滤机制,从而实现以下各项功能:
·验证与安全保障: 识别面向各类资源的验证要求并拒绝那些与要求不符的请求。
·审查与监控: 在边缘位置追踪有意义数据及统计结果,从而为我们带来准确的生产状态结论。
·动态路由: 以动态方式根据需要将请求路由至不同后端集群处。
·压力测试: 逐渐增加指向集群的负载流量,从而计算性能水平。
·负载分配: 为每一种负载类型分配对应容量,并弃用超出限定值的请求。
·静态响应处理: 在边缘位置直接建立部分响应,从而避免其流入内部集群。
·多区域弹性: 跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可能接近。
注意:Zuul服务最终还是会注册进Eureka。
提供=代理+路由+过滤三大功能
2、再阐释什么是动态路由之前,需要介绍一下架构的设计。
传统互联网架构图(下图) |
加入eureka的架构图(下图)book注册到eureka注册中心中,zuul本身也连接着同一个eureka,可以拉取book众多实例的列表。服务中心的注册发现一直是值得推崇的一种方式,但是不适用与网关产品。因为我们的网关是面向众多的其他部门的已有或是异构架构的系统,不应该强求其他系统都使用eureka,这样是有侵入性的设计。 |
最终架构图(下图)要强调的一点是,gateway最终也会部署多个实例,达到分布式的效果,在架构图中没有画出,请大家自行脑补。 |
3、接下面实现的例子
pom | <!-- zuul路由网关 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> |
yml |
eureka: zuul: prefix: /jrj # 这个是表示在访问的时候加一个这个前置 ①ignored-services: microservicecloud1-dept # 如果这是*的话是忽略所有的服务,只能使用/mydept/来访问 ② routes: mydept.serviceId: microservicecloud1-dept # 这个服务名称为“microservicecloud1-dept”的简化成/mydept/ mydept.path: /mydept/** --------------------------------------- 这样配置后: http://169.254.200.27:9001/dept/get/1这是生产者提供的接口 1、---按照上述的配置,其他消费者再去访问时就对应下面的这个连接, http://gateway-9527.com:9527/jrj/mydept/dept/get/1 2、-- 如果不配置①,但配置② http://gateway-9527.com:9527/mydept/dept/get/1 3、--如果不配置①和② http://gateway-9527.com:9527/mydept/dept/get/1和 http://gateway-9527.com:9527/microservicecloud1-dept/dept/get/1这两个都可以 |
启动类 | @EnableZuulProxy //这个是打开Zuul @SpringBootApplication public class Zuul_9527_StartSpringCloudApp { public static void main(String[] args) { SpringApplication.run(Zuul_9527_StartSpringCloudApp.class, args); } } |
这个待补充!!!!
参考文章:
https://blog.csdn.net/u013815546/article/details/69669165
https://blog.csdn.net/u013815546/article/details/68944039