ATMP设计
/*******************************************************************************
* 主控进程流程 AtmpMain:
*******************************************************************************/
1、守护进程 DaemonInit();
2、设置信号处理函数 SIGCHLD、SIGCLD、SIGTERM( Exit--释放资源 )
3、加载配置信息 LoadConfig
(1) IPC KEY信息
(2) 服务进程列表 AtmpServer, AmtpJob, AtmpMonitor
4、创建消息队列和共享内存
5、启动所有服务进程 fork-execl
将进程ID号保存下来存放到临时文件中中
6、循环检查子进程运行情况
每隔20秒钟检查消息队列、共享内存、信号灯使用情况;
检查子进程运行情况;
根据统计情况,按照重启机制重新启动进程。
重启机制:
(1) IPC出现问题(如消息队列堵塞等),重启所有进程 (RestartAll)
(2) 单个子进程出现问题, 重启单个进程(Restart)
kill(pid, 0) kill(SIGTERM)
/*******************************************************************************
* 监听进程 AtmpServer (用于接收ATMC的连接 常连接)
*******************************************************************************/
1、获取配置信息
方案:
(1) 消息队列方式
(2) 命令行传入方式
(3) 硬盘文件方式
2、创建守护进程 DaemonInit()
3、设置信号处理程序 SIGCHLD, SIGCLD, SIGTERM, SIGHUP, SIGINT, SIGSYS, SIGPIPE
4、创建socket,设置socket属性
5、绑定套接字 bind
6、监听 listen
7、循环处理ATMC连接
(1) 使用select监听是否有连接
(2) accept接收连接
(3) 交易分流
行内交易 -> MsgId1 -> AtmpJob
<- MsgId2 <- AtmpJob
银联交易 -> MsgId3 -> AtmpJob2
<- MsgId4 -> AtmpJob2
/*******************************************************************************
* AtmpJob 调度进程
*******************************************************************************/
1、获取配置信息
2、创建守护进程 DaemonInit()
3、设置信号处理程序
4、循环从消息队列 MsgId1 获取交易请求
消息格式:socket(2字节) + Atmc端信息( AtmcInfo )
(1) 获取消息
(2) 从客户端套接字获取请求报文
(3) 报文解析
(4) 交易预处理 PreProcess
(5) 交易处理 WrkProcess
(6) 交易延迟处理 AftProcess
(7) 组包发送到消息队列 MsgId2
( 登记监控信息 WriteMonitor (MonMsgId 监控消息队列)
(9) 返回(1)
/*******************************************************************************
* AtmpMon 监控进程
*******************************************************************************/
1、获取监控消息队列 MonMsgId
2、创建守护进程
3、创建子进程用于定时刷新监控界面
4、父进程循环处理监控信息
(1) 从监控消息队列获取监控信息
(2) 监控信息处理
/*******************************************************************************
* AtmpStrike 自动冲正进程
*******************************************************************************/
1、创建守护进程
2、循环处理待冲正记录
(1) 从数据库获取待冲正记录
(2) 调用冲正函数处理
(3) 更新冲正结果(冲正成功,冲正次数)
(4) 等待间隔时间 sleep(delay);
注:本人刚接触ATMP端开发不久,需望各位牛人多多指点。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
NICE JOB
看标题是P 不是C
功能还不如我十年前做的全,钞箱管理、设备管理、部件管理……啥啥都没有。
坐沙发