Zuul技术分享

简介: ZUUL是Netflix开源的微服务网关,它可以和Eureka、Ribbon、Hystrix等组件配合使用,Zuul组件的核心是一系列的过滤器,这些过滤器可以完成以下功能:动态路由:动态将请求路由到不同后端集群压力测试:逐渐增加指向集群的流量,以了解性能负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求静态响应处理:边缘位置进行响应,避免转发到内部集群身份认证和安全: 识别每一个资源的验证要求,并拒绝那些不符的请求。Spring Cloud对Zuul进行了整合和增强。Spring Cloud对Zuul进行了整合和增强

1 Zuul简介


ZUUL是Netflix开源的微服务网关,它可以和Eureka、Ribbon、Hystrix等组件配合使用,Zuul组件的核心是一系列的过滤器,这些过滤器可以完成以下功能:


  • 动态路由:动态将请求路由到不同后端集群
  • 压力测试:逐渐增加指向集群的流量,以了解性能
  • 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求
  • 静态响应处理:边缘位置进行响应,避免转发到内部集群
  • 身份认证和安全: 识别每一个资源的验证要求,并拒绝那些不符的请求。Spring Cloud对Zuul进行了整合和增强。Spring Cloud对Zuul进行了整合和增强


2 搭建Zuul网关服务器


创建工程导入依赖


<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>


编写启动类


@SpringBootApplication
@EnableZuulProxy // 开启Zuul的网关功能
public class ZuulServerApplication {
  public static void main(String[] args) {
    SpringApplication.run(ZuulServerApplication.class, args);
  }
}


@EnableZuulProxy : 通过 @EnableZuulProxy 注解开启Zuul网管功能


编写配置


创建配置文件 application.yml ,并添加相应配置


server:
  port: 8080 #服务端口
spring:
  application:
    name: api-gateway #指定服务名


3 Zuul中的路由转发


最直观的理解:“路由”是指根据请求URL,将请求分配到对应的处理程序。在微服务体系中,Zuul负责接收所有的请求。根据不同的URL匹配规则,将不同的请求转发到不同的微服务处理。


zuul:
  routes:
    product-service: # 这里是路由id,随意写
      path: /product-service/** # 这里是映射路径
      url: http://127.0.0.1:9002 # 映射路径对应的实际url地址
      sensitiveHeaders: #默认zuul会屏蔽cookie,cookie不会传到下游服务,这里设置为空则取消默认的黑名单,如果设置了具体的头信息则不会传到下游服务


只需要在application.yml文件中配置路由规则即可:


  • product-service:配置路由id,可以随意取名
  • url:映射路径对应的实际url地址
  • path:配置映射路径,这里将所有请求前缀为/product-service/的请求,转发到http://127.0.0.1:9002处理


配置好Zuul路由之后启动服务,在浏览器中输入 http://localhost:8080/product/service/product/1 ,即可访问到订单微服务。


3.1 面向服务的路由


微服务一般是由几十、上百个服务组成,对于一个URL请求,最终会确认一个服务实例进行处理。如果对每个服务实例手动指定一个唯一访问地址,然后根据URL去手动实现请求匹配,这样做显然就不合理。


Zuul支持与Eureka整合开发,根据ServiceID自动的从注册中心中获取服务地址并转发请求,这样做的好处不仅可以通过单个端点来访问应用的所有服务,而且在添加或移除服务实例的时候不用修改Zuul的路由配置。


(1)添加Eureka客户端依赖


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


(2)开启Eureka客户端发现功能


@SpringBootApplication
@EnableZuulProxy // 开启Zuul的网关功能
@EnableDiscoveryClient
public class ZuulServerApplication {
  public static void main(String[] args) {
    SpringApplication.run(ZuulServerApplication.class, args);
  }
}


(3)添加Eureka配置,获取服务信息


eureka:
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:8761/eureka/
      registry-fetch-interval-seconds: 5 # 获取服务列表的周期:5s
  instance:
    preferIpAddress: true
    ip-address: 127.0.0.1


(4)修改映射配置,通过服务名称获取


因为已经有了Eureka客户端,我们可以从Eureka获取服务的地址信息,因此映射时无需指定IP地址,而是通过服务名称来访问,而且Zuul已经集成了Ribbon的负载均衡功能。


#配置路由规则
zuul:
  routes:
    product-service: # 这里是路由id,随意写
      path: /product-service/** # 这里是映射路径
      serviceId: shop-service-product #配置转发的微服务名称

serviceId: 指定需要转发的微服务实例名称


3.2 简化的路由配置


在刚才的配置中,我们的规则是这样的:


zuul.routes.<route>.path=/xxx/** : 来指定映射路径。 是自定义的路由名

zuul.routes.<route>.serviceId=/product-service :来指定服务名。

而大多数情况下,我们的 路由名称往往和服务名会写成一样的。因此Zuul就提供了一种简化的配置语法: zuul.routes.<serviceId>=<path>

上面的配置可以简化为一条:

zuul:
  routes:
    shop-service-product: /product-service/**


3.3 默认的路由规则


在使用Zuul的过程中,上面讲述的规则已经大大的简化了配置项。但是当服务较多时,配置也是比较繁琐的。因此Zuul就指定了默认的路由规则:


默认情况下,一切服务的映射路径就是服务名本身,例如服务名为: shop-service-product ,则默认的映射路径就是: /shop-serviceproduct/**


相关文章
|
数据可视化 大数据 物联网
【专访蓝景科技】5G+实时云渲染赋能数字孪生,共建元宇宙
而同时,近年来,数字孪生技术被认为是具有战略性、颠覆性、先导性的技术,其应用场景已深入到城市治理、智慧园区、工业制造、医疗健康等新型智慧城市建设的方方面面,随着“探索建设数字孪生城市”被写入“十四五”规划纲要中,数字孪生技术已成为是构建新型智慧城市的重要技术手段。元宇宙和数字孪生都是信息化发展到一定程度的必然结果,二者之间既有不同之处,又深度融合。
【专访蓝景科技】5G+实时云渲染赋能数字孪生,共建元宇宙
|
城市大脑 运维 监控
阿里速度! SRE团队全力保障多地健康码顺利上线
如何精准防控,统筹疫情期间的各项工作,有序稳健恢复经济社会秩序,成为当务之急。对此,阿里巴巴快速反应,除各种物资支持、政策响应外,还配合多地政府开发健康码,充分运用大数据手段助力疫情防控和复工复产,实现数字化防疫,让政府相关人员更快速、更清晰、更精准地进行防控管理决策。
阿里速度! SRE团队全力保障多地健康码顺利上线
|
云安全 安全 小程序
无影-阿里云第一款云电脑,它拥有超越PC的完美体验
无影是一款面向数字经济时代的生产力工具,基于流式传输服务和容器化架构,可实现随时随地云上办公、海量算力触手可得、海量应用一网打尽,依托阿里云打造云管端一体化安全防护体系,全面保障企业业务和数据安全,拥有超越PC的便捷、流畅、安全、高效体验。
27507 0
无影-阿里云第一款云电脑,它拥有超越PC的完美体验
|
存储 SQL NoSQL
社交软件红包技术解密(十二):解密抖音春节红包背后的技术设计与实践
本文将要分享的是春节期间海量红包社交活动为抖音所带来的各种技术挑战,以及抖音技术团队是如何在实践中一一解决这些问题的。
670 0
社交软件红包技术解密(十二):解密抖音春节红包背后的技术设计与实践
|
弹性计算 负载均衡 定位技术
阿里云服务器地域选择攻略(地域选择后不可更改)
阿里云服务器地域怎么选?云服务器地域选错了可以更改吗?阿里云服务器地域哪个更快?
阿里云服务器地域选择攻略(地域选择后不可更改)
|
域名解析 弹性计算 负载均衡
阿里云SLB网络型负载均衡NLB单实例可以达到1亿并发连
阿里云负载均衡SLB网络型负载均衡NLB是阿里云推出的新一代四层负载均衡,支持超高性能和自动弹性能力,单实例可以达到1亿并发连接,帮您轻松应对高并发业务
1471 0
阿里云SLB网络型负载均衡NLB单实例可以达到1亿并发连
|
SQL 监控 物联网
阿里云物联网平台数字孪生功能Quick Start
数字孪生是物理世界的数字化呈现,可通过构建孪生体来描述设备、流程、系统、场景等业务模型,对物理世界实体信息进行实时采集、运算分析、监控统计等,助您更精准地掌握业务模型动态变化,进而实现对实际生产过程的提效和降本目的。本文从产品创建开始,一步一步演示如何使用物联网平台的数字孪生功能。
16581 0
阿里云物联网平台数字孪生功能Quick Start
|
弹性计算 Kubernetes 监控
CloudIaC 漂移检测功能详解
云霁CloudIaC 是一款开源的基于terraform 的低代码平台管理库,本篇文章主要介绍其中关于配置漂移的处理方式。
2132 1
【DSW Gallery】PAI-DSW计费方式介绍
PAI-DSW产品针对用户的不同场景提供灵活的计费方式,目前支持个人版按量付费和预付费专有资源组包年包月两种计费方式,本文详细介绍这两种计费方式,用户可以根据业务的特点进行选择。
【DSW Gallery】PAI-DSW计费方式介绍
|
Linux Shell
3.21 Linux PATH环境变量及作用(初学者必读)
在讲解 PATH 环境变量之前,首先介绍一下 which 命令,它用于查找某个命令所在的绝对路径。例如:
508 0
3.21 Linux PATH环境变量及作用(初学者必读)