9.网关注册中心服务初始创建
整理整个网关调用链路流程,梳理核心服务。并完成网关中心简单DDD模型结构工程的搭建,与库表连通可以查询接口映射数据。
在前面我已经开发出了一个初具模型的核心通信组件,那么我该如何使用这个组件呢?接下来就是要思考整个项目的架构问题了。
- 如图所示,api-gateway-core 是最核心的通信层。那么它还需要把注册的网关接口在通信核心服务中启动起来。那么怎么启动呢?
- 这个启动过程首先来自于 api-gateway-sdk 向 api-gateway-center 推送注册接口,之后在通过网关引擎 api-gateway-engin 拉取接口并在本地服务完成注册。
- 最后再调用到网关接口时,则是通过 api-gateway-core 调用到对应的 RPC 应用中。
- 那么 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接口与其实现类(仓储服务)。
具体的包结构如下: