当前位置: 首页 > news >正文

zuul入门(4)zuul的注解@EnableZuulServer和@EnableZuulProxy

@EnableZuulServer、@EnableZuulProxy两个注解

@EnableZuulProxy简单理解为@EnableZuulServer的增强版,当Zuul与Eureka、Ribbon等组件配合使用时,我们使用@EnableZuulProxy。 

RequestContext:用于在过滤器之间传递上下文,如:请求路由到哪里、错误、HttpServletRequest、HttpServletResponse,数据保存在每个请求的ThreadLocal中。

一、@EnableZuulServer过滤器

1、pre类型过滤器

(1) ServletDetectionFilter:该过滤器用于检查请求是否通过Spring Dispatcher。检查后,通过isDispatcherServletRequest设置布尔值。

(2) FormBodyWrapperFilter:解析表单数据,并为请求重新编码。

(3) DebugFilter:顾名思义,调试用的过滤器,可以通过zuul.debug.request=true,或在请求时,加上debug=true的参数,例如$ZUUL_HOST:ZUUL_PORT/path?debug=true开启该过滤器。这样,该过滤器就会把RequestContext.setDebugRouting()、RequestContext.setDebugRequest()设为true。

2、route类型过滤器

SendForwardFilter:该过滤器使用Servlet RequestDispatcher转发请求,转发位置存储在RequestContext.getCurrentContext().get("forward.to")中。可以将路由设置成:

  1. zuul: 
  2. routes: 
  3. abc:  
  4. path: /abc/** 
  5. url: forward:/abc 

然后访问$ZUUL_HOST:ZUUL_PORT/abc,观察该过滤器的执行过程。

3、post类型过滤器

SendResponseFilter:将Zuul所代理的微服务的响应写入当前响应。

4、error类型过滤器

SendErrorFilter:如果RequestContext.getThrowable()不为null,那么默认就会转发到/error,也可以设置error.path属性修改默认的转发路径。

二、@EnableZuulProxy过滤器

如果使用注解@EnableZuulProxy,那么除上述过滤器之外,Spring Cloud还会增加以下过滤器:

1、pre类型过滤器

PreDecorationFilter:该过滤器根据提供的RouteLocator确定路由到的地址,以及怎样去路由。该路由器也可为后端请求设置各种代理相关的header。

2、route类型过滤器

(1) RibbonRoutingFilter:该过滤器使用Ribbon,Hystrix和可插拔的HTTP客户端发送请求。serviceId在RequestContext.getCurrentContext().get("serviceId")中。该过滤器可使用不同的HTTP客户端,例如

Apache HttpClient:默认的HTTP客户端

SquareupOkHttpClient v3:如需使用该客户端,需保证com.squareup.okhttp3的依赖在classpath中,并设置ribbon.okhttp.enabled = true。

Netflix Ribbon HTTP client:设置ribbon.restclient.enabled = true即可启用该HTTP客户端。需要注意的是,该客户端有一定限制,例如不支持PATCH方法,另外,它有内置的重试机制。

(2) SimpleHostRoutingFilter:该过滤器通过Apache HttpClient向指定的URL发送请求。URL在RequestContext.getRouteHost()中。

相关文章:

  • 《 民办非企业单位许可业务目标文档》
  • Bootstrap图像
  • 将php分页类YII绑定框架,就需要改变风格的基础
  • 我们为什么要了解一下智能家居的技术标准
  • Netflix已经全部迁移到云端
  • grep 信息提取
  • 利用大数据加强医疗保障
  • spring mvc controller间跳转 重定向 传参
  • Centos下MySQL使用总结
  • 专家答疑:重复数据删除在云中是如何工作的?
  • Spring、控制反转与依赖注入(概念)
  • 掌握设计开发维护大型网站的技术之性能
  • Spreadsheet Calculator 电子表格计算器 (Uva 215)
  • 资交所遭遇黑客攻击勒索,阿里云并肩为投资者保驾护航
  • 使用Log4j记录日志说明
  • 【附node操作实例】redis简明入门系列—字符串类型
  • AngularJS指令开发(1)——参数详解
  • const let
  • CSS 三角实现
  • Elasticsearch 参考指南(升级前重新索引)
  • Invalidate和postInvalidate的区别
  • PermissionScope Swift4 兼容问题
  • rabbitmq延迟消息示例
  • Redis学习笔记 - pipline(流水线、管道)
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 离散点最小(凸)包围边界查找
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 微信开源mars源码分析1—上层samples分析
  • 阿里云ACE认证学习知识点梳理
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 如何用纯 CSS 创作一个货车 loader
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​虚拟化系列介绍(十)
  • # Apache SeaTunnel 究竟是什么?
  • # Maven错误Error executing Maven
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (C语言)fgets与fputs函数详解
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (九)c52学习之旅-定时器
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转载)深入super,看Python如何解决钻石继承难题
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • *上位机的定义
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET Micro Framework初体验(二)
  • .Net 高效开发之不可错过的实用工具
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...