首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

微服务架构开发实战:如何集成Zuul和实现API网关?

如何集成 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网关

下篇文章给大家讲解微服务的部署与发布;

觉得文章不错的朋友可以转发此文关注小编;

感谢大家的支持!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201130A0GP7Z00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券