Spring Cloud Zuul介绍
什么是Spring Cloud Zuul?
Zuul是Netflix开源的微服务网关组件,具有动态路由、过滤、压力测试、监控、弹性伸缩和安全等功能。
为什么需要Spring Cloud Zuul?
1.Zuul和Ribbon以及Eureka相结合,可以实现智能路由和负载均衡的功能,可以将流量按照某种策略分发到集群中的多个实例。
2.统一对外暴露接口,外界系统不需要知道微服务系统中各服务之间调用的复杂性,也保护了内部微服务的api接口。
3.可以统一做用户身份认证,权限验证,这样就不用在每个微服务中进行认证了。
4.可以统一实现监控、日志的输出。
5.客户端请求多个微服务时,可以只请求Zuul一次,在Zuul中请求多个微服务,减少客户端和微服务的交互次数。
如何使用Spring Cloud Zuul?
1.新建一个微服务网关的项目spring-cloud-zuul,并且注册到Eureka Server上。
pom中引入依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
创建启动类
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy // 声明这是一个zuul代理
public class SpringCloudZuulApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudZuulApplication.class, args);
}
}
@EnableZuulProxy声明这是一个Zuul代理,该代理使用Ribbon来定位注册在Eureka Server中的服务,同时,该代理还整合了Hystrix,从而实现了容错,所有经过Zuul的请求都会在Hystrix命令中执行。
配置文件:
server.port=9100
spring.application.name=microservice-gateway
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
配置文件中,定义服务名为microservice-gateway,启动端口为9100,同时,该服务也作为一个Eureka Client向Eureka Server注册。
到此为止,我们的spring-cloud-zuul项目就写完了,启动这个项目,可以发现这个项目注册到了Eureka Server上。
我们还有microservice-provider和microservice-consumer两个服务,microservice-consumer的启动端口是9000,对外暴露了一个接口,访问路径是http://localhost:9000/consumer,以前直接访问这个地址就可以了,但是现在有了microservice-gateway这个服务,我们就可以访问http://localhost:9100/microservice-consumer/consumer,这个地址,这个请求会访问到microservice-gateway上,microservice-gateway再根据中间的这个serviceId找到并访问对应的服务提供者。
访问microservice-gateway的url规则为 http://zuul_host:zuul_port/微服务serviceId/**,默认情况下,Zuul会代理所有注册到Eureka Server的微服务。
Zuul的服务非常关键,一般情况下,所有的请求都会先经过Zuul,在请求到对应的微服务上,所以,需要保证Zuul的高可用。
Zuul也是注册到Eureka Server上的,所以,可以启动多台Zuul实例注册到Eureka Server上形成Zuul集群,来避免单点故障。
参考资料:
1.《Spring Cloud与Docker微服务架构实战》 周立 著
2.《Spring Cloud微服务实战》 翟永超 著
3.《深入理解Spring Cloud与微服务构建》 方志朋 著
上一篇: Django之ModelForm实例
推荐阅读
-
Spring Cloud动态配置实现原理与源码分析
-
Spring-Cloud Eureka注册中心实现高可用搭建
-
Spring Cloud Ribbon实现客户端负载均衡的示例
-
Spring Cloud Gateway网关XSS过滤Filter
-
Spring Cloud 之 Feign.
-
基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例
-
微信授权就是这个原理,Spring Cloud OAuth2 授权码模式
-
spring-cloud项目搭建
-
Spring Cloud开发人员如何解决服务冲突和实例乱窜?(IP实现方案)
-
Apache shiro的简单介绍与使用教程(与spring整合使用)