InfiniGate自研网关实现五

news2024/12/28 19:29:00

17.核心通信组件管理和处理服务映射

引入模块api-gateway-core 到 api-gateway-assist 中进行创建和使用,并拉取自注册中心的映射信息注册到本地的网关通信组件中。

第17节是在第15节的基础上继续完善服务发现的相关功能,把从注册中心拉取的网关映射信息【系统、接口、方法】映射到本地通信组件中。这样就算完成了注册中心到本地服务的一个打通处理,映射完成后就可以通过HTTP请求到网关通信层,完成对RPC的泛化调用。

要在poom文件中引入之前写的核心通信组件(打包成jar包,放到本地的maven仓库中),通过 GatewayAutoConfig 配置类对网关通信组件进行 Bean 对象的创建和启动。

具体实现步骤:

1.引入api-gateway-core的依赖

2.在application包下的GatewayApplication类中注入api-gateway-core中的配置类Configuration,读取配置文件GatewayServiceProperties,调用gatewayCenterService的doRegister方法将网关配置传到注册中心上进行注册网关服务,调用gatewayCenterService的pullApplicationSystemRichInfo拉取网关配置并把对应的配置信息装配到Configuration中。

3.在GatewayAutoConfig类初始化网关服务。创建核心通信组件的Configuration对象并交给Spring容器管理。初始化网关服务,创建服务端 Channel 对象,方便获取和控制网关操作。先基于配置构建会话工厂,然后创建启动网关网络服务。

18容器关闭监听和异常管理

把网关在注册和拉取时的异常抛出来,交给容器管理做关闭动作,以及处理网关的服务关闭。

按照网关设计的架构图,api-gateway-assist 助手工程会被引入到 api-gateway-engine 网关引擎中启动。那么在 api-gateway-assist 启动的过程中,我们希望它所发生的一些动作,包括启动中的异常、拉取接口信息的失败以及容器关闭后优雅的处理网关通信的关闭。那么这些内容,就是本节需要完成的事情。        

基于上一节对api-gateway-assist模块的完善,这里需要把网关的注册和拉取配置操作,放到 ApplicationContextAware 接口对应的 setApplicationContext 方法中。这样可以在注册服务以及拉取配置的过程中出现失败情况时,则直接抛异常关闭容器。另外这里还需要做一个容器关闭的监听动作 ApplicationListener<ContextClosedEvent> 容器关闭时则把网关中的通信模块下的 Netty 服务也一起关闭掉。

下面先来讲一下ApplicationContextAwareApplicationListener<ContextClosedEvent>这两个接口

ApplicationContextAware

ApplicationContextAware接口是一个标记接口,主要用于标识一个类可以被Spring容器识别并注入应用上下文(ApplicationContext)。这个接口定义了一个方法:

void setApplicationContext(ApplicationContext applicationContext) throws BeansException;

当Spring容器创建实现了ApplicationContextAware接口的Bean时,它会自动调用这个方法,并传递应用上下文对象。

ApplicationListener<ContextClosedEvent>

ApplicationListener接口是一个事件监听器接口,用于监听Spring框架中的各种事件。这个接口定义了一个方法:

void onApplicationEvent(ApplicationEvent event);

当Spring容器发布某个事件时,所有实现了ApplicationListener接口的Bean的onApplicationEvent方法会被调用。这样,开发者可以自定义事件处理逻辑。

ContextClosedEvent是Spring框架中的一个事件,当Spring容器关闭时发布。因此,实现ApplicationListener<ContextClosedEvent>接口的类可以监听到Spring容器的关闭事件,并执行相应的清理工作,比如关闭数据库连接、释放资源等。

具体实现:

  1. 在service包下对服务注册和配置拉取这两个http请求用try catch进行异常管理
  2. 感知容器,GatewayApplication实现ApplicationContextAware接口,重写setApplicationContext方法,将注册网关服务和拉取网关配置放到这个方法里面并使用try catch捕获异常,当出现异常时就直接捕获抛出,关闭容器。
  3. 监听动作,GatewayApplication实现GatewayApplication实现接口,重写onApplicationEvent方法,监听到Spring 的容器关闭通知时,则把 Netty 服务关闭掉。

19网关引擎打包镜像部署

把网关在注册和拉取时的异常抛出来,交给容器管理做关闭动作,以及处理网关的服务关闭。为了方便网关算力节点的分布式部署,我会把网关引擎工程 api-gateway-engine 打包成 Jar 放到 Docker 中启动。

api-gateway-engine 是一个用于启动网关算力服务的引擎工程,它的代码内容几乎没有多少,主要负责的是工程的启动操作。因为镜像的打包也是从这个工程中处理。

具体实现:

1.在poom.xml文件中引入api-gateway-assist的依赖。

2.编写Dockerfile文件构建网关引擎的镜像。

3.编写一个shell脚本build.sh用于执行Dockerfile文件

20.服务注册组件搭建采集接口信息

提供应用服务注册的组件,采集RPC服务启动时已经配置了标记注解的对象,摘取出类、接口、方法,用于后续注册到网关中心。

首先我们知道网关的注册中心维护着网关和RPC接口的信息,用于把RPC接口分配到网关算力上使用。那么前面已经实现了网关算力的自动注册,同样RPC接口也需要自动注册,否则都是人工手动维护这个成本还是非常大的。

所以要开发一个api-gateway-sdk 组件,获取 Spring Bean 对象的注册结果,。并对已经使用注解标记了的接口进行拦截提取接口和方法信息。

具体实现:

1.在annotation包下自定义两个注解ApiProducerClazz(作用到类上)、ApiProducerMethod(作用到方法上),用于对注册到网关的接口进行标记,因为标记后就可以在读取到 Bean 对象以后通过反射判断是否需要提取信息并注册。

2.在application包下创建GatewaySDKApplication实现BeanPostProcessor接口(后置处理器的接口),重写postProcessAfterInitialization方法,该方法是Bean初始化之后调用,形参里面传入了bean实例,对bean实例进行反射拿到接口信息。

3.为了这个模块可以方便地服用,我们可以把这个模块封住成一个SpringStarter组件,在config包下,定义GatewaySDKServiceProperties属性类,用于封装从配置文件中定义的信息,包括注册中心和RPC服务的信息。定义GatewaySDKAutoConfig自动装配类,加上@EnableConfigurationProperties里面传入属性类的字节码,创建GatewaySDKServiceProperties类型的Bean对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1680104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于单片机的智能安防系统设计(32+4G+WIFI版)-设计说明书

设计摘要&#xff1a; 本设计基于STM32单片机&#xff0c;旨在实现一个智能安防系统&#xff0c;主要包括烟雾和温度传感器、人体红外传感器、显示屏、按键、4G模块和WiFi模块等组件。通过这些组件的协作&#xff0c;实现了火灾检测、入侵监测、状态显示、用户交互和远程通信等…

vscode对一些软件的调试插件。

vscode对一些软件的调试插件。 1、ae &#xff0c;f1然后选择运行 after effect 脚本 2、maya,右键send code to maya 3、max&#xff0c;ctrle运行脚本到max 4、unity 从在Visual Studio代码使用.NET的核心&#xff1a; 1、安装.NET Core SDK&#xff0c;链接: https://dotn…

QT客户端开发的注意事项

QT客户端开发是一个涉及图形用户界面&#xff08;GUI&#xff09;设计、网络编程、数据库交互等多个方面的复杂过程。以下是在进行QT客户端开发时应注意的一些关键事项&#xff0c;通过关注这些事项&#xff0c;可以提高QT客户端应用的质量和开发效率。北京木奇移动技术有限公司…

内网安全-隧道搭建穿透上线FRPNPSSPPNgrokEW项目

旨在代理连接肉鸡后实现本地渗透肉鸡网络架构 Linux&#xff1a;Proxychains Windows&#xff1a;Sockscap Proxifier 穿透项目&#xff1a;Ngrok Frp Spp Nps EW(停更) 优点&#xff1a;穿透加密数据&#xff0c;中间平台&#xff0c;防追踪&#xff0c;解决网络问题 https://…

1727jsp思想政治活动Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 思想政治活动管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff…

Java——继承详解、super 关键字、super和this的异同、protected关键字、final关键字、继承与组合

1、继承的概念&#xff1a; 继承主要解决的问题&#xff1a;共性的抽取&#xff0c;实现代码复用 可以让我们在保持原有类&#xff08;父类、超类、基类&#xff09;特性的基础上进行扩展&#xff0c;增加新功能&#xff0c;这样产生新的类&#xff0c;称为派生类&#xff08…

Blender 导入资源包的例子

先到清华源下载资源包&#xff1a; Index of /blender/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 具体地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/blender/demo/asset-bundles/human-base-meshes/human-base-meshes-bundle-v1.1.0.zip 解压/hum…

2024数学建模深圳杯B题成品论文43页word+完整可视化结果图+可执行代码

【无水印word】2024深圳杯B题成品论文43页&#xff08;附带1-4小问完整py解题代码思路&#xff09;https://www.jdmm.cc/file/2710664 批量工件并行切割下料优化研究 摘 要 本研究针对批量工件并行切割下料问题展开了深入的探讨与分析。通过建立数学模型和运用优化算法&…

如何去除字符串两侧的空白字符?

TRIM函数会去掉字符串左侧和右侧的空格&#xff0c;语法是&#xff1a;TRIM(字符串) excel中&#xff0c;TRIM函数能去掉字符串左侧和右侧的空格&#xff0c;它的ASCII码是32。 以下设定一个字符串组合&#xff0c;它的第一个字符中空格&#xff0c;最后一个字符是换行符 &q…

vue3专栏项目 -- 六、上传组件(上)

1、上传组件需求分析 我们还需要新建和展示文章&#xff0c;新建文章自然是发送post请求&#xff0c;同时在post中自带对应的数据&#xff0c;展示文章就是根据id取出已有的数据并且展示出来。 这里有一个难点就是上传组件&#xff0c;上传文件是App应用中最基本的需求&#…

五丰黎红销量增长的秘诀:一物一码数字化营销开创调味品行业新格局!

根据当今经济环境和未来的发展趋势&#xff0c;传统经济向数字化经济转型的发展方向可以说是大势所趋&#xff0c;如何把握先机&#xff0c;率先迈出数字化转型第一步&#xff0c;可以说是无数传统企业都需要思考的问题。 作为中国调味品行业的佼佼者&#xff0c;五丰黎红踩着时…

如何查看SNMP设备的OID

什么是OID和MIB OID OID 代表对象标识符。 OID 唯一地标识 MIB 层次结构中的托管对象。 这可以被描述为一棵树&#xff0c;其级别由不同的组织分配。MIB MIB&#xff08;管理信息基&#xff09;提供数字化OID到可读文本的映射。 使用MIB Browser扫描OID 我的设备是一台UPS SN…

13、24年--信息系统治理——IT审计

1、IT审计基础 1.1 IT审计定义 无重要的考点,自己读课本了解即可。 1.2 IT审计目的 1)IT审计的目的是指通过开展IT审计工作,了解组织IT系统与IT活动的总体状况,对组织是否实现IT目标进行审查和评价,充分识别与评估相关IT风险,提出评价意见及改进建议,促进组织实现IT目…

TCP(1)

传输层的两大协议是TCP 和 UDP &#xff0c;他们在传输数据的时候起到了不可替代的作用。那么什么是TCP呢&#xff1f; 首先TCP是一个网络传输协议&#xff0c;这个协议保证了可靠的数据传输。TCP是面向字节流的&#xff0c;全双工的&#xff08;也就是通信双方互相发消息&…

单位内部防泄密策略与技术实践

在信息时代&#xff0c;企业内部数据安全至关重要&#xff0c;尤其是涉及核心竞争力的重要文件&#xff0c;员工的不当操作或恶意泄露都可能给企业带来重大损失。本文将从制度建设、技术防护、以及日常管理三个方面入手&#xff0c;探讨如何构建一套行之有效的内部防泄密体系&a…

汇聚荣:拼多多长期没有流量如何提高?

在电商的海洋中&#xff0c;拼多多以其独特的团购模式吸引了众多消费者的目光。然而&#xff0c;随着市场竞争的加剧和消费者需求的多样化&#xff0c;一些商家发现自家店铺的流量持续低迷&#xff0c;销售业绩难以突破。面对这样的挑战&#xff0c;如何有效提升拼多多店铺的客…

大模型算法(零) - Transformer中的细节与实现

讲transformer的文章已经铺天盖地了&#xff0c;但是大部分都是从原理的角度出发的文章&#xff0c;原理与实现之间的这部分讲解的较少&#xff0c;想要了解实现细节&#xff0c;还是要去看代码才行。记录一下自己学习过程中遇见的细节问题和实现问题。 Transformer整体架构 图…

树链剖分详解,看这一篇就够了

前置知识&#xff1a; 树形结构链式前向星(熟练)线段树(熟练)DFS序(熟练)LCA(了解定义) 什么是树链剖分 树链剖分其实有两种&#xff1a;重链剖分和长链剖分。重链剖分就是把儿子节点最重的儿子称为重儿子&#xff0c;把树分成若干条重链&#xff08;如图一&#xff09;&#…

【NR学习一】NR中的带宽、子载波间隔、PRB数量、FFT点数与采样率之间的关系

NR中的带宽、子载波间隔、PRB数量、FFT点数与采样率之间的运算关系 在5G NR&#xff08;New Radio&#xff09;系统设计中&#xff0c;带宽&#xff08;Bandwidth&#xff09;、子载波间隔&#xff08;Subcarrier Spacing, SCS&#xff09;、资源块&#xff08;Resource Block…

汇聚荣科技:如何有效为拼多多店铺引流?

在电商竞争激烈的今天&#xff0c;为拼多多店铺引流是每个店主必须面对的挑战。有效的引流策略不仅能增加店铺曝光度&#xff0c;还能提升转化率&#xff0c;促进销量增长。 一、社交媒体营销 利用微信、微博等社交平台进行推广&#xff0c;可以通过发布产品信息、用户评价和促…