




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章服务网关开发Zuul学习目标了解网关,以及Zuul和Gateway的区别。掌握搭建Zuul实现接口统一访问的方法。学会使用Zuul实现过滤拦截和限流。第10章我们通过实际操作学习了Eureka,本章我们依然通过实际操作来学习微服务必不可少的网关服务——Zuul。网关介绍12Zuul和Gateway3搭建网关微服务实现接口统一访问4Zuul实现过滤和拦截5Zuul实现限流网关介绍网关指的是一个网络连接到另一个网络的“关口”。在Internet里,网关是一种连接内部网与Internet上其他网络的中间设备,通俗来说,也叫作“路由器”。网关地址是能够理解成内部网与Internet信息传输的一种通道的地址。根据不一样的分类准则,网关也有非常多的种类,在TCP/IP(TransmissionControlProtocol/InternetProtocol,传输控制协议/互联网协议)里网关的使用频率是极高的,而本章我们所讲解的网关是指“API网关”。API网关作为一个服务,是整个后端的统一入口。首先,它可以提供基本的路由服务,将调用转发到上游服务。其次,作为一个入口,它可以进行认证、鉴权和限流等操作,为上游服务提供保护。API网关作为一种微服务架构解决方案,很好地解决了微服务下调用、统一接入等问题。总结而言,API网关有以下五大功能。网关介绍1.路由转发由于API网关是内部微服务的唯一入口,所以外部请求都会先转发到这个API网关上,然后由API网关来根据不同的请求将其转发到不同的微服务节点上。并且,由于内部微服务实例会随着业务调整不停地变更,如增加或者删除节点,API网关可以与服务注册中心进行协同工作,保证将外部请求转发到合适的微服务实例上。2.负载均衡由于API网关是内部微服务的唯一入口,所以API网关在收到外部请求之后,还可以根据内部微服务每个实例的负荷情况动态地进行负载均衡调节。一旦内部的某个微服务实例负载很高,甚至不能及时响应,API网关就会通过负载均衡策略减少或停止向这个实例转发请求。当所有的内部微服务实例都处理响应不过来的时候,API网关还可以采用限流或熔断的形式阻止外部请求,以保障整个系统的可用性。网关介绍3.安全认证API网关就像微服务的“大门守卫”,每一个请求进来之后,都必须先在API网关上进行身份验证,身份验证通过后才将其转发给后面的服务,转发的时候一般会带上身份信息。同时API网关也需要对每一个请求进行安全性检查,如参数的安全性、传输的安全性等。4.日志记录既然所有的请求都需要经过API网关,那么我们就可以在API网关上集中地记录下这些行为日志。这些日志既可以作为我们后续的问题排查使用,也可以作为系统的性能监控使用。5.数据转换由于API网关对外面向多种不同的客户端,不同的客户端所传输的数据的类型可能是不一样的。因此,API网关还需要具备数据转换的功能,将不同客户端传输进来的数据转换成同一种类型的数据,再转发给内部微服务,这样可兼容了这些请求的多样性,保证微服务的灵活性。网关介绍12Zuul和Gateway3搭建网关微服务实现接口统一访问4Zuul实现过滤和拦截5Zuul实现限流Zuul和GatewayZuul是Netflix公司提供的微服务网关,它可以和Eureka、Ribbon、Hystrix等组件配合使用,实现认证和安全、性能监测、动态路由、负载均衡、压力测试、静态资源处理等功能。Gateway是Spring官方基于Spring5.0、SpringBoot2.0和ProjectReactor等技术开发的网关。Gateway作为SpringCloud中的网关,目标是替代Zuul,其不仅提供了统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,如安全、监控和限流等。虽然都是微服务网关,但Zuul和Gateway有许多区别。Zuul基于Servlet,在Zuul1.x的时候Zuul仅支持同步阻塞式I/O,不支持websockets长连接,但是在Zuul2.x的时候Zuul引入了高性能的Reactor模式通信框架Netty,可支持异步非阻塞式I/O和websockets长连接。Zuul和GatewayGateway是基于WebFlux框架实现的,而WebFlux框架底层使用了Netty,支持websockets长连接,支持异步非阻塞式I/O。Gateway比Zuul多依赖了SpringWebFlux,因此在Spring的支持下,功能更强大,内部实现了限流、负载均衡等功能,扩展性也更强,但Gateway仅适用于SpringCloud。Zuul则可以扩展至其他微服务架构中。总的来说,在微服务架构中,如果使用了SpringCloud的基础组件,则Gateway相比而言更加具备优势。如果使用小型微服务架构或复杂架构(包含其他非SpringCloud服务节点),Zuul也是一个不错的选择。网关介绍12Zuul和Gateway3搭建网关微服务实现接口统一访问4Zuul实现过滤和拦截5Zuul实现限流搭建网关微服务实现接口统一访问我们现在搭建一个Zuul网关,实现在第9章创建的商品和订单两个微服务的接口通过网关统一访问。同样,先创建一个SpringBoot项目,命名为zuul,如图所示。搭建网关微服务实现接口统一访问然后,在“Dependencies”界面中勾选“SpringCloudRouting”中的“Zuul[Maintenance]”;并勾选“SpringCloudDiscovery”中的“EurekaDiscoveryClient”,如图所示。搭建网关微服务实现接口统一访问server.port配置服务的端口号为8000,配置服务的名称为zuul。service-url.defaultZone和10.4节我们加入安全认证的eureka-server的注册中心地址一样。zuul.routes配置路由,goods和order为路由ID(可随便命名,不重复就行),path为匹配的URI,serviceId为转发的目标服务的名字(也可以用服务的URL代替这个字段)。创建好SpringBoot项目后,我们同样先将配置文件扩展名改成“.yml”。然后在application.yml中写入zuul配置,如程序清单11-1所示。搭建网关微服务实现接口统一访问然后,在启动类上添加@EnableZuulProxy注解开启Zuul,如程序清单11-2所示。然后我们分别启动eureka-server、order、goods和Zuul项目(如果Eureka开启了安全访问,启动前记得给goods的defaultZone添加用户名和密码)。访问注册中心查看Eureka面板信息,如图所示,可以看到它们都在正常运行。搭建网关微服务实现接口统一访问最后,我们验证测试,通过Zuul路由来调用商品微服务的查询所有商品接口,如图所示,访问“http://localhost:8000/goods-service/goods/all”。再调用订单微服务的查询所有订单接口,如图所示,访问“http://localhost:8000/order-service/order/all”。搭建网关微服务实现接口统一访问至此,我们便实现了通过网关来统一访问不同的微服务的接口。当调用这些微服务时,不用再关心具体的IP地址和端口,只需要知道网关指定的路由path即可。加入网关,可极大地降低前端调用后端不同微服务的复杂性,提高安全性,因为这样只需要对外暴露网关的地址,隐藏了调用的真实的微服务的地址。网关介绍12Zuul和Gateway3搭建网关微服务实现接口统一访问4Zuul实现过滤和拦截5Zuul实现限流Zuul实现过滤和拦截Zuul可以实现对所有发往后端微服务请求的过滤和拦截。Zuul主要有4种类型的过滤器。(1)pre:预过滤器,在路由分发请求前调用。(2)post:后过滤器,在路由分发请求后调用。(3)route:路由过滤器,用于路由请求分发。(4)error:错误过滤器,在处理请求发生错误时调用。怎样使用这几种过滤器呢?很简单,只需要继承ZuulFilter类,实现4个方法。例如,我们使用预过滤器实现拦截订单微服务的功能。首先,在zuul微服务中创建一个filter包,然后写一个继承ZuulFilter类的自定义类MyFilter,如程序清单11-3所示。Zuul实现过滤和拦截Zuul实现过滤和拦截首先,filterType方法通过返回字符串设置过滤器类型,这里用的FilterConstants定义的PRE_TYPE常量,值为pre。然后,filterOrder方法决定过滤器的执行顺序,返回的值越小越优先处理。接着,shouldFilter方法判断是否拦截。然后,在run方法中写处理请求的代码。先获得请求的上下文,再通过URI判断转发的请求是否是order服务,接着通过context.setSendZuulResponse(false)终止请求的转发,并通过context.setResponseBody给浏览器返回提示信息。最后进行验证,依次启动各个微服务并打开浏览器,通过Zuul分别访问订单服务和商品微服务的查询接口,如图所示。网关介绍12Zuul和Gateway3搭建网关微服务实现接口统一访问4Zuul实现过滤和拦截5Zuul实现限流Zuul实现限流Zuul限流是通过引入spring-cloud-zuul-ratelimit依赖实现的。它提供了下面几种限流类型。(1)用户(USER),根据认证用户或匿名用户限流。(2)客户端IP地址(ORIGIN),根据客户端IP地址限流。(3)请求路径(URL),根据请求URL限流。(4)根据服务限流。下面我们来实现对商品微服务的限流。首先,引入spring-cloud-zuul-ratelimit依赖,如程序清单11-4所示。Zuul实现限流然后,在application.yml中配置限流,如程序清单11-5所示。其中enabled:true表示开启限流,polici
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 森林生态补偿与林权流转合作协议
- 网络影视作品版权代理合作协议
- 绿色建筑电气系统设计、安装及性能验收协议
- 重型工业仪器定期校准认证与风险评估合同
- 生物制药洁净厂房空气净化系统租赁与安全检测合同
- 航空货运代理航空货物清关代理承包协议
- 海外留学行李保险与全球托运质量监管协议
- 《社会保险知识普及教学课件》
- 《慢性肾衰竭》课件2
- 《农业机械操作培训》课件
- 长安悦翔驱动桥设计与有限元分析
- 2024-2029年中国精对苯二甲酸(PTA)行业市场发展前景及投资潜力研究报告预测
- (高清版)DZT 0216-2020 煤层气储量估算规范
- 《养老护理员》-课件:职业安全和个人防护知识
- 最高人民法院民法典总则编司法解释理解与适用
- 雅思托福培训班合作协议
- uht牛奶工艺流程
- 肿瘤护理进修汇报
- 《扩散焊专题》课件
- 《音频媒体》课件
- 报价培训课件
评论
0/150
提交评论