Zuul路由网关简介及基本使用
Zuul作为微服务系统的网关组件,是从设备和网站到Netflix流应用程序后端的所有请求的前门。作为边缘服务应用程序,Zuul旨在实现动态路由,监控,弹性和安全性。
不用zuul,让客户端直接与各个微服务通讯,会有以下的问题:
1.客户端会多次请求不同的微服务,增加了客户端的复杂性。
2.存在跨域请求,在一定场景下处理相对复杂。
3.认证复杂,每个服务都需要独立认证。
4.难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通讯,那么重构将会很难实施。
5.某些微服务可能使用了防火墙/浏览器不友好的协议,直接访问会有一定困难。
Zuul能干什么?
zuul主要实现的功能就是API Gateway(api网关)的功能
作用:
1.易于监控。可在微服务网关收集监控数据并将其推送到外部系统进行分析。使用网关时客户端只与网关交互,降低客户端的调用逻辑的复杂度,同时网关也可以实现认证逻辑简化内部服务的之间相互调用的复杂度。
2.对不同客户端的支持及数据的聚合,如一个网站有web端,手机端,页面所需的数据有同有异,可以将数据整合或者裁剪,减少客户端的请求次数,比如BFF架构。
3.可以更好的对项目的微服务封装,可将项目的微服务统一封装在一个内网环境中,减少了客户端与各个微服务之间的交互次数。只通过网关提供服务,同时网关也可以对安全,认证,监控,防御单独强化。
4.易于认证。可在微服务网关上进行认证。然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
架构图
集成Spring Cloud Zuul
我们新建一个module microservice-zuul-3001
这里我们的zuul也注册到eureka服务里,端口3001;
我们修改下Hosts,专门为zuul搞个本地域名映射
hosts文件 加下:
127.0.0.1 zuul.chen.com
导入pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>testSpringcloud</artifactId>
<groupId>com.javaxl</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>microservice-zuul-3001</artifactId>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.javaxl</groupId>
<artifactId>microservice-common</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web<