概述: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. ZR#1004

    ZR#1004 解法: 对于 $ (x^2 + y)^2 \equiv (x^2 - y)^2 + 1 \pmod p $ 化简并整理得 $ 4x^2y \equiv 1 \pmod p $ 即 $ ...

  2. 三大框架 之 Spring-Aop

    目录 AOP AOP简介 开发存在 的问题 JDK动态代理 cglib动态代理 Spring的AOP简介 AOP相关术语 Joinpoint:连接点 Pointcut:切入点 Advice:通知 In ...

  3. Java 面向对象(十五)

    Lambda表达式 1. 函数式编程思想概述 在数学中,函数就是有输入量.输出量的一套计算方案,也就是"拿什么东西做什么事情".相对而言,面向对象过分强调"必须通过对象的 ...

  4. 在JAVA中怎么比较Double类型数据的大小

    在JAVA中怎么比较Double类型数据的大小  我来答  浏览 33044 次   3个回答 #活动# “双11”答题活动,奖励加码!最高得2000元购物礼金! pollutedair 2015- ...

  5. JWT签名算法

    JWT签名算法 JWT签名算法中,一般有两个选择,一个采用HS256,另外一个就是采用RS256. 签名实际上是一个加密的过程,生成一段标识(也是JWT的一部分)作为接收方验证信息是否被篡改的依据. ...

  6. DNGuard HVM Unpacker(3.71 trial support and x64 fixed)

    DNGuard HVM Unpacker(3.71 trial support and x64 fixed) Gr8 news. Finally got the x64 crash fixed. DN ...

  7. VS2008下LibTomCrypt 1.17的编译和使用《转》

    文章出处:http://blog.csdn.net/delphiwcdj/article/details/6298820 具体步骤如下: (1) 下载tomcrypt tomcrypt 1.17 VS ...

  8. 树莓派连接18b20测温度

    树莓派系统包含了18b20的驱动(1-wire interface),我们只需要将其开启即可.有两种开启方式: 方式一:输入raspi-config命令,然后在interfacing options ...

  9. HTMLPage测试js通过ajax调用

    HTMLPage测试js通过ajax调用接口 <!DOCTYPE html> <html lang="en" xmlns="http://www.w3. ...

  10. 【idea】断点调试时查看所有变量和静态变量

    转载至博客:https://blog.csdn.net/qq32933432/article/details/86672341 缘起 笔者在进行HashMap原理探索的时候需要在IntelliJ ID ...