您的位置:首页 > 其它

diagnose用于单据消息转储

2013-10-20 12:04 513 查看

1.简介

diagnose插件目前可用于单据接收方报文存储,转储文件可用于问题诊断(如界定是否是通信问题).

未来扩展:

.增强捕获条件配置:如仅捕获特定发送机构的单据,或者支持非单据消息.(可引入sheet_catcher的机制)

2.配置(diagnose.conf)

<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<config>
<dbc>laton</dbc>
<dump_path>data\dump_bill</dump_path> <!-- 转储目录-->
</config>


<dump_path>目录必须存在.

3.实现代码

////////////////////////////////////////////////////////////////////////////////
int CDiagnose::Activate() {
parent::Activate();

router_->RegisterInterceptor(::MsgInterceptCheck,::MsgIntercept);
return 0;
}

////////////////////////////////////////////////////////////////////////////////
bool CDiagnose::MsgInterceptCheck(CMsg *msg) {
MSGTYPE msg_type = msg->GetMsgType();
MSGID msg_id = msg->GetMsgID();
return (msg_type==MT_INDICATION&&msg_id==2800);
}

////////////////////////////////////////////////////////////////////////////////
int CDiagnose::MsgIntercept(CMsg *msg) {
const char *sz_sheet_type = msg->GetParam("f006n_0031");
const char *sz_sheet_id = msg->GetParam("f011v_0031");
const char *sz_src_orgid = msg->GetParam("Src_orgid");
if (sz_sheet_type==0||sz_sheet_id==0||sz_src_orgid==0) {
nlogger_->log(LO_STDOUT|LO_FILE,SEVERITY_ERROR,"消息包无效.\n");
return -1;
}
///< 文件名:源机构_单据类型_单据编号.dat
string fn = LogMsg("%s%s_%s_%s.dat",dump_path_.c_str(),sz_src_orgid,sz_sheet_type,sz_sheet_id);
if (Dump(fn.c_str(),msg)) {
nlogger_->log(LO_STDOUT|LO_FILE,SEVERITY_ERROR,"写文件%s失败,错误码:%d.\n",fn.c_str(),GetLastError());
return -1;
}

return 0; ///< 继续处理
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: