SpringCloud Zuul网关的简单理解

Zuul网关功能

请求路由、服务路由、请求过滤

请求路由

参数配置如下所示,所有能够配置path规则的请求,都会被zuul网关转发到对应的url上。

zuul.routes.user-service.path=/user-service/**  
zuul.routes.user-service.url=http://178.69.1.39:9104/ 

服务路由

参数配置如下所示,zuul会对服务user-service进行路由,所有能够配置path规则的请求,都会被zuul网关转发到serivce-id服务上。

zuul.routes.user-service.path=/user-service/**  
zuul.routes.user-service.serviceId=user-service/**  
zuul.routes.user-service.strip-prefix=false

Zuul内置Hystrix和Ribbon

Zuul内置Hystrix和Ribbon模块的依赖,所以zuul天生就拥有线程隔离和断路器的自我保护功能,以及对服务调用的客户端负载均衡功能。
当使用path与url的映射关系来配置路由规则的时候,对于路由转发的请求不会采用hystrixCommand来包装,所以这类请求没有线程隔离和断路器的保护,并且也不会有负载均衡的能力。
因此,在使用zuul的时候尽量使用path和serviceId的组合(也就是服务路由)来进行配置,这样不仅可以保证api网关的健壮和稳定,也能用到ribbon的客户端负载均衡功能。
Zuul配置Hystrix和Ribbon,详情见:
https://www.cnblogs.com/expiator/p/10753746.html

请求过滤ZuulFilter

如果想过滤请求,可以继承ZuulFilter类,重写方法。

/**
 * 
 *  Standard types in Zuul are "pre" for pre-routing filtering,
 * "route" for routing to an origin, "post" for post-routing filters, "error" for error handling.
 *  
 * 过滤的类型,可以返回"pre"、"route"、"post"、"error"
 * filterType() - 按类型对过滤器进行分类。 可以返回用于预路由过滤的“pre”,用于路由到原点的“route”,
 * 用于后路由过滤的“post”,用于错误处理的“error”。
 * @return
 */
@Override
public String filterType() {
	return "pre";
}

/**
 * 
 *   filterOrder() must also be defined for a filter. Filters may have the same  filterOrder if precedence is not
 *  important for a filter. filterOrders do not need to be sequential.
 *  返回数字,表示过滤器执行的顺序。filterOrders返回的结果不需要是连续的顺序,如1,2,3,4。
 * @return
 */
@Override
public int filterOrder() {
	return 0;
}

/**
 * 是否过滤
 * @return
 */
@Override
public boolean shouldFilter() {
	return true;
}

/**
 * 过滤器的具体逻辑。
 * @return
 */
@Override
public Object run() {}

示例代码如下:
https://github.com/firefoxer1992/SpringCloudProject/blob/master/zuul/src/main/java/com/example/demo/filter/AccessFilter.java

参考资料:

《SpringCloud微服务实战》

posted on   乐之者v  阅读(284)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2018-04-27 读取properties文件并获取属性值
2017-04-27 org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class org.springframework.web.context.ContextLoaderListener java.lang.ClassNotFoundException
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示