流程设计
上一节我们初始化了整个网关项目,本节我们思考下网管注册中心的作用,并设计它基本的数据库表.(本节内容几乎是转载的,地址)
网关注册中心,是一个多边服务,管理的是RPC服务向网关通信层的关联注册,相当于中间的桥梁。
这就像美团外面平台,一手管理着商家、一手服务着用户。让用户的订单又商家生产,再配送给用户。而我们的网关注册中心也是这样,一手管理着通信,一手管理着服务。让RPC注册到通信层,在用户调用HTTP接口时,可以把协议转换后调用到对应的RPC服务上。如下图(图片来自于xfg)
基于以上这样的情况,所以我们要在注册中心维护:网关通信表、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。