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. You can't specify target table 'ship_product_cat' for update in FROM clause

    有时候我们在编辑update时需要select作为条件,在mysql中有时会出现这样的错误:You can't specify target table for update in FROM clau ...

  2. Mybatis sql映射文件浅析 Mybatis简介(三) 简介

    Mybatis sql映射文件浅析 Mybatis简介(三)   简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML ...

  3. The processing instruction target matching &quot;[xX][mM][lL]&quot; is not allowed.

    现象: ERROR   : The processing instruction target matching "[xX][mM][lL]" is not allowed.  异 ...

  4. 在windows上搭建SSH服务踩过的坑

    前两天安装了windows操作系统,想在windows上做内网穿透,所以就想在windows下启用ssh服务,今天就来讲一下我在搭建ssh服务中遇到的坑. 我显示在Mac下搭建了ssh服务,并且测试通 ...

  5. 114、drawable和mipmap 目录下图片的区别

    android 在 API level 17 加入了 mipmap 技术,对 bitmap 图片的渲染支持 mipmap 技术,来提高渲染的速度和质量.mipmap 是一种很早就有的技术了,翻译过来就 ...

  6. 【腾讯云的1001种玩法】几种在腾讯云建立WordPress的方法(Linux)(二)

    版权声明:本文由张宁原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/126547001488207964 来源:腾云阁 ht ...

  7. 离屏Canvas — 使用Web Worker提高你的Canvas运行速度

    离屏Canvas — 使用Web Worker提高你的Canvas运行速度 原文链接: developers.google.com 现在因为有了离屏Canvas,你可以不用在你的主线程中绘制图像了! ...

  8. Hibernate HQL一对多 在一方的查询

    首先说一句:是版本的问题! 在多对多或者多对一,从一中查找多中查询某些语句时容易出现 我写的hql为: from Department as d where d.employees.name='Tom ...

  9. I - All X

    F(x,m) 代表一个全是由数字x组成的m位数字.请计算,以下式子是否成立: F(x,m) mod k ≡ c Input 第一行一个整数T,表示T组数据. 每组测试数据占一行,包含四个数字x,m,k ...

  10. common lisp的几个基本概念

    S-表达式 quote nil 与 () cons car cdr 真假 predicate 谓词与 t 与 nil null 函数 与 not 函数 if then else and 与 or de ...