InfiniGate自研网关实现三

news2024/11/11 16:17:01

9.网关注册中心服务初始创建

整理整个网关调用链路流程,梳理核心服务。并完成网关中心简单DDD模型结构工程的搭建,与库表连通可以查询接口映射数据。

在前面我已经开发出了一个初具模型的核心通信组件,那么我该如何使用这个组件呢?接下来就是要思考整个项目的架构问题了。

  1. 如图所示,api-gateway-core 是最核心的通信层。那么它还需要把注册的网关接口在通信核心服务中启动起来。那么怎么启动呢?
  2. 这个启动过程首先来自于 api-gateway-sdk 向 api-gateway-center 推送注册接口,之后在通过网关引擎 api-gateway-engin 拉取接口并在本地服务完成注册。
  3. 最后再调用到网关接口时,则是通过 api-gateway-core 调用到对应的 RPC 应用中。
  4. 那么 api-gateway-sdk 并不是主要工程,没有它的是可以通过 api-gateway-admin 配置。所以 在整个流程中 api-gateway-center、api-gateway-core 是两个核心工程,能更好的串联流程。

下面我要开发注册中心的功能。注册中心主要提供RPC接口的注册和接口的拉取使用。对于一些负载的控制也会在后续陆续完善。

我先来初始化这样一个工程,这个工程采用简单的DDD工程模型结构开发,对外提供 HTTP 接口。之所以提供 HTTP 接口是因为可以引入更少的组件,也能满足需求。当然你也可以使用 MQ、Socket、ZK 等方式进行处理。

项目工程结构:

10.网关注册中心库表结构设计

网关注册中心,是一个多边服务,管理的是RPC服务向网关通信层的关联注册。

这就像美团外面平台,一手管理着商家、一手服务着用户。让用户的订单又商家生产,再配送给用户。而我们的网关注册中心也是这样,一手管理着通信,一手管理着服务。让RPC注册到通信层,在用户调用HTTP接口时,可以把协议转换后调用到对应的RPC服务上。

基于以上这样的情况,所以我们要在注册中心维护: 网关通信表、RPC服务表、以及两个表的关联表

网关服务表:指的是管理 InfiniGate-core 通信组件的服务。将多个InfiniGate-core 通信组件服务进行分组,不同的分组处理不同业务的请求。例如公司中有交易组、账务组、营销组,按照不同组来分配对应的网关服务,各自在注册网关接口时可以做到压力分摊。

网关明细表:指的的是每一组服务下,有N个通信核心服务,这个表里面存InfiniGate-core 通信核心服务的具体信息。这N个服务需要把所有注册到自己组上的RPC接口,都拉取下来完成接口映射。当有HTTP访问的时候,可以均衡的打到这些服务上。

网关分配这个表就是用于关联通信核心服务和注册在通信核心服务上的RPC应用。每个应用该注册到哪个网关里,就由这个表来控制。当你注册应用的时候,会有一个选项,问你要注册到哪个网关上。这部分一般也可以在指定的范围内,动态分配

应用系统:描述一个RPC应用(从微服务的角度来看就是一个微服务实例的相关信息)

应用接口:描述这个RPC应用下有多少个接口,以及明细

应用方法:描述这个RPC应用接口下的方法信息,包括;方法名称、入参信息、出参信息【可选】、请求类型、请求地址以及是否鉴权。因为网关返回的结果是 HTTP 方式,所以并不需要强对象描述信息,所以出参信息可选。

11.网关注册算力节点领域服务实现

在网关注册中心提供网关算力节点的注册服务接口,便于后续网关启动后向网关中心注册信息。

网关注册中心首先要接收来自各个网关服务的注册,任何一组用于处理 HTTP 协议请求的网关算力节点,都要注册到网关中心进行统一维护和管理。因为只有注册到网关中心才能把 RPC 服务分配到各个网关算力节点上进行使用。

我先开发出网关算力节点注册到注册中心的接口,允许外部通过HTTP接口进行注册服务。

具体实现:

1.在interfaces包下的GatewayConfigManage类中提供对外暴露的注册网关算力节点接口。

2.在application包下的IConfigManageService类中补充registerGatewayServerNode接口。

3.在domain领域层包下的子领域包manage下的service包中实现application层中定义的接口。

4.在domain领域层包下的子领域包manage下的repository包中定义持久层的接口。

5.在infrastructure包基础设施层下的repository包下实现在领域层定义的持久层接口。

12.网关注册服务接口领域服务实现

上面实现了网关的服务注册,接下来在本章我们要提供用于RPC服务注册的接口

在一个RPC的服务注册中,需要包括三个部分:RPC服务系统信息、这个服务下的所有接口信息、接口下的所有方法信息。分批地向网关中心完成注册操作。所有信息注册完成后,才能让网关算力服务与RPC的接口进行关联,也就是把RPC接口分配到处理的网关服务上去。这,就是注册中心的作用。

网关中心维护RPC服务注册的库表;application_system、application_interface、application_interface_method

那么这里先来开发这样一块的功能接口,允许外部通过 HTTP 接口进行注册服务。

具体实现:

在注册RPC服务中,分为:服务的系统信息、接口信息、方法信息,所以要提供了3个接口。

1.在用户接口层interfaces包下创建RpcRegisterManage类中提供对外暴露的注册RPC到注册中心的接口,包括三个接口,分别注册务的系统信息、接口信息、方法信息。

2.在应用层application包下创建IRegisterManageService接口,里面提供对应的三个方法。

3.在领域层domain包下创建register子领域包,子领域包下又分别创建model、repository、service包,然后在service包下创建IRegisterManageServiceImpl实现在应用层application定义的IRegisterManageService接口。直接调用持久层的接口。

4.在repository包下创建IRegisterManageRepository接口,里面定义持久层的对应接口(相当于防腐层)。

5.在infrastructure基础层包下定义对应的dao接口与其实现类(仓储服务)。

具体的包结构如下:

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

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

相关文章

私域流量引流方式有哪些?

私域流量引流的方法无非是营销渠道投放、各平台KOL投放、自有自媒体平台账号内容引流、线下引流、老客户转介绍裂变等几个方面,下面对各种不同方法进行简单介绍。 1、营销渠道投放:选择广点通、粉丝通、某些app的信息流和dou等大平台自带的推广渠道工具…

【Scala---04】函数式编程 『 函数 vs 方法 | 函数至简原则 | 函数式编程』

文章目录 1. 函数 vs 方法1.1 方法(1) 定义方法(2) 运算符即方法 1.2 函数(1) 定义函数(2) 匿名函数 1.3 方法转为函数1.4 可变参数&默认参数 2. 函数至简原则3. 函数式编程3.1 函数式编程思想3.3 函数柯里化&闭包3.5 递归 & 尾递归 4. 补充4.1 访问元祖元素4.2 &g…

揭秘“循环购”模式:为何商家如此慷慨,消费者又能获利?

亲爱的朋友们,我是吴军。今天,我将为大家揭开一种备受瞩目的商业模式——“循环购”的神秘面纱。你是否也好奇,为何商家愿意在你消费后给予丰厚的回馈,甚至让你在消费过程中还能赚取收益?这种模式的背后到底隐藏着什么…

Excel文件解析---超大Excel文件读写

1.使用POI写入 当我们想在Excel文件中写入100w条数据时,使用XSSFWorkbook进行写入时会发现,只有将100w条数据全部加载到内存后才会用write()方法统一写入,效率很低,所以我们引入了SXXFWorkbook进行超大Excel文件读写。 通过设置 …

IMU在羽球发球力中的应用

在羽毛球运动中,发球不仅是比赛得分的关键,其技术细节更是影响比赛走向的重要因素。近期,来自斯洛伐克和波兰的科研团队利用先进的IMU传感器技术,对顶尖选手的发球技巧进行了深度分析,旨在揭示不同发球方向对上身动作的…

通过线程池开启异步任务 @Async

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响用户体…

《第一行代码》第二版学习笔记(7)——使用通知和摄像头

文章目录 一、使用通知二、调用摄像头 介绍了通知基于8.0的使用方法和如何调用摄像头拍照 一、使用通知 public void onClick(View v) {if (v.getId() R.id.send_notice){Intent intent new Intent(this,NotificationActivity.class);PendingIntent pi PendingIntent.getAct…

如何快速找出文件夹里的全部带有英文纯英文的文件

参考此文章:如何快速找出文件夹里的全部带有中文&纯中文的文件 只需要根据自己的需求,把下面相关的设置调整好即可

KaiwuDB 解析器之语义解析

KaiwuDB 解析器介绍 解析器是数据库系统的重要组成部分之一,主要的功能是将客户端输入的 SQL 语句分解为语法单元,然后将这些语法单元转化成数据库内部可识别的数据结构,最终生成数据库可以执行的计划。 KaiwuDB 的一条 SQL 执行的整个生命…

事件知识图谱 - EventKGE_Event knowledge graph embedding with event causal transfer

EventKGE: Event knowledge graph embedding with event causal transfer 作者:Daiyi Li(南航) 来源:2023 Knowledge-Based Systems(中科院一区,影响因子8.8) 论文:[ScienceDirec…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月6日,星期一

每天一分钟,知晓天下事! 2024年5月6日 星期一 农历三月廿八 1、 五一假期全社会跨区域人员流动量预计约13.6亿人次,日均超2.7亿人次。 2、 祝贺!国羽男队第11次夺得汤姆斯杯冠军,国羽女队第16次夺得尤伯杯冠军。 3、…

Windows系统本地部署Net2FTP文件管理网站并实现远程连接上传下载

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一,特别是智能设备的大面积使用,无论是个人…

我独自升级崛起加速器推荐 用什么加速器好用 免费加速器推荐

新韩漫公司所发布的这项动作游戏已向玩家们敞开大门,为大家带来了前所未有的游戏体验和乐趣。这个游戏内包含了大量令人着迷的故事、令人印象深刻的战斗场景以及丰富多样的娱乐元素。在这其中最为引人注目的一点就是游戏内容中融入了“虚拟角色”的元素,…

Docker Compose:简化多容器应用部署

序言 在当今的软件开发中,容器化技术的使用已经很普遍了。而 Docker 作为其中最流行的容器化平台之一,为开发者提供了方便、快捷、一致的开发和部署环境。但是,当我们的应用开始变得更加复杂,涉及到多个容器时,手动管…

HTML_CSS学习:定位

一、相对定位 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>相对定位</title><style>.outer{width: 500px;background-color: #999ff0;border: 1px solid #000;p…

vue-cli+vue3+vite+ts 搭建uniapp项目全过程(一)

unapp官方提供了cli 脚手架创建 uni-app 项目的文档 Vue3/Vite版要求 node 版本 18、20使用Vue3/Vite版创建不会提示选择模板&#xff0c;目前只支持创建默认模板 本文以vue3vitets为例 1、初始化项目 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project 执行完生成…

OpenHarmony实战开发-请求自绘制内容绘制帧率

对于基于XComponent进行Native开发的业务&#xff0c;可以请求独立的绘制帧率进行内容开发&#xff0c;如游戏、自绘制UI框架对接等场景。 接口说明 开发步骤 说明&#xff1a; 本范例是通过Drawing在Native侧实现图形的绘制&#xff0c;并将其呈现在NativeWindow上 1.定义Ark…

与Apollo共创生态:助力自动驾驶迈向新台阶

引言Apollo七周年大会企业协同工具链携手伙伴共创生态未来展望与总结 引言 2024年4月19日&#xff0c;一场智能汽车未来的盛宴正朝我们走来——Apollo开放平台的七周年大会。 此次大会主题为“破晓•拥抱智变时刻”其中“破晓”象征着新时代的曙光&#xff0c;意味着智能汽车技…

电脑问题2【彻底删除CompatTelRunner】

彻底删除CompatTelRunner 电脑偶尔会运行CompatTelRunner造成CPU占用的资源非常大,所以这里要想办法彻底关闭他 本文摘录于&#xff1a;https://mwell.tech/archives/539只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 解决办法是进入W…

软件测试,软件评测师

如果你想考软件评测师证书&#xff0c;那这篇文章可以帮你少走很多弯路&#xff0c;估计你用别人一半的时间备考就可以通过考试&#xff0c;以下为本人亲身经验哈&#xff0c;你可以先收藏后看哦&#xff0c;提前祝你考试过过过。 如果以后想从事一份软件测试工程师的工作&…