网站首页 > 技术文章 正文
Zuul简介
ZUUL是Netflix开源的微服务网关,它可以和Eureka、Ribbon、Hystrix等组件配合使用,Zuul组件的 核心是一系列的过滤器,这些过滤器可以完成以下功能:
- 动态路由:动态将请求路由到不同后端集群
- 压力测试:逐渐增加指向集群的流量,以了解性能
- 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求
- 静态响应处理:边缘位置进行响应,避免转发到内部集群
- 身份认证和安全: 识别每一个资源的验证要求,并拒绝那些不符的请求。Spring Cloud对Zuul进行 了整合和增强。
Spring Cloud对Zuul进行了整合和增强
搭建Zuul网关服务器
(1)创建工程导入依赖
在IDEA中创建ZUUL网关工程 shop_zuul_server ,并添加响应依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
(2)编写启动类
创建启动类 ZuulServerApplication
@SpringBootApplication
@EnableZuulProxy // 开启Zuul的网关功能
public class ZuulServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulServerApplication.class, args);
}
}
@EnableZuulProxy : 通过 @EnableZuulProxy 注解开启Zuul网管功能
(3)编写配置
创建配置文件 application.yml ,并添加相应配置
server:
port: 8080 #服务端口
spring:
application:
name: api-gateway #指定服务名
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/productservice/product/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: 指定需要转发的微服务实例名称
依次启动Eureka,商品微服务,API网关,在浏览器上通过访问 http://localhost:8080/productservice/product/1 查看最终效果。
简化的路由配置
在刚才的配置中,我们的规则是这样的:
zuul.routes..path=/xxx/** : 来指定映射路径。 是自定义的路由名
zuul.routes..serviceId=/product-service :来指定服务名。:
而大多数情况下,我们的 路由名称往往和服务名会写成一样的。因此Zuul就提供了一种简化的 配置语法: zuul.routes.<serviceId> = <path>
上面的配置可以简化为一条:
zuul:
routes:
shop-service-product: /product-service/**
默认的路由规则
在使用Zuul的过程中,上面讲述的规则已经大大的简化了配置项。但是当服务较多时,配置也是比较繁 琐的。因此Zuul就指定了默认的路由规则:
默认情况下,一切服务的映射路径就是服务名本身。
例如服务名为: shop-service-product ,则默认的映射路径就是: /shop-serviceproduct/**
Zuul加入后的架构
- 上一篇: Zuul微服务网关详解(图文全面总结)
- 下一篇: spring cloud zuul 原理简介及使用
猜你喜欢
- 2024-11-22 SpringCloud——zuul权限校验、接口限流
- 2024-11-22 Spring Cloud源码分析(四)Zuul:核心过滤器
- 2024-11-22 Spring Cloud Zuul 学习+实践
- 2024-11-22 SpringCloud网关及Zuul项目搭建,你确定你了解?
- 2024-11-22 springcloud-zuul微服务网关高可用的场景概述
- 2024-11-22 24岁秃头程序员带你深入学习微服务网关Zuul源码解析,不来别后悔
- 2024-11-22 Zuul 路由网关
- 2024-11-22 SpringCloud微服务架构篇6:Zuul路由规则
- 2024-11-22 Spring Cloud Zuul的学习
- 2024-11-22 springcloud(十一):服务网关Zuul高级篇
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)