简介
Zuul是Spring Cloud提供的api网关和过滤组件,它提供如下功能:
认证
过滤
压力测试
Canary测试
动态路由
服务迁移
负载均衡
安全
静态请求处理
动态流量管理
在本教程中,我们将用zuul,把web端的请求转发到对应的产品服务上,并且定义一个pre过滤器来验证是否经过了zuul的转发。
基础环境
JDK 1.8
Maven 3.3.9
IntelliJ 2018.1
Git
项目源码
Gitee码云
创建Zuul服务
在IntelliJ中创建一个maven项目:
cn.zxuqian
apiGateway
然后在中添加如下代码:
需要注意的是,Spring官网的教程给的zuul的artifactId为spring-cloud-starter-zuul,这个是旧版zuul的名字,在我们的版本中已经更名为。
添加文件,指定:
创建类:
- Zuul内置的filter类型有四种,, ,,,分别代表请求处理前,处理时,处理后和出错后。
- 指定了该过滤器执行的顺序。
- 是否开启此过滤器。
- 过滤器的业务逻辑。这里只是简单的log了一下reqeust的请求方式和请求的路径。
接下来,在我们的配置中心的git仓库中创建文件,并添加如下配置:
这里配置了zuul的端口为8083,然后映射所有的请求到我们的服务上。如果不配置,那么这个Key就会默认作为ServiceId,而我们的例子中,ServiceId包括了,所以在下边显示指定了ServiceId。配置完成后提交到git。
更新productService
productService的uri做了一点改动,使其更符合rest风格:
这里匹配的路径改为了,之前是。
更新web客户端
在我们的web客户端的中添加一个新的方法:
这次我们直接请求服务,然后由它把我们的请求反射代理到服务。最后在中添加一个请求处理方法:
用来处理请求,然后调用类中的方法。
测试
使用启动,, , ,这几个工程,然后启动第二个,使用。
访问几次,然后除了会在浏览器看到返回的结果,我们还会在的命令行窗口中看到如下字样:
GET 方式请求 http://xuqians-imac:8083/product/list
然后在两个的命令行窗口中,我们还会看到随机出现的
Access to /products endpoint
说明也会自动进行负载均衡。
大家有什么想法欢迎来讨论。
领取专属 10元无门槛券
私享最新 技术干货