青柠开车Spring Cloud(五) —— spring cloud的窗口zuul(路由和过滤器)
什么是zuul
zuul
在之前我举得例子中,担任的是警察的角色。准确的说zuul
可以是一个窗口,任何访问业务模块的请求都经过zuul
进行转发。
官方定义:Zuul是Netflix开源的微服务网关,他可以和Eureka,Ribbon,Hystrix等组件配合使用。Zuul组件的核心是一系列的过滤器,这些过滤器可以完成以下功能:
- 身份认证和安全: 识别每一个资源的验证要求,并拒绝那些不符的请求
- 审查与监控:
- 动态路由:动态将请求路由到不同后端集群
- 压力测试:逐渐增加指向集群的流量,以了解性能
- 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求
- 静态响应处理:边缘位置进行响应,避免转发到内部集群
- 多区域弹性:跨域AWS Region进行请求路由,旨在实现ELB(ElasticLoad Balancing)使用多样化
快速入门
在spring-cloud
创建spring-cloud-zuul
模块项目,如下图:

zuul
项目基本配置
- 在
pom.xml
引入zuul的jar包
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
</dependencies>
application.properties
配置
server.port= 8561
# 服务名称
spring.application.name=gateway_zuul
# 访问路径
server.servlet.context-path=/zuul
# spring-web 项目的路由配置
zuul.routes.web.path=/**
zuul.routes.web.url=http://127.0.0.1:8661/
zuul.routes.web.sensitiveHeaders="*"
ZuulApplication.java
中加入@EnableZuulProxy
注解
/**
* @author : R&M www.rmworking.com/blog
* 2018/9/16 22:37
* spring-cloud
* org.qnloft.zuul
*/
@EnableZuulProxy
@SpringBootApplication
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}
现在尝试访问http://127.0.0.1/zuul/index
,会出现HelloWorldController中返回的结果。
将zuul
加入eureka-server
中,实现高可用
- 在
pon.xml
中加入eureka-client
的jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 在
application.properties
中加入eureka-server
的地址
eureka.client.serviceUrl.defaultZone= http://localhost:8761/eureka/
ZuulApplication.java
中加入@EnableEurekaClient
注解