搭建Zuul路由网关服务

        Zuul做为路由网关服务,能够实现负载均衡,将对外服务API接口统一聚合,作身份认证等功能。下面小白经过本身学习时的工程示例,向你们简要的说一下zuul路由网关的url路由功能和负载均衡功能。html

 

这里搭建一个简单的Zuul,利用一些之前的工程,并从新设定服务名称和调用关系。java

工程列表以下web

Zuul服务系统列表
序号 工程名称 端口号 服务名称 备注
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路由网关服务的一个简单示例,初学,言辞不严谨之处或错误之处欢迎指出,谢谢。