本系列文章用于记录SpringCloud的学习历程,计划会先简单地过一遍各个组件,分别写个小Demo,混个眼熟;然后再去看一下源码,理解原理。
本系列文章导航:
- SpringCloud学习之路(1)——注册中心 Eureka
- SpringCloud学习之路(2)——负载均衡 Ribbon
- SpringCloud学习之路(3)——断路器 Hystrix
- SpringCloud学习之路(4)——声明式REST客户端 Feign
- SpringCloud学习之路(5)——微服务网关 Zuul
Zuul 简介
Zuul 是netflix开源的一个 API Gateway 服务器, 本质上是一个 web servlet 应用。
Zuul 的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到用户服务,/api/address转发到到地址服务。
Zuul 默认和 Ribbon 结合实现了负载均衡的功能。
前期准备
与本系列文章所使用的软件版本略有不同,本文使用的版本为:
- SpringBoot (2.0.1.RELEASE)
- SpringCloud (Finchley.RELEASE)
这是由于使用Zuul要求SpringBoot和SpringCloud的版本必须成一定组合,否则可能会出现下面这个问题:
1 |
|
项目采用maven构建,相关pom文件如下:
1 |
|
在前文中,我们已经有了:
- Eureka服务端
- 多个服务提供者(provider)
- 一个具备负载均衡能力的服务调用者(invoker)
本文将使用 Zuul 新增一个网关,并配置路由。
使用Zuul
首先需要引入以下依赖:
1 |
|
在启动类上加 @EnableZuulProxy
注解:
1 |
|
配置文件:
1 |
|
在配置文件中,我们配置了provider 和 invoker的路由,分别将 service-provider1
服务路由到了 /api-provider/**
,以及将 service-invoker1
路由到了 /api-invoker/**
。
到此,我们便完成了一个简易的网关服务,启动后在浏览器输入 http://localhost:20000/api-provider/hello
和 http://localhost:20000/api-invoker/hello
,都能看到如下结果:
1 |
|
拦截器功能
使用Zuul可以方便地定义拦截器,继承 ZuulFilter
类并实现接口即可:
1 |
|