xframe的服务加载流程
1. 数据转发服务的运行与加载
先用数据转发服务来说明一下一个普通的服务的运行加载过程
数据库配置表结构如下:
Column | 含义 |
---|---|
id | 主键id |
src_ip | 数据源IP |
src_port | 数据源端口 |
src_type | 通讯协议 ,0:TCP SERVER,1:TCP CLIENT |
des_ip | 目的源IP |
des_port | 目的源端口 |
des_type | 通讯协议,0:TCP SERVER,1:TCP CLIENT |
一个转发器Transit对象结构应当如下
Transit | 转发器对象 |
---|---|
src_tcp | 源TCP实例,由src相关属性生成 |
des_tcp | 目的TCP实例,由des相关属性生成 |
假如当前配置表如下
id | src_ip | src_port | src_type | des_ip | des_port | des_type |
---|---|---|---|---|---|---|
1 | 127.0.0.1 | 10001 | 0 | 127.0.0.1 | 20001 | 0 |
2 | 127.0.0.1 | 10002 | 0 | 127.0.0.1 | 20002 | 0 |
数据转发服务运行的流程如下
从本地配置读取数据库连接配置(url,user,password等),连接到数据库
DatabaseConfig databaseConfig=Config.parser(); Database database=Connect(databaseConfig);
读取数据库配置,生成对应的Transit实例,并且运行所有实例
List<Transit> list=database.queryList(Transit.class); for(Transit transit:list){ transit.stop(); }
不断轮询数据库,一旦数据库配置表发生变更,则启动或者停止对应的Transit实例
while(isRunning){ ... list.add(/*新添加的Transit*/); ... for(Transit transit:list){ if(/*如果transit在数据库中被删除*/){ //停止transit,并在list中删除transit transit.stop(); }else if(/*如果transit在数据库中被修改*/){ //重启transit tr