简介
路由是微服务架构的组成部分。 例如,/可以映射到您的Web应用程序,/ api/users映射到用户服务,/api/shop映射到商店服务。 Zuul是Netflix基于JVM的路由器和服务器端负载均衡器。
Netflix使用Zuul进行以下操作:
- 认证
- 洞察
- 压力测试
- 金丝雀测试
- 动态路由
- 服务迁移
- 负载脱落
- 安全
- 静态响应处理
- 主动/主动流量管理
Zuul的规则引擎允许任何JVM语言编写规则和过滤器,内置支持Java和Groovy。
配置属性zuul.max.host.connections已被两个新属性zuul.host.maxTotalConnections和zuul.host.maxPerRouteConnections取代,它们分别默认为200和20。
所有路由的默认Hystrix隔离模式(ExecutionIsolationStrategy)是SEMAPHORE。 如果首选此隔离模式,则可以将zuul.ribbonIsolationStrategy更改为THREAD。
Zuul
是通过Eureka
调用的组件并做为Eureka
的Client
端一起使用,所以提前启动Eureka
服务,请看上一篇博客
构建项目
- 跟我们之前构建项目一样, 使用
idea
工具直接创建一个新的SpringBoot
项目,在选择依赖的界面勾选Cloud Discovert
->Zuul
依赖,创建完成后的pom.xml
配置文件内容如下:
<!--Zuul做为Eureka组件的Client端,必须依赖Eureka-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 在主启动类上添加
Zuul
的注解@EnableZuulProxy
,如下所示:
@EnableZuulProxy
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}
- 因为
Zuul
是一个网关,它和nginx
一样只负责转发请求,所以我们得启动需要转发到客户端并注册进Eureka
的服务,这里我默认启动一个服务(服务的ApplicationName
为HelloZuul
),访问地址为:localhost:8080/hello
,访问结果(页面显示):hello world!
- application.properties配置文件内容
server.port=8081
# zuul标识你服务的名字,这里是自己定义,一般方便和规范来讲还是跟自己服务的名字一样
# /hello/** 需要拦截8081所有以hello开头的请求
zuul.routes.zuul.path=/zuul/**
# zuul标识你服务的名字,这里是自己定义,一般方便和规范来讲还是跟自己服务的名字一样
# HelloZuul是转发服务的ApplicationName
zuul.routes.zuul.service-id=HelloZuul
运行测试
浏览器访问地址为:localhost:8081/zuul/hello
会转发到localhost:8080/hello
相当于访问localhost:8080/hello