Zuul路由网关
Zuul路由网关是什么?
Zuul包含了对请求的<mark>路由</mark>和<mark>过滤</mark>两个最主要的功能:
其中路由功能读者将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器的功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础,Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他的微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
<mark>注意:Zuul服务器最终还是会注册进Eureka</mark>
<mark>Zuul三大功能(提供)</mark>:代理+路由+过滤
Zuul主要用来做路由和过滤。
具体参考官方资料
开发流程:
zuul使用:
- 在父工程下新建module模块,
- 在pom文件中引入以下依赖:
<!-- 引入Zuul路由网关依赖需要和starter-eureka依赖一起使用 ===start -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<!-- 引入Zuul路由网关依赖需要和starter-eureka依赖一起使用 ==end -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
整体的pom文件配置:
<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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.lyj.springcloud</groupId>
<artifactId>microservicecloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>microservicecloud-zuul-gateway-9527</artifactId>
<dependencies>
<!-- 引入Zuul路由网关依赖需要和starter-eureka依赖一起使用 ===start -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<!-- 引入Zuul路由网关依赖需要和starter-eureka依赖一起使用 ==end -->
<!-- 引入服务熔断Hystrix依赖===start -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<!-- 引入服务熔断Hystrix依赖===end -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- 将微服务注册provider到Eureka注册中心中 ==end -->
<!-- 引入监控信息完善的依赖==start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 引入监控信息完善的依赖==end -->
<!-- 日常标配 ===start -->
<!-- 引入自定义的api通用包,可以使用Dept部门的Entity -->
<dependency>
<groupId>com.lyj.springcloud</groupId>
<artifactId>microservicecloud-api</artifactId>
<!-- 下面指定的版本是活的,相当于,api通用包随意怎么变,这里都会自动更新,不影响 -->
<version>${project.version}</version>
</dependency>
<!-- 将微服务注册provider到Eureka注册中心中 ==start -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- 引入热部署,修改后立即生效===start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!-- 引入热部署,修改后立即自动发布和构建生效===end -->
<!-- 日常标配 ===end -->
</dependencies>
</project>
- 创建application.yml 文件,配置内容:
server:
port: 9527
spring:
application:
name: microservicecloud-zuul-9527-gatway
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
instance-id: gateway-9527.com
prefer-ip-address: true
info:
app.name: lyj-microcloud
company.name: www.lyj.com
build.artifactId: $project.artifactId$
build.version: $project.version$
- 修改c盘中的hosts文件,添加以下映射:
127.0.0.1 myzuul.com
打开控制台输入:“ipconfig/flushdns”
- 启动测试:依次启动7001、7002、7003eureka工程、和8001服务提供者工程,最后再启动路由9527工程。
- 测试结果:
<mark>zuul的工作原理</mark>:如果启动zuul路由功能,所有的请求服务都是通过zuul路由网关,如面的“myzuul.com:9527”映射到不启用路由的“localhost:8001”上,后面的“dept/get/1”映射到不启动路由的“dept/get/1”上,启用路由后,因为zuul把自己也注册到eureka注册中心中,当启用路由功能,请求先到zuul这,然后zuul去eureka注册中心去查找请求的服务IP地址,即“microservicecloud-dept”,如果有,则可以正确访问启用路由后的访问路径:http://myzuul.com:9527/microservicecloud-dept/dept/get/1,如果zuul在eureka中没有找到请求的服务IP地址,则不会获取到注册中心的服务。