SpringCloud(七)API网关–Zuul

文章内索引
[显示]

服务网关Zuul

Zuul主要功能是路由转发和过滤器,为API服务提供网关功能,你可以理解为他是一个nginx(路由转发)+lua(自定义代码实现过滤器)的java实现。它可以用来提供动态路由、监控、授权、安全、调度等等的边缘服务(edge service),Zuul默认和ribbon实现的负载均衡的功能,Zuul基于groovy语言可以实现动态编译。

路由配置

1. 配置文件中配置

配置/api-a-url请求都转发至localhost:8080(ribbon+restTempalte) /api-b-url/请求都转发至localhost:8081(feign)

zuul.routes.api-a-url.path=/api-a-url/**

zuul.routes.api-a-url.url=http://localhost:8080/

zuul.routes.api-b-url.path=/api-b-url/**

zuul.routes.api-b-url.url=http://localhost:8081/

此种方式相当于在配置文件中写死了配置,无法扩展。所以引出了配置2

2. 基于服务中心的服务映射(serviceId)

eureka中已经有我们的配置信息,那我们可以借助他来完成地址映射。

zuul.routes.api-a.path=/api-a/**

#ribbon+restTempalte的实现方式

zuul.routes.api-a.serviceId= eureka-consumer

zuul.routes.api-b.path=/api-b/**

#feign实现方式的消费者

zuul.routes.api-b.serviceId= eureka-consumer-feign

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

过滤器

过滤机制

SpringCloud(七)API网关–Zuul|springcloud-翰林小院 第1张

zuul把Request route到 用户处理逻辑 的过程中,这些filter参与一些过滤处理,比如

  • 验证与安全保障: 识别面向各类资源的验证要求并拒绝那些与要求不符的请求。
  • 审查与监控: 在边缘位置追踪有意义数据及统计结果,从而为我们带来准确的生产状态结论。
  • 动态路由: 以动态方式根据需要将请求路由至不同后端集群处。
  • 压力测试: 逐渐增加指向集群的负载流量,从而计算性能水平。
  • 负载分配: 为每一种负载类型分配对应容量,并弃用超出限定值的请求。
  • 静态响应处理: 在边缘位置直接建立部分响应,从而避免其流入内部集群。
  • 多区域弹性: 跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可能接近。

 

生命周期

过滤器的声明周期,和类似aop。

SpringCloud(七)API网关–Zuul|springcloud-翰林小院 第2张

Simple

http://start.spring.io/中,输入eureka discovery与zuul快速生成zuul服务网关项目。

添加@EnableDiscoveryClient注解与@EnableZuulProxy,启动springboot项目(此项目与其他Restful风格的springboot项目一致,只需要添加@EnableDiscoveryClien即可注册至服务中心)

声明@ EnableZuulProxy,启用zuul路由之后基于服务中心的serviceId配置路由,编写filter进行具体过滤的操作。

 

conf

 

code

启动服务,访问eureka server,可以看到zuul服务已经在服务中心注册。

SpringCloud(七)API网关–Zuul|springcloud-翰林小院 第3张

访问http://localhost:8200/api-a 可以看到浏览器提示token is empty说明zuul的拦截器已经生效。

SpringCloud(七)API网关–Zuul|springcloud-翰林小院 第4张

添加token再次访问,基于以上配置,此时访问的是eureka-consumer服务(localhost:8080)

SpringCloud(七)API网关–Zuul|springcloud-翰林小院 第5张

 

访问api-b http://localhost:8200/api-b?token=hanson ,此时访问的是eureka-consumer-feign服务(localhost:8081),发现此时路由已经生效了。

SpringCloud(七)API网关–Zuul|springcloud-翰林小院 第6张


©版权声明:本文为【翰林小院】(huhanlin.com)原创文章,转载时请注明出处!

发表评论

电子邮件地址不会被公开。