Zuul做为路由网关服务,能够实现负载均衡,将对外服务API接口统一聚合,作身份认证等功能。下面小白经过本身学习时的工程示例,向你们简要的说一下zuul路由网关的url路由功能和负载均衡功能。html
这里搭建一个简单的Zuul,利用一些之前的工程,并从新设定服务名称和调用关系。java
工程列表以下web
序号 | 工程名称 | 端口号 | 服务名称 | 备注 |
1 | zuul-servicecenter | 8761 | 服务注册中心 | |
2 | zuul-service | 5000 | zuul-service | Zuul网关服务 |
3 | zuul-eureka-consumer | 8762 | eureka-client | url路由,测试Zuul网负载均衡能力 |
4 | zuul-eureka-consumer2 | 8768 | eureka-client | url路由,测试Zuul网负载均衡能力 |
5 | zuul-feign-consumer | 8763 | eureka-feign-client | url路由,调用zuul-feign-server |
6 | zuul-feign-provider | 8764 | zuul-feign-server | 被eureka-feign-client调用 |
7 | zuul-ribbon-consumer | 8765 | eureka-ribbon-client | url路由,调用zuul-ribbon-server |
8 | zuul-ribbon-provider | 8766 | zuul-ribbon-server | 被eureka-ribbon-client调用 |
9 | zuul-ribbon-provider2 | 8767 | zuul-ribbon-server | 被eureka-ribbon-client调用 |
上面9个工程,旨在测试路由转发和zuul的负载均衡能力,其中第二个工程zuul-service是第一次新建工程,其它工程均是前面工程更名称、重置端口号和程序名称而来,故这里重点介绍zuul-service工程,其它工程请翻阅以前博文,或留言沟通。spring
zuul-service工程,先看下pom.xml文件api
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
须要的依赖有web、eureka和zuul。其中:咱们须要将网关服务注册到服务注册中心,须要eureka服务;须要开启zuul的路由功能,须要zuul服务;须要将网关服务做为web来进行访问,须要web服务。浏览器
zuul-service工程是一个springboot工程,也有本身的启动类applicationspringboot
package com.zuul.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; /** * 添加@EnableEurekaClient注解,开启EurakaClient功能 * 添加@EnableZuulProxy注解,开启Zuul功能 * @author PC */ @EnableZuulProxy @EnableEurekaClient @SpringBootApplication public class ZuulServiceApplication { public static void main(String[] args) { SpringApplication.run(ZuulServiceApplication.class, args); } }
其中@SpringBootApplication注解标注该类是一个springboot工程启动类;@EnableZuulProxy注解,开启Zuul服务功能;@EnableEurekaClient注解,开启EurekaClient功能,即服务注册功能。app
zuul-service工程的配置文件,是工程的重点,url的路由转发就在这里配置负载均衡
# 服务注册中心地址 eureka.client.service-url.defaultZone=http://localhost:8761/eureka # 设置程序端口号为5000,服务名为zuul-service server.port=5000 spring.application.name=zuul-service # 将以"/hiapi"开头的url路由到eureka-client服务 zuul.routes.hiapi.path=/hiapi/** zuul.routes.hiapi.serviceId=eureka-client # 将以"/ribbonapi"开头的url路由到eureka-ribbon-client服务 zuul.routes.ribbonapi.path=/ribbonapi/** zuul.routes.ribbonapi.serviceId=eureka-ribbon-client # 将以"/feignapi"开头的url路由到eureka-feign-client服务 zuul.routes.feignapi.path=/feignapi/** zuul.routes.feignapi.serviceId=eureka-feign-client
这里,重点介绍的有程序端口号5000,后续为整合工程向外暴露的统一端口号ide
zuul.routes.hiapi.path 将要映射的url路径,zuul.routes.hiapi.serviceId 映射后的服务名称
zuul.routes.hiapi.path=/hiapi/**
zuul.routes.hiapi.serviceId=eureka-client
表示,将/hiapi/** 开头的url路由到eureka-client服务上面
同理,将"/ribbonapi"开头的url路由到eureka-ribbon-client服务,将"/feignapi"开头的url路由到eureka-feign-client服务
如此,即可以将全部url统一请求到网关服务,而后再路由到各自的服务
咱们看到的请求即是 http://localhost:5000/hiapi/** ,http://localhost:5000/ribbonapi/** 和 http://localhost:5000/feignapi/**
按顺序,依次启动1-9工程,待工程都启动完毕后,在注册中心能够看到
eureka-client 有两个服务实例,属于集群环境,zuul-ribbon-service有两个服务实例,属于集群环境。可是看调用关系,eureka-client属于网关直接调用,而zuul-ribbon-service是eureka-ribbon-client调用的,前者会利用网关本身的负载均衡能力,后者是利用ribbon的负载均衡能力。
测试
在浏览器地址栏输入 http://localhost:5000/hiapi/hi,能够看到
端口8762 和 端口8768两个实例均在提供服务,以此证实zuul进行了负载均衡。
在浏览器地址栏输入 http://localhost:5000/ribbonapi/hi?name=lee ,能够看到
端口8767和端口8766的两个实例均在提供服务,不过这里是使用ribbon的负载均衡能力
在浏览器地址栏输入 http://localhost:5000/feignapi/hello,可看到
这里,仅有url的路由功能
以上,即是zuul路由网关服务的一个简单示例,初学,言辞不严谨之处或错误之处欢迎指出,谢谢。