Zuul是Netflix开源的微服务网关,用于提供动态路由,监控,弹性,安全等边缘服务.可以和Eureka、Ribbon、Hystrix等组件配合使用; Zuul组件的核心是一系列的过滤器;这些过滤器可以完成以下功能:
- 身份认证和安全: 识别每一个资源的验证要求,并拒绝那些不符的请求
- 审查与监控:
- 动态路由: 动态将请求路由到不同后端集群.
- 压力测试:逐渐增加指向集群的流量,以了解性能
- 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求.
- 静态响应处理:边缘位置进行响应,避免转发到内部集群.
- 多区域弹性:跨域AWS Region进行请求路由,旨在实现ELB(ElasticLoad Balancing)使用多样化.
Spring Cloud对Zuul进行了整合和增强; 目前Zuul使用的默认是Apache的HTTP Client,也可以使用Rest Client,可以设置ribbon.restclient.enabled=true
.
注册中心
示例注册中心地址
1 | http://admin:pwd123@node1.test.com:8001/eureka/,http://admin:pwd123@node1.test.com:8002/eureka/,http://admin:pwd123@node3.test.com:8003/eureka/ |
服务注册
工程结构
1 | zuul-server |
Maven配置
1 | <properties> |
主类示例
@EnableZuulProxy
开启网关服务@EnableDiscoveryClient
开始实例自动发现并注册到注册中心
1 |
|
配置示例
application.properties
主配置示例
1 | spring.application.name=gateway-server |
application-node1.properties
节点1配置示例
1 | server.port=5301 |
application-node2.properties
节点2配置示例
1 | server.port=5302 |
服务启动
1 | [root@localhost target ]$ java -jar zuul-server-1.0-SNAPSHOT.jar --spring.profiles.active=node1 & |
注册查看
访问注册中心:http://admin:pwd123@node1.test.com:8001
服务访问
原始服务访问
1 | [root@localhost ~ ]$ curl http://172.30.12.197:8080/api/invoke/select/5 |
通过网关访问
1 | [root@localhost ~ ]$ curl http://172.30.12.197:5301/ribbon/api/invoke/select/5 |