1.1用于处理与数据库交互的相关操作,包括如下业务功能:
- 数据字典业务,例如货币信息,交易所所信息,币对信息等。
- 资金账户业务,例如账户资金、持仓、委托及成交查询等。
- 客户端交互业务,例如登入、回话管理、订阅等管理。
- 策略管理业务,例如策略查询、创建、持仓查询等。
- 用户管理业务,例如用户创建、创建、权限管理等。
- 工作流管理业务,例如指令创建,指令报单等。
- 数据库表修改变更监控。系统启定时扫描配置文件中定义的表的字段,如果数据发生变更,会广播消息通知系统。
1.2 数据管理的消息定义
- 区间段为:200000-300000,具体消息定义设计参见:mbus_def_db_mgr.h文件
- 另外特别为广播消息定义区间段:210000开始,广播消息定义格式:MSG_ID_BROADCAST_XXXXXX
数据管理系统有如下模块组成:
(1)数据库访问模块(db-api)负责数据库的连接,连接池的管理,以及数据库访问操作以及接口返回。
(2)业务处理管理模块,负责消息分发处理。
各个业务处理器插件模块,负责调用数据访问模块接口,进行各个业务消息的业务处理。
(3)基础通讯模块,负责与客户端接网关与总线通信,接收消息,转发业务处理模块进行处理。
(4)数据库管理运行主体模块
- 负责数据库表数据变更监控
- 运行环境初始化。
3 数据库访问模块
- 数据存储接口API定义,主要为业务处理模块提供通用访问接口。
- MySQL数据库连接管理,主要包括数据库的心跳及重连等。
- MySQL数据库访问对接接口实现。
- 数据库语句创建工具函数实现。
3.2 结构图
静态结构图
3.3 接口
4 插件管理模块
- 负责插件的加载与卸载管理。
- 负责插件启动停止管理。
typedef ITaskHandlerImp* (*tagGetHandlerImpInstance)();
typedef ITaskHandlerImp* (*tagGetHandlerImpInstance)();
struct tagHandlerImpInstance {
boost::dll::shared_library shared_dll_lib;
std::string plugin_name; //插件名称
std::string plugin_dir; //插件存放路径
tagGetHandlerImpInstance pfn_handler_imp_instance; //业务处理器创建接口
ITaskHandlerImp* task_handler_imp; //业务处理器实例
void* instance_handle; // so文件实例句柄
};
//每个插件暴露的接口
ITaskHandlerImp* API_GetTaskHandlerImp();
5 业务分发处理模块
5.1 功能说明
主要是对业务请求分发管理及处理,包括如下功能:
- 业务请求队列管理。
- 业务线程及线程管理。
- 数据库表修改变更监控及变更消息广播。
- 总线业务及接入网关请求处理。
5.2 流程设计
消息处理函数接口定义
using MsgHandlerCB = std::function<void(net::task_from_cli_sptr& task)>;
using MsgHandlerCBMap = std::map<int, MsgHandlerCB> ;
#define ON_MSG_CALLBACK(msg_id, cb) \
msg_id_cb_map_[msg_id] = std::bind(&cb, this, std::placeholders::_1)
每个消息注册一个消息处理函数。
(1)客户端消息请求处理器
(2)消息总线消息应答处理
5.4 其他
- 数据库配置信息
- 插件配置信息
- 表数据变更监控信息