首页 > 其他分享 >SpringCloud系列之网关gateway-2.Gateway体系架构解析

SpringCloud系列之网关gateway-2.Gateway体系架构解析

时间:2022-10-24 15:32:48浏览次数:52  
标签:Netty 网关 调用 SpringCloud upload Gateway Response 加载

打开Gateway的自动装配工厂GatewayAutoConfiguration来看一下,排头第一个类就是Netty。


Netty是什么?在网络传输领域Netty就是身份的象征,黄金AK般的存在,它是非阻塞、高性能、高可靠的异步输入输出框架,用一个字概括就是“快”。在后面会安排专门的章节介绍基于Netty的高性能通信,所以这里我们不对Netty做深入探讨,但是需要了解下Netty在Gateway中主要应用在以下几个地方:


 发起服务调用:由NettyRoutingFilter过滤器实现,底层采用基于Netty的HttpClient发起外部服务的调用

 Response传输:由NettyResponseFilter过滤器实现,网络请求结束后要将Response回传给调用者

 Socket连接:具体由ReactorNettyWebSocketClient类承接,通过Netty的HttpClient发起连接请求


在Gateway中发起Request和回传Response之类的步骤都是通过一系列过滤器完成的,有关过滤器的内容将在稍后介绍。

让我们用一张图来概括一下Netty在Gateway组件中的位置:


![image.png](https://upload-images.jianshu.io/upload_images/8553141-db6bddeaa628668f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)



Client发起请求到服务网关之后,由NettyRoutingFilter底层的HttpClient(也是Netty组件)向服务发起调用,调用结束后的Response由NettyResponseFilter再回传给客户端。有了Netty的加持,网络请求效率大幅提升(Zuul 1.x还是使用Servlet,在2.x版本才移步到Netty)由此可见,Netty贯穿了从Request发起到Response结束的过程,承担了所有和网络调用相关的任务。


###Gateway自动装配


接下来,让我们梳理一下Gateway框架的加载过程,从Gateway自动装配的角度,看看它都需要加载什么资源


![image.png](https://upload-images.jianshu.io/upload_images/8553141-cffcce8369331326.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


 AutoConfig 作为核心自动装配主类,GatewayAutoConfiguration负责初始化所有的Route路由规则、Predicate断言工厂和Filter(包括Global Filter和Route Filter),这三样是Gateway吃饭的家伙,用来完成路由功能。AutoConfig也会同时加载Netty配置

 LoadBalancerClient 这部分在AutoConfig完成之后由GatewayLoadBalancerClientAutoConfiguration负责加载,用来加载Ribbon和一系列负载均衡配置

 ClassPathWarning 同样也是在AutoConfig完成之后触发(具体加载类为GatewayClassPathWarningAutoConfiguration),由于Gateway底层依赖Spring WebFlux的实现,所以它会检查项目是否加载了正确配置

 Redis 在Gateway中Redis主要负责限流的功能



除了上面几个核心装配工厂以外,还有两个打酱油的路人,它们并不直接参与Gateway的核心功能,但是会提供一些重要的支持功能,我们也来一道认识下:

 路人甲 GatewayMetricsAutoConfiguration负责做一些统计工作,比如对所谓的“short task”运行时长和调用次数做统计

 路人乙 GatewayDiscoveryClientAutoConfiguration服务发现客户端自动装配类



标签:Netty,网关,调用,SpringCloud,upload,Gateway,Response,加载
From: https://blog.51cto.com/u_15838998/5789925

相关文章

  • SpringCloud系列之网关gateway-3.创建默认路由规则
    我们建立一个项目,依赖如下:我们引入了actuator监控组件,eureka组件,可以看到我们没有引入spring-boot-starter-web这个依赖,是因为gateway这个项目较为特殊。图中我们引入了gat......
  • 使用API网关构建微服务
     使用传统的异步回调方法编写API组合代码会让你迅速坠入回调地狱。代码会变得混乱、难以理解且容易出错。一个更好的方法是使用响应式方法以一种声明式样式编写API网关代码......
  • 借助工业网关如何实现罗克韦尔PLC的远程监控和维护?
    罗克韦尔是一个具有大中小型控制系统的PLC品牌,Micro800和MicroLogix是小型PLC,CompactLogix、SmartGuard600和SLC500是中型PLC,大型PLC有ControlLogix、GuardPLC和Softlogix......
  • GatewayWorker websocket 连接 1 分钟后自动断开原因?
    GatewayWorker配置通过nginx转发,客户端定时(每60秒)发送心跳,心跳间隔设置如下://心跳间隔$gateway->pingInterval=30;$gateway->pingNotResponseLimit=6;//心跳数据$g......
  • 记一次服务器到网关丢包排查
    1.现状描述 服务器网线接入到接入交换机,接入交换机4条光纤聚合上联到网关交换机,接入交换机至网关交换机距离很近。2.故障现象 服务器到网关丢包6%左右,丢包无时间段......
  • 工业物联网网关助力打造绿色低碳的智能制造工厂
    制造加工行业的发展让人类有更多更强的能力去获取资源与改造自然,可以极大的提升人们的生活水平。但长期以来,我国制造业形成了以“高投入、高能耗、高排放”的粗放型模式,带来......
  • SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截
    项目依赖SpringBoot2.5.5SpringCloud2020.0.4AlibabaSpringCloud2021.1MybatisPlus3.4.0Seata1.4.1(需要与服务器部署的Seata版本保持一致)。。。。Seata介......
  • SpringCloud之Feign讲解
    目录1Feign1.1定义1.1.1简介1.1.2属性介绍1.1.3原理解析1.2Feign准备工作1.2.1引入依赖1.2.2启动类和yml文件1.3使用Feign1.3.1简单使用@FeignClient1.3.2@Requ......
  • 两类常见场景下的云原生网关迁移实践
    作者:如葑云原生网关将流量网关、微服务网关、安全网关三合一,被誉为下一代网关,完全兼容KubernetesIngress标准API,解决了三层网关架构独立设计、独立运维导致的资源消耗大......
  • springcloud学习记录day05--分布式搜索 elasticsearch
    分布式搜索-elsaticsearchelasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容,从而弥补MySQL在复杂搜索上的短板......