Zuul 网关路由

路由是微服务架构中不可或缺的一部分,例如:/api/user映射到user服务,/api/shop映射到shop服务。 Zuul是一个基于JVM的路由和服务端的负载均衡器。Zuul的规则引擎是用JVM语言写的,支持Java和Groovy。

一、如何使用Zuul

首先我们引入zuul的jar包,由于zuul要从注册中心寻找服务,所以也要引入eureka-client的jar包。

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
</dependencies>

  

并且在启动类上加上注解@EnableZuulProxy

@SpringBootApplication
@EnableZuulProxy
public class Application { public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}

  

接下来,我们看看如何配置我们的路由,在yml中配置如下:

zuul:
routes:
service-order: /myorders/**

  

所有/myorders的请求都会转发到service-order服务,例如:/myorders/order/detail会转发到/order/detail。 zuul.routes是一个map,上面这种方式是简便的写法,key对应服务id,value对应访问路径。 为了获得细粒度的控制,配置应按照如下的方式写:

zuul:
routes:
service-order:
path: /myorders/**
serviceId: service-order

  

routes的key可以任意,只要保证唯一即可,routes的value中,path对应访问路径,serviceId对应服务id。

为了防止服务被自动的添加,我们增加如下配置:

zuul:
ignoredServices: '*'
routes:
service-order:
path: /myorders/**
serviceId: service-order

  

上面配置的意思是除了service-order服务,其他服务都忽略掉。

除了映射服务,我们也可以映射url,如下:

zuul:
ignoredServices: '*'
routes:
service-order:
path: /myorders/**
url: http://order.example.com/order_service

  

如果我们在转发时,不想忽略前缀,可以设置zuul.stripPrefix=false

我们启动之前的eureka注册中心、service-order-1、service-order-2和这次的zuul服务,我们访问 http://localhost:8080/myorders/order/detail,并不断刷新,返回结果如下:

{"id":123123,"totalPrice":87.98,"orderStatus":"未支付"}
{"id":123123,"totalPrice":87.98,"orderStatus":"已付款"}

  

说明zuul已经将请求转发到了service-order服务,并实现了负载均衡。

二、Cookie和敏感头部信息的转发

你可以在同一个系统的服务之间共享header信息,但不想将敏感的header信息转发到外部系统,你可以在routes中配置忽略的header信息。 Cookie是一个重要的角色,因为它是被认为敏感的。在做转发时,我们可以设置不转发。 其中,Cookie,Set-Cookie,Authorization是默认不转发的。如果后台服务需要,我们可以设置一个空的List

zuul:
ignoredServices: '*'
routes:
service-order:
path: /myorders/**
serviceId: service-order
sensitiveHeaders:

  

sensitiveHeaders放在zuul下,是通用的配置,对所有的转发都生效。也可以放在routes的每一个entry下,只对当前的转发规则有效。 我们改造一下service-order,将cookie打印出来。

@RequestMapping("detail")
public Order getOrderInfo(HttpServletRequest request, HttpServletResponse response){
System.out.println("cookie : "+request.getCookies());
if (request.getCookies()!=null&&request.getCookies().length>0){
for (Cookie cookie : request.getCookies()) {
System.out.println(cookie.getName()+":"+cookie.getValue());
}
} Cookie cookie = new Cookie("zuul","test");
response.addCookie(cookie);
return order;
}

  

重启两个service-order,访问zuul,后台打印结果如下:

cookie : [Ljavax.servlet.http.Cookie;@5ddaf631
zuul:test
UM_distinctid:1635c7498fc835-0e31e368c7058d-f373567-fa000-1635c7498fd31c
Hm_lvt_843ed5a4bd8ee47602fc045103b88cd7:1526264538
CNZZDATA1256538031:1367993951-1526263181-null%7C1526280080
Idea-12589d:10a72288-7f81-410b-9b97-b5fb28153a0d
JSESSIONID:6D27CF78C556DD7DFFD5422E71951BAA

  

说明cookie转发成功,我们将sensitiveHeaders注释掉,重启zuul服务并访问 后台结果如下:

cookie : null

  

说明cookie并没有转发。

项目示例:https://github.com/liubo-tech/spring-cloud-eureka

Zuul 网关路由的更多相关文章

  1. zuul网关路由作用

    为了方便客户端调用微服务,所以设计出了网关.在微服务实例地址发生改变的情况下,客户端调用服务要能够不受影响. 网关可以完成的功能:路由,反向代理,日志记录,权限控制,限流 在本例子中 Eureka  ...

  2. Spring Cloud(Dalston.SR5)--Zuul 网关-路由配置

    Spring Cloud 在 Zuul 的 routing 阶段实现了几个过滤器,这些过滤器决定如何进行路由工作. 简单路由(SimpleHostRoutingFilter) 该过滤器运行后,会将 H ...

  3. Spring Cloud之Zuul网关路由

    前端请求先通过nginx走到zuul网关服务,zuul负责路由转发.请求过滤等网关接入层的功能,默认和ribbon整合实现了负载均衡 比如说你有20个服务,暴露出去,你的调用方,如果要跟20个服务打交 ...

  4. SpringCloud2.0 Zuul 网关路由 基础教程(十)

    1.启动基础工程 1.1.启动[服务注册中心],工程名称:springcloud-eureka-server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) ...

  5. Spring Cloud之搭建动态Zuul网关路由转发

    传统方式将路由规则配置在配置文件中,如果路由规则发生了改变,需要重启服务器.这时候我们结合上节课内容整合SpringCloud Config分布式配置中心,实现动态路由规则. 将yml的内容粘贴到码云 ...

  6. SpringCloud之Zuul网关原理及其配置

    Zuul是spring cloud中的微服务网关.网关: 是一个网络整体系统中的前置门户入口.请求首先通过网关,进行路径的路由,定位到具体的服务节点上. Zuul是一个微服务网关,首先是一个微服务.也 ...

  7. 非常全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了!

    Zuul是spring cloud中的微服务网关.网关:是一个网络整体系统中的前置门户入口.请求首先通过网关,进行路径的路由,定位到具体的服务节点上. Zuul是一个微服务网关,首先是一个微服务.也是 ...

  8. 微服务深入浅出(7)-- 网关路由Zuul

    Zuul用于构建边界服务,致力于动态路由,过滤,监控,弹性伸缩和安全等方向. 1.Zuul+Ribbon+Eureka结合,可以实现智能路由和负载均衡 2.网关将所有服务的API接口统一聚合统一暴露 ...

  9. Spring Cloud(十):服务网关 Zuul(路由)【Finchley 版】

    Spring Cloud(十):服务网关 Zuul(路由)[Finchley 版]  发表于 2018-04-23 |  更新于 2018-05-09 |  通过之前几篇 Spring Cloud 中 ...

随机推荐

  1. Android实现夜间模式

    如今非常多App都有夜间模式,特别是阅读类的App.夜间模式如今已经是阅读类App的标配了,其实,日间模式与夜间模式就是给App定义并应用两套不同颜色的主题,用户能够自己主动或者手动的开启,今天用An ...

  2. MyCat(一) - 初体验

    前提: 1.安装JDK 2.安装MySQL 3.搭建了MySQL主从 1.下载MyCat,官网:http://www.mycat.io/ wget http://dl.mycat.io/1.6-REL ...

  3. google的Python风格规范

    Python风格规范   分号 Tip 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 行长度 Tip 每行不超过80个字符 例外: 长的导入模块语句 注释里的URL 不要使用反斜杠连接行. ...

  4. 133、 Android 自动化测试(转载)

    Android 自动化测试--要点概括http://blog.csdn.net/vshuang/article/details/40595233 A/B测试与灰度发布http://blog.csdn. ...

  5. Nestjs 上传文件

    Docs: https://docs.nestjs.com/techniques/file-upload 上传单文件 @Post('upload') @UseInterceptors(FileInte ...

  6. oracle ORA-01991错误--重建密码文件问题

    问题现象描述: 统计服务器测试没问题,刚好上次配置系统的时候有点问题,故重装一次,配置好安全策略(最近在研究如何新配置一台服务器的时候,第一时间配置好相关的安全设置,有空再写下来). 为了省事,直接冷 ...

  7. 更改ORACLE归档路径及归档模式

    更改ORACLE归档路径及归档模式   在ORACLE10g和11g版本,ORACLE默认的日志归档路径为闪回恢复区($ORACLE_BASE/flash_recovery_area).对于这个路径, ...

  8. Ice_cream's world I(并查集成环)

    Problem Description ice_cream's world is a rich country, it has many fertile lands. Today, the queen ...

  9. VS2013 Ctrl+Shift+F 没反应

    快捷键设定与搜狗输入法中文繁体切换冲突,搜狗输入法管理设置中关掉就好.

  10. ruby离线安装整理

    参考官方文档: https://rvm.io/rvm/offline 参考博客:https://blog.csdn.net/topswim/article/details/79260369 一.前提  ...