1.网关Zuul简介
Zuul 是 Netflix OSS 中的一员,是一个基于 JVM 路由和服务端的负载均衡器。提供路由、监控、弹性、安全等方面的服务框架。Zuul 能够与 Eureka、Ribbon、Hystrix 等组件配合使用。
Zuul 的核心是过滤器,通过这些过滤器我们可以扩展出很多功能,比如:
- 1)动态路由 动态地将客户端的请求路由到后端不同的服务,做一些逻辑处理,比如聚合多个服务的数据返回。
- 2)请求监控 可以对整个系统的请求进行监控,记录详细的请求响应日志,可以实时统计出当前系统的访问量以及监
控状态。
- 3)认证鉴权 对每一个访问的请求做认证,拒绝非法请求,保护好后端的服务。
- 4)压力测试 压力测试是一项很重要的工作,像一些电商公司需要模拟更多真实的用户并发量来保证重大活动时系统的稳定。通过 Zuul
可以动态地将请求转发到后端服务的集群中,还可以识别测试流量和真实流量,从而做一些特殊处理。 - 5)灰度发布 灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
2.为什么使用网关zuul
不同的微服务一般有不同的网络地址,而外部的客户端可能需要调用多个服务的接口オ能完成一个业务需求。比如一个电影购票的收集APP,可能会调用电影分类微服务,用户微服务,支付微服务等。如果客户端直接和微服务进行通信,会存在以下问题:
- #客户端会多次请求不同微服务,増加客户端的复杂性
- #存在跨域请求,在一定场景下处理相对复杂认证复杂
- #每一个服务都需要独立认证
3.程序简单流程
前端程序通过网关来访问指定微服务。
4.Zuul网关搭建
(1)创建maven的modul在pom中添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
</dependencies>
(2)添加yml配置文件
server:
port: 9998
spring:
application:
name: diplomaproject-managerzuul
eureka: #将此服务注册到eureka
client:
service-url:
defaultZone: http://127.0.0.1:9999/eureka/
instance:
prefer-ip-address: true #可以跨域访问
zuul:
routes:
host:
connect-timeout-millis: 15000 #HTTP连接超时大于Hystrix的超时时间
socket-timeout-millis: 60000 #socket超时
diplomaproject-person: #服务名称
path: /user/** #配置请求url的请求规则
serviceId: diplomaproject-person #指明eureka注册中心的服务id
(3)添加启动类
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
@EnableEurekaClient
@EnableZuulProxy //使用网关代理
public class ManagerZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ManagerZuulApplication.class);
}
}