说明:本文仅作为本人学习<<深入理解Spring Cloud与微服务构建>>一书的学习笔记,所有代码案例及文字描述均参考该书,不足之处,请留言指正,不胜感激.
一.为什么需要Zuul?
a.Zuul,Ribbon以及Eureka相结合,可以实现智能路由和负载均衡的功能,Zuul能够将请求流量按某种策略分发到集群状态的多个服务实例.
b.网关将所有服务的API接口统一聚合,并统一对外暴露.外接系统调用API接口时,都是由网关对外暴露的API接口,外界系统不需要知道微服务系统中各服务相互调用的复杂性,从而提高了安全性.
c.网关服务可以做用户身份认证和权限认证,防止非法请求操作API接口,对服务器起到保护作用.
d.网关可以实现监控功能,实时日志输出,对请求进行记录.
f.网关可以用来实现流量监控,在高流量的情况下,对服务进行降级.
g.API接口从内部分离出来,方便做测试.
二.搭建Zuul服务
1.我们在前面服务的基础上搭建,新建一个module,取名zuul-server,然后导入Zuul的起步依赖,以及Eureka的起步依赖(Spring Cloud框架的各个服务都需要向服务中心注册),如下:
<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>
2.在启动类上加上@EnableEurekaClient,开启Eureka Client的功能;加上@EnableZuulProxy,开启Zuul的功能,如下:
/**
* 网关服务
*
* @author zhyu
* @version v1.0
* @date 2018年07月02日 20:08:34
*/
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy//开启zuul功能
public class ZuulServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulServerApplication.class, args);
}
}
3.接着配置application.yml,如下:
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
server:
port: 5000
spring:
application:
name: zuul-server
zuul:
routes:
producerapi: #"producerapi"是自己定义的,需要指定它的path,serviceId
path: /producerapi/**
serviceId: producer-server
#将/producerapi开头的url路由到指定的producer-server服务
prefix: /v1 #路径前缀
4.依次启动eureka-server,zuul-server,以及两个producer-server服务,访问:http://localhost:5000/v1/producerapi/producer,浏览器上会交替出现:
hi,this is 8762
hi,this is 8763
可见在使用服务名serviceId来配置的时候,Zuul默认在路由转发做了负载均衡.通过查看zuul的起步依赖可以发现,zuul的起步依赖集成了ribbon,hystrix等.