博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java b2b2c SpringBoot多用户商城系统(十):服务网关zuul初级篇
阅读量:7056 次
发布时间:2019-06-28

本文共 3556 字,大约阅读时间需要 11 分钟。

为什么需要API Gateway

1、简化客户端调用复杂度

在微服务架构模式下后端服务的实例数一般是动态的,对于客户端而言很难发现动态改变的服务实例的访问地址信息。因此在基于微服务的项目中为了简化前端的调用逻辑,通常会引入API Gateway作为轻量级网关,同时API Gateway中也会实现相关的认证逻辑从而简化内部服务之间相互调用的复杂度。

2、数据裁剪以及聚合

通常而言不同的客户端对于显示时对于数据的需求是不一致的,比如手机端或者Web端又或者在低延迟的网络环境或者高延迟的网络环境。

因此为了优化客户端的使用体验,API Gateway可以对通用性的响应数据进行裁剪以适应不同客户端的使用需求。同时还可以将多个API调用逻辑进行聚合,从而减少客户端的请求数,优化客户端用户体验

3、多渠道支持

当然我们还可以针对不同的渠道和客户端提供不同的API Gateway,对于该模式的使用由另外一个大家熟知的方式叫Backend for front-end, 在Backend for front-end模式当中,我们可以针对不同的客户端分别创建其BFF

4、遗留系统的微服务化改造

对于系统而言进行微服务改造通常是由于原有的系统存在或多或少的问题,比如技术债务,代码质量,可维护性,可扩展性等等。API Gateway的模式同样适用于这一类遗留系统的改造,通过微服务化的改造逐步实现对原有系统中的问题的修复,从而提升对于原有业务响应力的提升。通过引入抽象层,逐步使用新的实现替换旧的实现。

在Spring Cloud体系中, Spring Cloud Zuul就是提供负载均衡、反向代理、权限认证的一个API gateway。

Spring Cloud Zuul

Spring Cloud Zuul路由是微服务架构的不可或缺的一部分,提供动态路由,监控,弹性,安全等的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。

下面我们通过代码来了解Zuul是如何工作的

简单使用

1、添加依赖

org.springframework.cloud
spring-cloud-starter-zuul
复制代码

引入spring-cloud-starter-zuul

2、配置文件

spring.application.name=gateway-service-zuulserver.port=8888#这里的配置表示,访问/it/** 直接重定向到http://www.ityouknow.com/**zuul.routes.baidu.path=/it/**zuul.routes.baidu.url=http://www.ityouknow.com/复制代码

3、启动类

@SpringBootApplication@EnableZuulProxypublic class GatewayServiceZuulApplication {    public static void main(String[] args) {        SpringApplication.run(GatewayServiceZuulApplication.class, args);    }}复制代码

启动类添加@EnableZuulProxy,支持网关路由。

史上最简单的zuul案例就配置完了

整体架构如下:

服务化

通过url映射的方式来实现zull的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了。实际上在实现微服务架构时,服务名与服务实例地址的关系在eureka server中已经存在了,所以只需要将Zuul注册到eureka server上去发现其他服务,就可以实现对serviceId的映射。

我们结合示例来说明,在上面示例项目gateway-service-zuul-simple的基础上来改造。

1、添加依赖

org.springframework.cloud
spring-cloud-starter-eureka
复制代码

增加spring-cloud-starter-eureka包,添加对eureka的支持。

2、配置文件

配置修改为:

spring.application.name=gateway-service-zuulserver.port=8888zuul.routes.api-a.path=/producer/**zuul.routes.api-a.serviceId=spring-cloud-producereureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/复制代码

3、测试

依次启动 spring-cloud-eurekaspring-cloud-producergateway-service-zuul-eureka,访问:http://localhost:8888/producer/hello?name=%E5%B0%8F%E6%98%8E,返回:hello 小明,this is first messge

说明访问gateway-service-zuul-eureka的请求自动转发到了spring-cloud-producer,并且将结果返回。

为了更好的模拟服务集群,我们复制spring-cloud-producer项目改为spring-cloud-producer-2,修改spring-cloud-producer-2项目端口为9001,controller代码修改如下:

@RestControllerpublic class HelloController {        @RequestMapping("/hello")    public String index(@RequestParam String name) {        return "hello "+name+",this is two messge";    }}复制代码

修改完成后启动spring-cloud-producer-2,重启gateway-service-zuul-eureka。测试多次访问http://localhost:8888/producer/hello?name=%E5%B0%8F%E6%98%8E,依次返回:

hello 小明,this is first messgehello 小明,this is two messgehello 小明,this is first messgehello 小明,this is two messge...复制代码

说明通过zuul成功调用了producer服务并且做了均衡负载。

网关的默认路由规则

但是如果后端服务多达十几个的时候,每一个都这样配置也挺麻烦的,spring cloud zuul已经帮我们做了默认配置。默认情况下,Zuul会代理所有注册到Eureka Server的微服务,并且Zuul的路由规则如下:http://ZUUL_HOST:ZUUL_PORT/微服务在Eureka上的serviceId/**会被转发到serviceId对应的微服务。

我们注销掉gateway-service-zuul-eureka项目中关于路由的配置:

#zuul.routes.api-a.path=/producer/**#zuul.routes.api-a.serviceId=spring-cloud-producer复制代码

重新启动后,访问http://localhost:8888/spring-cloud-producer/hello?name=%E5%B0%8F%E6%98%8E,测试返回结果和上述示例相同,说明Spring cloud zuul默认已经提供了转发功能。

到此zuul的基本使用我们就介绍完了。关于zuul更高级使用,我们下篇再来介绍。

Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码请加企鹅求求:一零三八七七四六二六

转载于:https://juejin.im/post/5c6a638451882562e747fec7

你可能感兴趣的文章
Python文件操作
查看>>
高效的CSS代码(1)
查看>>
机器视觉检测技术之颜色视觉工具应用
查看>>
Jrebel简单的热部署一个web工程
查看>>
面试:老师讲的递归解决斐波那契数列真的好吗
查看>>
英国发布修订版消费型无人机用户操作指引
查看>>
awk高级玩法
查看>>
springboot整合dubbo、shiro 无.xml配置文件遇到的坑
查看>>
显示技术推动新型可穿戴设备的发展
查看>>
tf.Graph
查看>>
PostgreSQL count-min sketch top-n 概率计算插件 cms_topn (结合窗口实现同比、环比、滑窗分析等) - 流计算核心功能之一...
查看>>
Macaca环境篇
查看>>
Elasticsearch 5.5.1的安装和入门教程(转)
查看>>
Jodd 5.0.10 发布,OSC 上交口称赞的 Java 工具包
查看>>
MySQL5.7并行复制乱序提交引起的同步异常
查看>>
这个AI杀手真的很冷!人脸识别+空间定位即可秒杀所有人
查看>>
soffice help (LibreOffice)
查看>>
开发者论坛一周精粹(第四十二期) 晒代码千元话费送不停 免费证书
查看>>
留住人才,你需要强大的人才预测分析
查看>>
解决Chrome在隐身模式下无法播放Flash视频
查看>>