概述:zuul底层是基于servlet,是由一系列的filter链构成。

1、路由配置

a、单例serverId映射

zuul:
routes:
client-a:
path: /client/**
serviceId: client-a

意思是,以/client/**为端点路径的服务都映射到client-a,这种配置还可以简写成下面的格式,二者效果完全一致:

zuul:
routes:
client-a: /client/**

还有一种更粗暴的方式,就是映射的serverId都不用写,如下:

zuul:
routes:
client-a:

这种配置,zuul会为client-a添加一个默认的映射规则,即:/client/**,相当于上面的第一种配置方式。

b、单例URL映射

这种配置意思就是,网关路由到具体的服务地址,即:将serverId替换成url,如下:

zuul:
routes:
client-a:
path: /client/**
url: http://localhost:7070 #client-a的地址

c、多实例路由

默认情况下zuul会使用eureka中集成的负载均衡功能,如果要使用ribbon的负载均衡,就需要指定serverId,这个操作一定要禁用掉ribbon使用eureka,具体操作如下:

zuul:
routes:
ribbon-route:
path: /ribbon/**
serviceId: ribbon-route ribbon:
eureka:
enabled: false
#禁止Ribbon使用Eureka ribbon-route:
ribbon:
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList #定义获取服务列表方法
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #Ribbon LB Strategy 使用随机负载策略
listOfServers: localhost:7070,localhost:7071 #client services for Ribbon LB 指定服务地址

d、forword本地跳转

假如在网关服务中,需要做一些逻辑处理,可以在配置url时,添加forword选项:

zuul:
routes:
client-a:
path: /client/**
url: forward:/client #跳转到网关服务中@GetMapping("/client")端点

e、相同路径加载

zuul:
routes:
client-b:
path: /client/**
serviceId: client-b
client-a:
path: /client/**

serviceId: client-a

从上面的配置文件,可以看出,配置了两个工程的路由,即:client-a工程,client-b工程,但是二者的path路径是一致的,这种情况下,在加载访问的时候,后者会覆盖前者。

f、路由通配符

规则 说明 示例
/** 匹配任意数量的路径与字符 /client/add, /client/update, client/a, client/add/a, client/update/a/b
/* 匹配任意数的字符 /client/add, /client/update, client/a
/? 匹配单个字符 /client/a

2、功能配置

a、屏蔽服务、屏蔽路径

zuul:
ignored-services: client-b #忽略的服务,防止服务侵入
ignored-patterns: /**/div/** #忽略的接口,屏蔽接口
routes:
client-a: /client/**

加上 ignored-services 与 ignored-patterns 之后,zuul在拉取服务列表的时候,创建映射规则的时候,就会忽略掉client-b服务和/**/div/**接口。

b、过滤掉敏感请求头

正常我们使用HTTP请求服务,在header添加值进行传递,是很正常的一件事,协议的一些基本认证也都在header,比如cookie,或者把登录认证通过后的用户信息base64编码后,放在authorization里面,在系统内这种传递是没有问题的,但是如果系统与外部进行交互,这种可能就会出现异常,毕竟也要防患于未然,这时可以在zuul里边指定敏感头信息,切断它与下游的交互,如下:

zuul:
routes:
client-a:
path: /client/**
sensitiveHeaders: Cookie,Set-Cookie,Authorization
serviceId: client-a

c、重定向

在实际企业级项目中,很多操作都是需要用户登录后,才可以进行操作的,为了防止用户登录成功后,在重定向的时候,将对应的服务地址暴露给用户,可以设置一个头,如下:

zuul:
add-host-header: true #重定向header问题
routes:
client-a: /client/**

d、重试机制

在生产环境中,可能由于各种原因,导致偶然请求失败,可以使用zuul结合ribbon做重试操作,如下:

zuul:
retryable: true #开启重试 ribbon:
MaxAutoRetries: 1 #同一个服务重试的次数(除去首次)
MaxAutoRetriesNextServer: 1 #切换相同服务数量

但是,这个功能要慎用,因为有些接口需要保证幂等性。

Zuul【基础配置】的更多相关文章

  1. StackExchange.Redis帮助类解决方案RedisRepository封装(基础配置)

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫,请注明原文地址.http://www.cnblogs.com/tdws/p/5815735.html 写在前面 这不是教程,分享而已,也欢迎园友们多 ...

  2. Hibernate 基础配置及常用功能(三)

    本章重点讲述Hibernate对象的三种状态以及如何配置二级缓存 有关Hibernate的三种状态如何相互转换网上都能查到,官方文档描述的也比较详细.这里主要是针对几个重点方法做代码演示. 一.状态转 ...

  3. Emacs学习心得之 基础配置

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础配置 1.前言2.基础配置 一.前言 本篇博文记录了Emacs的一 ...

  4. nginx 的基础配置[转]

    nginx 的基础配置 分类: 工具软件2013-11-13 23:26 11人阅读 评论(0) 收藏 举报   目录(?)[-] 管理配置文件 全局配置 虚拟机server配置 location配置 ...

  5. freeRadius 基础配置及测试

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  6. Oracle 10g DataGuard手记之基础配置

    DataGuard为企业数据的高可用性,数据安全以及灾难恢复提供支持,一般由一个primary db与几个物理或逻辑standby db组成一个DataGuard配置. 系统环境 操作系统为windo ...

  7. SpringMVC最基础配置

    SpringMVC和Struts2一样,是前后台的一个粘合剂,struts2用得比较熟悉了,现在来配置一下SpringMVC,看看其最基础配置和基本使用.SpriingMVC不是太难,学习成本不高,现 ...

  8. 使用Java管理Azure(1):基础配置

    Azure针对Java开发人员提供了非常丰富的开发库,开发工具,和相关插件,让你通过Java对Azure进行服务管理和开发,本文第一步先介绍如何快速的配置Java开发工具,主要针对目前比较流行的Ecl ...

  9. Linux网络基础配置

    这是看itercast视频的笔记 Linux网络基础配置 以太网连接 在Linux中,以太网接口被命令为:eth0, eth1等, 0,1代表网卡编号 通过lspci命令可以查看网上硬件信息(如果是u ...

  10. grunt基础配置

    grunt基础配置 要使用grunt来管理项目,一般需要如下的几个步骤: 安装grunt命令行工具grunt-cli 在项目中安装grunt 安装grunt插件 建立并配置Gruntfile.js 安 ...

随机推荐

  1. 深度学习面试题26:GoogLeNet(Inception V2)

    目录 第一层卷积换为分离卷积 一些层的卷积核的个数发生了变化 多个小卷积核代替大卷积核 一些最大值池化换为了平均值池化 完整代码 参考资料 第一层卷积换为分离卷积 net = slim.separab ...

  2. I.MX6 dts 在哪里、怎么编译【转】

    本文转载自:https://blog.csdn.net/wangliang888888/article/details/78349224 一.参考文档: 1. [i.MX] 修改了dts之后,如何重新 ...

  3. (基因功能 & 基因表达调控)研究方案

    做了好久的RNA-seq分析,基因表达也在口头溜了几年了,但似乎老是浮在表面. 对一件事的了解程度决定了你的思维深度,只想做技工就不用想太多,想做大师就一定要刨根问底. 老是说基因表达,那么什么是基因 ...

  4. (二)SpringMVC+mybatis实践

    一.需求 以案例作为驱动 springmvc和mybatis使用一个案例(商品订单管理系统) 功能需求:商品的列表查询 二.环境准备 数据库环境 Java环境 jdk1.8 eclipse sprin ...

  5. Spring Junit4 接口测试

    Junit实现接口类测试 - dfine.sqa - 博客园http://www.cnblogs.com/Automation_software/archive/2011/01/24/1943054. ...

  6. 各类型变量所占字节数,sizeof()

    与操作系统位数和编译器都有关. 可用sizeof()得到,当前主流编译器一般是32位或64位. 类型       16位       32位 64位 char 1            1 1 sho ...

  7. ffmpeg编译错误,提示找不到相应的shared libraries :libavdevice.so.53

    解决方法:需要配置响应的环境变量,以便能找到响应的lib库 vi   /etc/ld.so.conf 加入   /usr/local/lib 执行  sudo  ldconfig

  8. PHP 输出日志到文件 DEMO

    首先需要确保输出文件有权限写入,一般设置权限为 chown -R nginx.nginx 输出的文件路径 如果以上方法还是无效,可以直接将文件设置有777,但是这种方式只能用于测试环境 chmod - ...

  9. npm WARN deprecated fsevents windows

    更新下 使用yarn貌似会帮助跳过这个问题: info fsevents@2.1.2: The platform "win32" is incompatible with this ...

  10. 获取IFC构件的位置数据、方向数据

    获取IFC构件的位置数据.方向数据 std::map<int, shared_ptr<BuildingEntity>> map_buildingEntity = b_model ...