博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringCloud(六):Zuul的多个使用场景
阅读量:6153 次
发布时间:2019-06-21

本文共 3398 字,大约阅读时间需要 11 分钟。

Zuul Http客户端

  • Zuul使用的默认HTTP客户端现在由Apache HTTP Client支持,而不是已经不推荐使用的Ribbon RestClient
  • 要使用RestClientokhttp3.0kHttpClient,请分别设置
    ribbon.restclient.enabled = true//或ribbon.okhttp.enabled = true复制代码

如果要自定义Apache HTTP客户端或OK HTTP客户端,请提供ClosableHttpClient或OkHttpClient类型的bean。

Cookies and Sensitive Headers

配置文件application.yml中设置

zuul:  routes:    users:      path: /myusers/**      sensitiveHeaders: Cookie,Set-Cookie,Authorization      url: https://downstream复制代码

这里sensitiveHeaders是默认值,所以当你希望它不同时,才需进行设置。 这是Spring Cloud Netflix 1.1中的新功能(在1.0中,用户无法控制标题,并且所有Cookie都在两个方向上流动)。

sensitiveHeaders是黑名单,且默认不为空。 因此,要使Zuul发送所有标头(忽略的标头除外),您必须将其明确设置为空列表。 如果要将cookie或授权标头传递到后端,则必须这样做。 以下示例显示了如何使用sensitiveHeaders:

zuul:  routes:    users:      path: /myusers/**      sensitiveHeaders:      url: https://downstream复制代码

您还可以通过设置sensitiveHeaders来设置zuul.sensitiveHeaders。 如果在路由上设置了sensitiveHeaders,它将覆盖全局sensitiveHeaders设置。

Ignored Headers

  • 常规理解:
    zuul.ignoreHeaders属性可用于丢弃一些标题。
    例如,设置zuul.ignoredHeaders = Header1,Header2; 那么Header1和Header2将不会传播到任何其他服务。
    默认情况下,zuul.ignoredHeaders=是空的。但如果Spring Securuty在classpath中。 它的值在是:
Pragma,Cache-Control,X-Frame-Options,X-Content-Type-Options,X-XSS-Protextion,Expires复制代码

zuul.ignoreSecurityHeaders的默认值为true。但是当我想要标头值的值时 从下游服务我们需要设置为false。

  • 通俗来讲就是:
    route-sensitive外,您还可以将与下游服务交互期间应丢弃的值(请求和响应)设置名为zuul.ignoredHeaders的全局值。 默认情况下,如果Spring Security不在类路径中,则它们为空。 否则,它们被初始化为一组众所周知的“安全”头文件(例如,涉及缓存),如Spring Security所指定的那样。 在这种情况下的假设是下游服务也可能添加这些头,但我们想从代理中获得这些值。 如果要在Spring Security位于类路径时不丢弃这些众所周知的security headers,可以将zuul.ignoreSecurityHeaders设置为false。 如果您在Spring Security中禁用了HTTP安全响应标头并希望下游服务提供的值,那么这样做会非常有用。

Routes Endpoint

  • 使用routes 端点的前提:
    • Zuul Server需要有Spring Boot Actuator的依赖,否则访问/routes 端点将会返回404;
    • 设置management.security.enabled = false,否则将会返回401;也可添加Spring Security的依赖,这样可通过账号、密码访问routes 端点。

Strangulation Patterns and Local Forwards

标题: 扼杀模式和本地转发

迁移现有应用程序或API时的一种常见模式是“扼杀”旧端点,慢慢用不同的实现替换它们。 Zuul代理是一个有用的工具,因为您可以使用它来处理来自旧端点的客户端的所有流量,但将一些请求重定向到新的端点。

以下示例显示“strangle”方案的配置详细信息:

  • application.yml配置示例:
zuul:  routes:    first:      path: /first/**      url: http://first.example.com    second:      path: /second/**      # forward的是本地转发      url: forward:/second    third:      path: /third/**      url: forward:/3rd    legacy:      path: /**      url: http://legacy.example.com复制代码

==[注意]== 忽略的模式不会被完全忽略,它们只是不由代理处理(因此它们也可以在本地有效转发)。

Uploading Files through Zuul

标题: 通过zuul上传文件

  • 如果使用@EnableZuulProxy注解,可以用代理路径上传文件,只要文件很小,它就可以正常工作。
curl -F "file=@d:/tmp.txt" localhost:8050/uploadcurl -F "file=@d:/tmp.txt" localhost:8050/microservice-file-upload/upload复制代码
  • 而对于大型文件,需要使用一个替代路径绕过/zuul/*中的Spring DispatcherServlet; 即使用/zuul/*的方式绕过Spring DispatcherServlet(以避免多部分处理)
    curl -F "file=@d:/tmp.txt" localhost:8050/zuul/microservice-file-upload/upload复制代码
    • application.yml配置中需要加如下语句,主要是为了避免文件过大和上传超时:
    # 经过zuul的请求都会使用hystrix进行包裹# hystrix的超时时间hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000# zuul使用了ribbon做负载均衡ribbon:  ConnectTimeout: 3000  ReadTimeout: 60000复制代码
    ==[注]== 超时问题解决后,也可能存在堆内存太小,导致上传失败,可以堆tomcat进行如下设置:

Disable Zuul Filters

标题: 禁用zuul过滤器

SpringCloud在代理和服务器模式下都默认启用了许多ZuulFilter bean。

有关可以启用的过滤器列表,请参阅。

如果要禁用一个过滤器,请参照如下设置zuul.<SimpleClassName>.<filterType>.disable=true;按照惯例,过滤器后的包是Zuul过滤器类型。

例如,要禁用org.springframework.cloud.netflix.zuul.filters.post.SendResponseFilter需设置zuul.SendResponseFilter.post.disable = true

转载于:https://juejin.im/post/5cfdc4525188256aa76bbcbe

你可能感兴趣的文章
git 恢复被删除的文件
查看>>
[译]HTML&CSS Lesson3: 了解CSS
查看>>
Spring Boot 视频
查看>>
slor6.6 在linux下的安装以及启动失败解决办法
查看>>
简单的BBS论坛 数据库设计
查看>>
vue2.0自定义指令,用touch事件替换scroll事件
查看>>
windows系统下在dos命令行kill掉被占用的pid
查看>>
使用 flutter 启动系统桌面
查看>>
OpenGL 金字塔
查看>>
RACSignal分析
查看>>
[译]使用MVI打造响应式APP(三):状态折叠器
查看>>
一个简单易用的树插件,支持异步加载子节点
查看>>
来掘金的第一篇博客
查看>>
从头开始复习js之这可能是最全的字符串用法
查看>>
澳洲中本聪Craig Wright涉嫌论文抄袭?
查看>>
解压缩
查看>>
ubuntu 背光键盘 不亮的解决方法
查看>>
JBoss 系列二:使用Apache httpd(mod_cluster)和JBoss构架高可用集群环境
查看>>
GET和POST两种基本请求方法的区别
查看>>
go httpserver
查看>>