流程设计

上一节我们初始化了整个网关项目,本节我们思考下网管注册中心的作用,并设计它基本的数据库表.(本节内容几乎是转载的,地址

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

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

image-nsdy.png

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

整个系统目前所需的表如下图(图片来自于xfg)

  • 网关服务:指的是管理 api-gateway-core 通信组件的服务,这些服务被分为多组。例如公司中有交易组、账务组、营销组,按照不同组来分配对应的网关服务,各自在注册网关接口时可以做到压力分摊。

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

  • 网关分配:那么每个应用该注册到哪个网关里,就由这个表来控制。当你注册应用的时候,会有一个选项,问你要注册到哪个网关上。这部分一般也可以在指定的范围内,动态分配

  • 应用系统:描述一个RPC应用

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

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

流程实现

库表sql语句如下

 SET NAMES utf8mb4;
 SET FOREIGN_KEY_CHECKS = 0;
 ​
 -- ----------------------------
 -- Table structure for application_interface
 -- ----------------------------
 DROP TABLE IF EXISTS `application_interface`;
 CREATE TABLE `application_interface` (
   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
   `system_id` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '系统标识',
   `interface_id` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '接口标识',
   `interface_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '接口名称',
   `interface_version` varchar(16) COLLATE utf8_bin DEFAULT NULL COMMENT '接口版本',
   `create_time` datetime DEFAULT NULL COMMENT '创建时间',
   `update_time` datetime DEFAULT NULL COMMENT '更新时间',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 ​
 -- ----------------------------
 -- Records of application_interface
 -- ----------------------------
 BEGIN;
 COMMIT;
 ​
 -- ----------------------------
 -- Table structure for application_interface_method
 -- ----------------------------
 DROP TABLE IF EXISTS `application_interface_method`;
 CREATE TABLE `application_interface_method` (
   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
   `system_id` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '系统标识',
   `interface_id` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '接口标识',
   `method_id` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '方法标识',
   `method_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '方法名称',
   `parameter_type` varchar(256) COLLATE utf8_bin DEFAULT NULL COMMENT '参数类型;(RPC 限定单参数注册);new String[]{"java.lang.String"}、new String[]{"cn.bugstack.gateway.rpc.dto.XReq"}',
   `uri` varchar(126) COLLATE utf8_bin DEFAULT NULL COMMENT '网关接口',
   `http_command_type` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '接口类型;GET、POST、PUT、DELETE',
   `auth` int(4) DEFAULT NULL COMMENT 'true = 1是、false = 0否',
   `create_time` datetime DEFAULT NULL COMMENT '创建时间',
   `update_time` datetime DEFAULT NULL COMMENT '更新时间',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 ​
 -- ----------------------------
 -- Records of application_interface_method
 -- ----------------------------
 BEGIN;
 COMMIT;
 ​
 -- ----------------------------
 -- Table structure for application_system
 -- ----------------------------
 DROP TABLE IF EXISTS `application_system`;
 CREATE TABLE `application_system` (
   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
   `system_id` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '系统标识',
   `system_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '系统名称',
   `system_type` varchar(4) COLLATE utf8_bin DEFAULT NULL COMMENT '系统类型;RPC、HTTP',
   `system_registry` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '注册中心',
   `create_time` datetime DEFAULT NULL COMMENT '创建时间',
   `update_time` datetime DEFAULT NULL COMMENT '更新时间',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 ​
 -- ----------------------------
 -- Records of application_system
 -- ----------------------------
 BEGIN;
 COMMIT;
 ​
 -- ----------------------------
 -- Table structure for gateway_distribution
 -- ----------------------------
 DROP TABLE IF EXISTS `gateway_distribution`;
 CREATE TABLE `gateway_distribution` (
   `id` int(11) NOT NULL COMMENT '自增主键',
   `group_id` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '分组标识',
   `gateway_id` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '网关标识',
   `system_id` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '系统标识',
   `system_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '系统名称',
   `create_time` datetime DEFAULT NULL COMMENT '创建时间',
   `update_time` datetime DEFAULT NULL COMMENT '更新时间',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 ​
 -- ----------------------------
 -- Records of gateway_distribution
 -- ----------------------------
 BEGIN;
 COMMIT;
 ​
 -- ----------------------------
 -- Table structure for gateway_server
 -- ----------------------------
 DROP TABLE IF EXISTS `gateway_server`;
 CREATE TABLE `gateway_server` (
   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
   `group_id` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '分组标识',
   `group_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '分组名称',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 ​
 -- ----------------------------
 -- Records of gateway_server
 -- ----------------------------
 BEGIN;
 COMMIT;
 ​
 -- ----------------------------
 -- Table structure for gateway_server_detail
 -- ----------------------------
 DROP TABLE IF EXISTS `gateway_server_detail`;
 CREATE TABLE `gateway_server_detail` (
   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
   `gateway_id` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '网关标识',
   `gateway_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '网关名称',
   `gateway_address` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '网关地址:127.0.0.1',
   `status` varchar(4) COLLATE utf8_bin DEFAULT NULL COMMENT '服务状态:0不可用、1可使用',
   `create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
   `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
   PRIMARY KEY (`id`),
   UNIQUE KEY `idx_gateway_id` (`gateway_id`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 ​
 -- ----------------------------
 -- Records of gateway_server_detail
 -- ----------------------------
 BEGIN;
 COMMIT;
 ​
 -- ----------------------------
 -- Table structure for http_statement
 -- ----------------------------
 DROP TABLE IF EXISTS `http_statement`;
 CREATE TABLE `http_statement` (
   `id` bigint(11) NOT NULL AUTO_INCREMENT,
   `application` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '应用名称',
   `interface_name` varchar(256) COLLATE utf8_bin NOT NULL COMMENT '服务接口;RPC、其他',
   `method_name` varchar(128) COLLATE utf8_bin NOT NULL COMMENT ' 服务方法;RPC#method',
   `parameter_type` varchar(256) COLLATE utf8_bin NOT NULL COMMENT '参数类型(RPC 限定单参数注册);new String[]{"java.lang.String"}、new String[]{"cn.bugstack.gateway.rpc.dto.XReq"}',
   `uri` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '网关接口',
   `http_command_type` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '接口类型;GET、POST、PUT、DELETE',
   `auth` int(4) NOT NULL DEFAULT '0' COMMENT 'true = 1是、false = 0否',
   `create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
   `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 ​
 -- ----------------------------
 -- Records of http_statement
 -- ----------------------------
 BEGIN;
 INSERT INTO `http_statement` VALUES (1, 'api-gateway-test', 'cn.bugstack.gateway.rpc.IActivityBooth', 'sayHi', 'java.lang.String', '/wg/activity/sayHi', 'GET', 0, '2022-10-22 15:30:00', '2022-10-22 15:30:00');
 INSERT INTO `http_statement` VALUES (2, 'api-gateway-test', 'cn.bugstack.gateway.rpc.IActivityBooth', 'insert', 'cn.bugstack.gateway.rpc.dto.XReq', '/wg/activity/insert', 'POST', 1, '2022-10-22 15:30:00', '2022-10-22 15:30:00');
 COMMIT;
 ​
 SET FOREIGN_KEY_CHECKS = 1;
 ​

创建好对应库表好,还要在infrastructure层创建对应的po。

参考资料