SpringCloud之Zuul服务网关详解
作者:疯狂的帆
这篇文章主要介绍了SpringCloud之Zuul服务网关详解,服务网关是微服务架构中一个不可或缺的部分,通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制(鉴权)等功能,需要的朋友可以参考下
ZUUL服务网关是什么
服务网关是微服务架构中一个不可或缺的部分。
通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制(鉴权)等功能。
Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。
ZUUL官网:https://github.com/Netflix/zuul
ZUUL服务架构
ZUUL 路由(Router)
ZUUL的简单使用
1)新建一个服务
2)引入依赖
<!-- zuul依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <!-- 导入eureka客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
3)编写启动类
@SpringBootApplication @EnableEurekaClient // 开启Eureka客户端 @EnableZuulProxy // 开启服务网关 public class ZuulApp { public static void main(String[] args) { System.out.println("Zuul网关服务启动。。。8885"); SpringApplication.run(ZuulApp.class, args); } }
4)配置zuul
server.port=8885 spring.application.name=springcloud-zuul-gateway # springcloud-consumer:指定路由ID,名字是自定义的 # path:映射的地址 zuul.routes.springcloud-consumer.path=/consumer/** # url:springcloud-consumer实际的服务地址,写服务名即可 zuul.routes.springcloud-consumer.url=springcloud-consumer # 让zuul去eureka获取服务 # 获取服务列表的周期 eureka.client.registry-fetch-interval-seconds=5 # eureka的服务地址 eureka.client.service-url.defaultZone=http://eureka-8888:8888/eureka/ # 当调用getHostname获取实例的hostname时,返回ip而不是host名称 eureka.instance.prefer-ip-address=true # 指定ip地址 eureka.instance.ip-address=127.0.0.1
5)测试
先启动 eureka服务,再启动其他服务
访问 //localhost:8885/consumer/queryUserList
可以看出,zuul服务网关已经可以正常运作了。
这便是 ZUUL服务网关中路由(Router)的功能。接下来我们来了解zuul的另一大功能—过滤器(Filter)。
ZUUL 过滤器 Filter
zuulFilter的使用场景
- 请求鉴权:一般放在pre类型,如果发现没有访问权限,直接就拦截了
- 异常处理:一般会在error类型和post类型过滤器中结合来处理。
- 服务调用时长统计:pre和post结合使用。
filter的类型
- pre:请求在被路由之前执行
- routing:在路由请求时调用
- post:在routing和errror过滤器之后调用
- error:处理请求时发生错误调用
Filter 的生命周期
Filter 的生命周期有 4 个,分别是 “PRE”、“ROUTING”、“POST” 和“ERROR”。
- PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
- ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用 Apache HttpClient 或 Netfilx Ribbon 请求微服务。
- POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的 HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
- ERROR:在其他阶段发生错误时执行该过滤器。 除了默认的过滤器类型,Zuul 还允许我们创建自定义的过滤器类型。例如,我们可以定制一种 STATIC 类型的过滤器,直接在 Zuul 中生成响应,而不将请求转发到后端的微服务。
- 正常流程:
- 请求到达首先会经过pre类型过滤器,而后到达routing类型,进行路由,请求就到达真正的服务提供者,执行请求,返回结果后,会到达post过滤器。而后返回响应。
- 异常流程:
- 整个过程中,pre或者routing过滤器出现异常,都会直接进入error过滤器,再error处理完毕后,会将请求交给POST过滤器,最后返回给用户。
- 如果是error过滤器自己出现异常,最终也会进入POST过滤器,而后返回。
- 如果是POST过滤器出现异常,会跳转到error过滤器,但是与pre和routing不同的时,请求不会再到达POST过滤器了。
Zuul中Filter的默认执行顺序
到此这篇关于SpringCloud之Zuul服务网关详解的文章就介绍到这了,更多相关Zuul服务网关内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!