如何集成 Zuul
本节将基于Zuul来实现API网关。作为Spring Cloud 的一部分,集成Zuul会变得非常简单。
Zuul简介
路由是微服务架构中必需的一部分,如“”可能映射到Web程序上、“/api/users”可能映射到用户服务上、“/api/shop”可能映射到商品服务商。通过路由,让不同的服务都集中到统一的入口上来,这就是API网关的作用。
Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。
Zuul 功能如下。
认证。
压力测试。
金丝雀测试。
动态路由。
负载削减。
安全。
静态响应处理。
主动/主动交换管理。
Zuul的规则引擎允许通过任何JVM语言来编写规则和过滤器,支持基于Java和Groovy的构建。
在micro-weather-cureka-client的基础上稍作修改,即可成为一个新的应用micro-weather-cure-ka-client-zuul,将其作为示例。
所需环境
为了演示本例,需要采用如下开发环境。
.JDK8。
. Gradle 4.0。
Spring Boot 2.0.0.M3。
.Spring Cloud Starter Netflix Eureka Client Finchley.M2。
.Spring Cloud Starter Netflix Zuul Finchley.M2。
更改配置
要使用Zuul,最简单的方式莫过于添加Zuul依赖。
使用Zuul
要启用Zuul,最简单的方式就是在应用的根目录Application类上添加org.springframework.cloud.netflix.zuul.EnableZuulProxy注解。
其中,@EnableZuulProxy启用了Zuul作为反向代理服务器。
最后,修改application.properties。修改为如下配置。
其中:
运行和测试
启动在之前章节中创建的micro-weather-eureka-server和micro-weather-eureka-client两个项目,以及本例的micro-weather-eureka-client-zuul项目。
如果一切正常,那么micro-weather-eureka-server运行的管理界面能看到上述服务的信息。
通过浏览器访问micro-weather-zuul服务(本例地址为http:/localhost:8080),当试图访问接口时,如果一切正常,可以在控制台看到“Hello world”字样,这就是转发请求到micro-weather-eu-reka-client服务时响应的内容,如图10-3所示。
源码
本节示例所涉及的源码,见micro-weather-cureka-server、micro-weather-cureka-client,以及mi-cro-weather-cureka-client-zuul。
实现API网关
本节将在天气预报系统中使用API网关。
下面基于Zuul来实现API网关,由这个API网关来处理所有的用户请求。API网关将根据不同的请求路径,将请求路由到不同的微服务中去。
之前的天气预报微服务msa-weather-report-eureka-feign最初是依赖于天气数据API微服务及城市数据API微服务。现在把这两个API微服务都合并到了API网关中,由API网关来负责请求的转发。那么,最后新的天气预报微服务就只需要依赖于API网关即可。这里将新的应用命名为msa-weather-report-eureka-feign-gatewayo
在前面创建的micro-weather-eureka-client-zuul应用基础之上,再创建一个新的应用msa-weath-er-eureka-client-zuul,作为本节的API网关示例程序。
配置API网关
修改msa-weather-eureka-client-zuul的 application.properties配置文件。修改为如下配置。
图10-4所示的是API网关的路由规则:当访问的路径匹配“city”时,则API网关将请求转发到msa-weather-city-eureka微服务中去;当访问的路径匹配“data”时,则API网关将请求转发到msa-weather-data-eureka微服务中去。
修改新的天气预报微服务
在msa-weather-report-cureka-feign的基础上稍作修改,就能成为新版的msa-weather-report-cu-reka-feign-gateway。
主要的修改项集中在Feign'客户端。
1.修改Feign客户端
下面删除原来的CityClient、WeatherDataClient,并新建了DataClient用于获取城市列表数据及天气数据。
其中,在@FeignClient注解中,将服务地址指向了API网关msa-weather-cureka-client-zul应用。
同时,修改WeatherReportServicelmpl,将依赖WeatherDataClient的地方改为了DataClient。
修改WeatherReportController,将依赖CityClient的地方改为了DataClient。
2.修改应用配置
应用配置修改如下。
运行微服务实例
首先运行Eureka Server实例micro-weather-eureka-server,它在8761端口启动。
其次要运行Redis服务器。
而后分别在8081和8082上启动msa-weather-collection-cureka-feign实例两个,在8083和8084上启动msa-weather-data-eureka实例两个,在8085和 8086上启动msa-weather-city-eureka实例两个,在8087和8088上启动msa-weather-report-cureka-feign-gateway实例两个,在8089上启动msa-weather-cureka-client-zuul API 网关实例。启动脚本如下。
这样,就可以在Eureka Server上看到这8个实例的信息。访问http:/localhost:8761,可以看到如图9-3所示的Eureka Server自带的UI管理界面。
访问天气预报微服务的任意一个实例,都能够正常使用天气数据微服务和城市数据微服务。如在浏览器访问其中一个实例( http://localhost:8088/report/cityld/101280601)来进行测试。
源码
本节示例所涉及的源码,见micro-weather-eureka-server、msa-weather-collection-cureka-feign、msa-weather-data-eureka、msa-weather-city-eureka、msa-weather-report-eureka-feign-gateway .micro-weather-eureka-client-zuul,以及msa-weather-eureka-client-zuul。
本篇文章内容给大家讲解的是如何集成 Zuul和实现API网关
下篇文章给大家讲解微服务的部署与发布;
觉得文章不错的朋友可以转发此文关注小编;
感谢大家的支持!
领取专属 10元无门槛券
私享最新 技术干货