7-1 SpringCloud快速开发入门:使用Zuul构建Api网关
创始人
2025-05-28 19:54:19
0

接上一章节Feign实现服务消费的熔断及熔断的异常信息获取,这里讲讲使用Zuul构建Api网关

API 网关 Zuul

Spring Cloud 的 Zuul 是什么

通过前面的内容,我们已经可以基本搭建出一套简略版的微服务架构了,我们有注册中心 Eureka,可以将服务注册到该注册中心中,我们有 Ribbon 或Feign 可以实现对服务负载均衡地调用,我们有 Hystrix 可以实现服务的熔断,但是我们还缺少什么呢?

我们首先来看一个微服务架构图:

在这里插入图片描述
在上面的架构图中,我们的服务包括:内部服务 Service A 和内部服务 Service B,这两个服务都是集群部署,每个服务部署了 3 个实例,他们都会通过 Eureka Server 注册中心注册与订阅服务,而 Open Service 是一个对外的服务,也是集群部署,外部调用方通过负载均衡设备调用 Open Service 服务,比如负载均衡使用 Nginx,这样的实现是否合理,或者是否有更好的实现方式呢?

1、如果我们的微服务中有很多个独立服务都要对外提供服务,那么我们要如何去管理这些接口?特别是当项目非常庞大的情况下要如何管理?

2、在微服务中,一个独立的系统被拆分成了很多个独立的服务,为了确保安全,权限管理也是一个不可回避的问题,如果在每一个服务上都添加上相同的权限验证代码来确保系统不被非法访问,那么工作量也就太大了,而且维护也非常不方便。

为了解决上述问题,微服务架构中提出了 API 网关的概念,它就像一个安检站一样,所有外部的请求都需要经过它的调度与过滤,然后 API 网关来实现请求路由、负载均衡、权限验证等功能;

那么 Spring Cloud 这个一站式的微服务开发框架基于 Netflix Zuul 实现了Spring Cloud Zuul,采用 Spring Cloud Zuul 即可实现一套 API 网关服务。

使用Zuul构建Api网关

1、创建一个普通的 Spring Boot 工程,导入相关依赖

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

        org.springframework.cloudspring-cloud-starter-netflix-eureka-clientorg.springframework.cloudspring-cloud-starter-netflix-zuul2.2.10.RELEASEorg.springframework.cloudspring-cloud-dependencies2021.0.3pomimportspring-milestonesSpring Milestoneshttps://repo.spring.io/libs-milestonefalse

在这里插入图片描述
在这里插入图片描述

2、在入口类上添加@EnableZuulProxy 注解,开启 Zuul 的 API 网关服务功能

@EnableZuulProxy //开启 Zuul 的 API 网关服务功能

在这里插入图片描述

3、在 application.properties 文件中配置路由规则

#配置服务内嵌的 Tomcat 端口
server.port=8084
#配置服务的名称
spring.application.name=springcloud-api-gateway
#配置 API 网关到注册中心上,API 网关也将作为一个服务注册到 eureka-server 上
eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka/,http://eureka8762:8762/eureka/
#配置路由规则 zuul.routes.接自定义名字
zuul.routes.api-lixuanhong.path=/api-lixuanhong/**
zuul.routes.api-lixuanhong.serviceId=springcloud-service-feign

在这里插入图片描述

以上配置,我们的路由规则就是匹配所有符合/api-lixuanhong/**的请求,只要路径中带有/api-wkcto/都将被转发到 springcloud-service-feign 服务上,至于springcloud-service-feign 服务的地址到底是什么则由 eureka-server 注册中心去分析,我们只需要写上服务名即可。
以我们目前搭建的项目为例,请求 http://localhost:8084/api-lixuanhong/web/hello 接口则相当于请求 http://localhost:8083/web/hello

(springcloud-service-feign 服务的地址为 http://localhost:8083/web/hello), 路由规则中配置的 api-lixuanhong是路由的名字,可以任意定义,但是一组 path 和serviceId 映射关系的路由名要相同。
如果以上测试成功,则表示们的 API 网关服务已经构建成功了,我们发送的符合路由规则的请求将自动被转发到相应的服务上去处理。

4、修改springboot,springcloud以及相关依赖版本号

最新的springcloud,最新的不支持zuul;用2020以上版本springcloud。能够使用zuul包,并能注册到eureka,但是服务访问不了,500内部服务错误;最后改为2020.04版本以下的springcloud才行,这里我们选择的Spring Boot 2.2.x, 2.3.x (SR5+)对应SpringCloud的Hoxton版本

在这里插入图片描述

  • 依赖如下

4.0.0org.springframework.bootspring-boot-starter-parent2.3.0.RELEASE com.lixuanhong.springcloudspringcloud-api-gateway0.0.1-SNAPSHOTspringcloud-api-gatewayDemo project for Spring Boot1.8org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtestorg.springframework.cloudspring-cloud-starter-netflix-eureka-clientorg.springframework.cloudspring-cloud-starter-netflix-zuulorg.springframework.cloudspring-cloud-dependenciesHoxton.SR1pomimportspring-milestonesSpring Milestoneshttps://repo.spring.io/libs-milestonefalseorg.springframework.bootspring-boot-maven-plugin

5、为Zuul配置超时时间

  • 由于服务提供者一的请求方法里是阻塞线程,那么我们Zuul请求转发到feign上负载均衡到服务提供者一上时会报Gateway Timeout,所以需要为Zuul配置超时时间

在这里插入图片描述

ribbon.ReadTimeout=5000
ribbon.ConnectTimeout=5000

ribbon.ReadTimeout, ribbon.SocketTimeout这两个就是ribbon超时时间设置。还有zuul.host.connect-timeout-millis, zuul.host.socket-timeout-millis这两个配置,这两个和上面的ribbon都是配超时的。区别在于,如果路由方式是serviceId的方式,那么ribbon的生效,如果是url的方式,则zuul.host开头的生效。(此处重要!使用serviceId路由和url路由是不一样的超时策略)如果你在zuul配置了熔断fallback的话,熔断超时也要配置,不然如果你配置的ribbon超时时间大于熔断的超时,那么会先走熔断,相当于你配的ribbon超时就不生效了

在这里插入图片描述
6、启动测试

在这里插入图片描述

  • 我们服务提供者二是有异常的,所以返回

在这里插入图片描述
在这里插入图片描述

相关内容

热门资讯

从危房“孤岛”到挂牌文物 检察... 中新网杭州6月7日电(郭其钰)“保护文物就是保护历史,每一处不可移动文物都弥足珍贵。”近日,张国雄再...
“你比棒棒爸爸更棒!” 朝天门... 一手牵着儿子,一手扛着大包……十五年前在朝天门的梯坎上,“棒棒父亲”冉光辉感动了无数人。 2025年...
各地稳就业观察:强化就业优先导... 开栏的话: 促进高质量充分就业,是新时代新征程就业工作的新定位、新使命。党中央、国务院高度重视就业工...
易航科技重大诉讼进展 2025年6月7日消息,易航科技股份有限公司发布重大诉讼进展公告。2024年8月30日,海南省第一中...
每周股票复盘:苏豪弘业(600... 截至2025年6月6日收盘,苏豪弘业(600128)报收于10.03元,较上周的9.57元上涨4.8...
哈佛诉讼反击白宫,法官阻行签证... 文︱陆弃 2025年6月,美国高校与联邦政府之间的政治冲突再度升级。哈佛大学修改诉状,直指特朗普政府...
邵阳严格落实"入企扫... 5月30日,邵阳市市场监管局出台新规,全面落实“扫码入企”和“综合查一次”制度。 5月30日,邵阳市...
汾阳市人大常委会开展《吕梁市控... 6月6日,市人大常委会就我市贯彻落实《吕梁市控制和查处违法建设条例》进行执法检查。市人大常委会主任郑...
武汉热心市民捡到一部手机交给民... 极目新闻通讯员 孙逊 陈卓 手机丢了,人找到了!这是一个暖心的故事。武汉热心市民在公园晨练时捡到一部...
马品高,任上被查 广东省纪委监委6月6日消息,广东省江门市蓬江区委副书记、区长马品高涉嫌严重违纪违法,目前正接受广东省...