zuul作为微服务系统的网关组件,用于构建边界服务(edge rvice),致力陈慧瑛简介于动态路由、过滤、监控、弹性伸缩和安全。其在微服务架构中有着重要的作用,主要体现在以下六个方面:
zull、ribbon以及eureka相结合可以实现智能路由和负载均衡的功能,zull可以按照某种策略将请求分发到不同的实例上;
网关作为边界服务,将内部服务的api接口进行聚合并统一对外暴露接口。保护内部服务的api接口,防止内部服务被外界调用泄露敏感信息;
网关可以对用户的身份权限进行认证,防止非法请求api接口;
网关可以实现监控功能,实时日志输出,对请求进行记录;
网关可以用来实现流量监控,在高流量的情况下,对服务进行降级;
api接口从内部服务分离出来,便于测试
使用spring cloud zuul实现路由的规则是十分简单的。路由方式包括两种幸福刚刚好:传统路由方式,面向服务的路由方式。
下面我们看以下配置:
该规则配置表示所有符合/holiday/** 规则的访问都会被路由转发到http://localhosst:8最美司机080/地址上,例如:当我们访问http://localhost:5555/holiday/getalldays,api网关就会将请求转发到http://localhost:8080/holiday/getalldays提供的微服务接口上。其中holiday为微服务的名称,可以任意定义,但是一组path和url映射关系的路由名称必须相同,下面面向服务的路由方式也是如此。
spring cloud zuul 与 spring cloud eureka 可以实现无缝对接实现面向服务的路由。我们让路由的path映射到具体的服务上,而具体的url交由eureka的服务发现机制去自动维护。具体配置如下(其他配置参考下面的实战):
通过上面的配置,我们不需要维护具体实例的位置,是得维护工作十分简单。另外,面向服务打的路由默认实现了负载均衡,而传统路由还需要手动添加所有实例的位置。
spring cloud zuul提供了默认的路由规则,当然我们也可以修改这个路由规则。
zull与eureka的配合使用后,zull会默认配置一个路由规则,这些默认牛腩怎么做才好吃规则的path会使用rvice-id配置的服务名作为请求的前缀。例如:有holiday服务,他的默认规则如下
由于默认情况下所有eureka上的服务都会被zuul自动创建映射关系进行路由,这会使得一些我们不希望对外开放的服务也被外部访问到。这个时候我们可以配置zuul.ignored-rvices参数来设置一个服务名匹配表达式进行判断,如果服务名匹配表达式,那么zull将跳过这个服务,不为其创建路由规则。例如:zuul.ignored-rvices=*表示对所有的服务不自动创建路由规则,这样我们就需要为每个服配置路由规则。
有这样一个场景,由于业务的扩展,版本的升级,服务存在不同的版本。比如我们有这样的命名:holiday-v1、holiday-v2,默认情况下,zuul自动为服务创建的路由表达式会采用服务名做前缀,针对holiday-v1就会产生/holiday-v1,/holiday-v2两个路径来做映射,但这样生成的表达式规则较为单一,不利于路径规则的管理。
通常,对于上面这种情况,我们希望是生成的路径为/v1/holiday,/v2/holiday。我们可以通过自定义路由规则来实现,具体代码如下:
patternrviceroutemapper对象可以让开发者通过正则表达式来自定义服务于路由映射的生成关系。
zull有请求过滤的功能,其过滤器可以在http请求的发起和响应返回期间执行一系列的过滤器。
zuul包扩以下四种过滤器:
pre
:该类型的filters在request routing到源web-rvice之前执行。可以进行一些权限认证,日志记录,或者额外给request增加一些属性供后续的filter使用;routing
:该类型的filters用于把request routing到源web-rvice,源web-rvice是实现业务逻辑的服务。这里使用httpclient请求web-rvice;post
:该类型的filters在routing返回respon后执行。用来实现对respon结果进行修改,收集统计数据以及把respon传输会客户端;error
:上面三个过程中任何一个出现错误都交由error历史建筑保护工程类型的filters进行处理。zuul过滤器具有以下关键特性:
type(类型)
:zuul过滤器的类型,这个类型决定过滤器在哪个阶段执行,例如:pre,post等阶段;execution order(执行顺序)
:规定了过滤器的执行顺序,order的值越小,越先执行;criteria(标准)
:filters执行所需条件action(行动)
:如果符合执行条件,则执行action(具体逻辑代码)示例如下:
zuul请求的生命周期如图所示:
通常在服务无法提供服务的时候,需要执行熔断。zuul上实现熔断需要实现fallbackprovider的接口。实现接口中的两个方法:getroute()用于指定应用在哪个服务上;fallbackrespon()进入熔断功能的执行逻辑。示例如下:
bootstrap.properties
apigateway-dev2.properties
在这里我们将获取的登录用户id设置到了请求头中传递给内部服务,内部服务可以通过下面的代码进行获取:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。
本文发布于:2023-04-06 01:43:51,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/48e6f69cd852a961c0455dadb0643472.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:关于服务网关Spring Cloud Zuul(Finchley版本).doc
本文 PDF 下载地址:关于服务网关Spring Cloud Zuul(Finchley版本).pdf
留言与评论(共有 0 条评论) |