基于消息队列异步通信机制在ECDS直连系统中的应用

来源 :宁波职业技术学院学报 | 被引量 : 0次 | 上传用户:meimei5211314
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要: 设计了商业银行行内的ECDS直连系统及其通讯层的接口,并通过消息队列的异步访问模式探讨了ECDS直连系统与前置机之间的报文交换原理。结果表明:该通讯方式能够保证系统稳定、可靠运行以及能较好的提高系统的效率。
  关键词: ECDS直连系统; 消息队列; 异步访问
  中图分类号: TP 393 文献标志码: A 文章编号: 1671-2153(2015)04-0065-04
  1 ECDS直连系统
  电子商业汇票(ECDS)系统的建成并运行,对我国的金融市场意义重大。作为金融业为系统参与者提供了多种接入方式以满足不同规模的商业银行、财务公司实现不同的业务需要。ECDS直连系统就是商业银行以直连接入的方式与中国人民银行ECDS系统对接,从而实现业务需求。
  前置机系统[1]是商业银行业务进出ECDS系统的唯一途径,但是它只提供与中国人民银行ECDS系统之间的业务通讯,而银行行内系统与ECDS系统的对接问题要求自行解决。本文所指的商业银行ECDS直连系统就是处于前置机和商业银行之间的业务转换和通讯系统,同时也是前置机系统和商业银行行内系统之间的信息交互桥梁,它主要负责完成商业银行的行内系统与前置机之间的数据交互。
  2 ECDS直连系统通讯层接口设计
  对于ECDS直连系统在商业银行与前置机之间的报文交换,其通讯层的整体架构设计如图1所示。
  中国人民银行ECDS系统与商业银行行内系统交互数据的中间载体为队列。对于行内系统发往前置机系统的往包,行内系统按要求自动生成报文号,并以规定的顺序与格式把往包数据通过商业银行电子汇票系统平台端API函数写入消息队列。在经直连系统转换处理时,该系统再以规定的格式与顺序把往包报文从该队列中读出并设计组包发送。对于从前置机发往行内系统的来包,直连转换系统以约定的格式和顺序将来包内容写入队列,然后再由商业银行的行内程序以规定的格式和顺序将其从队列中(通过API)读出并处理。
  对于AS/400的行内主机,队列用DTAQ实现,对于AIX/SCO/HP等其他UNIX平台的行内主机,队列采用文件模拟实现队列的功能。
  AS/400的行内主机系统通过DTAQ与直连转换系统进行数据交互,直连转换系统不提供队列操作的API函数。对于AIX/SCO/HP等其他UNIX平台的行内主机系统,则向行内提供直连转换系统API以实现与队列的数据交互。
  直连系统通过商业银行电子汇票系统平台端的API接口与ECDS单一前置机系统之间进行数据报的转发。而在商业银行电子汇票直连系统内部,通过SOCKET设置其应用程序端口,来实现行内系统与中国人民银行ECDS系统平台之间的数据传输。若商业银行自身有MQ等消息中间件,则图1中的通讯模块可替换为消息中间件的方式实现行内系统与中国人民银行ECDS系统平台之间的数据传输。
  3 消息队列
  3.1 分布式消息队列的概念
  在跨进程通信时,通常需要一个独立的载体实现它们之间的消息传递。以队列的方式来传递消息既具有数据的独立性又存在进程间的连贯性。无论是在单机环境还是网络环境,它都作为消息的载体,由一个个消息串连接而成。在局域网或是广域网内,它能够被所有经过授权的网络节点所共享,如图2所示。因此,把这一类消息队列称为分布式消息队列[2]。由于消息队列的特殊数据结构,使得分布在网络环境中的各类节点在进行消息传送时,都具有自己对数据的独立管理和访问功能;对于在C/S网络环境下的数据访问,分布式消息队列模式仍然适用。
  由于消息队列的数据传送要依靠其程序的API接口函数,所以在很多情况下,对网络环境和单机环境API接口的兼容性要求很高。在网络环境下,由于资源共享的优势,服务器和客户端需要频繁传送消息。该分布式消息队列根据自身独立存在的特点,能够实现对数据独立管理的功能,所以在它的支持下,通讯双方不必担心数据在通信层的传送是否发生错误,只要专注于自己的业务数据即可。
  3.2 分布式消息队列中的API接口功能
  行内系统与中国人民银行前置机系统之间的数据交换,要通过消息队列作为中间载体。在分布式消息队列中,提供了大量API接口函数,以此来访问或操作队列上的数据。
  下面在分布式网络环境下,对这些API接口功能[3-4]和属性特征进行详细描述。
  3.2.1 队列的打开或创建
  Mqd_t mq_open(const char*pathname,int oflag,const struct sigevent*notification.../*mode_t mode,struct mq_attr attr/);
  对于任何进程访问分布式消息队列的第一步就是使用此函数建立或打开一个消息队列,该消息队列被打开后,除用于消息的发送与接收外,更重要的是方便日后队列的管理。
  在上述参数中pathname表示分布式环境下消息队列的网络路径,oflag用于表示以读或写或读写的方式打开分布式消息队列;当实际要求创建一个新队列时(如已经指定O_CREATE标志),mode在用于队列管理中起到了用户身份鉴别的作用,Attr用于说明新建队列的各类属性特点。
  3.2.2 发送报文消息
  Int _send_(mqd_t mqdes, unsigned int prio struct mq_attr*attr,const struct sigevent*notification);
  当消息队列被创建或被打开后,其结果会返回一个描述字mqdes;创建队列的发送方通过send函数对该描述字所代表的目标程序发送数据。当然发送方在发送数据的同时还可以通过参数attr指针来指定以下选项:消息的类型、事务还是非事务、传递的方式以及是否加密传输、是否保存日志等;同时,参数notification用于表示系统发送消息时的方式(同步发送或异步发送)。   3.2.3 接收报文消息
  Int_receive_from_idsys(char*buf,int sync_flag);
  对于消息队列发送成功的数据,其目标程序所在的接收方,通过最初创建队列时产生的描述字mqdes,接收报文消息,接收时需使用receive函数对其进行检索筛选。其中参数buf表示接收到的报文放入buf中;sync_flag表示接收方检索的方式,0表示异步接收,1表示同步接收;参数nonblock表示函数调用的方式。
  4 异步报文处理模式
  商业银行的直连系统与中国人民银行 ECDS 系统的报文交互,其处理流程为:直连系统将待发的报文进行组装,并发送至消息队列,经中国人民银行前置机系统查询后,对其报文做相应的转换处理,发往中国人民银行;同时中国人民银行再通过前置机系统将ECDS系统处理的结果发送到消息队列,最后商业银行的直连系统得到消息队列的响应报文并进行处理。在处理报文的过程中,分为实时报文处理和异步报文处理。
  异步处理模式[5]:行内发送服务可多份(可以和网点交易服务捆在一起),但行内接受服务必须一个,且能将不同的同步响应准确返回到对应的网点交易服务。异步模式下,发送程序成功调用SEND_TO_IDSYS后,不用等待接收返回的9012报文,可以直接发送下一笔报文,这种模式支持多进程同时发送,如图3所示。
  在该模式下,一个完整的发送流程为:
  (1) 组包;
  (2) SEND_TO_IDSYS。
  其源代码为:
  int SetHeadMsgNo(const char * msg_no);//必选,报文序号
  int SetHeadMsgIP(const char * msg_ip);//必选,报文ip地址
  int SetHeadMsgId(const char * msg_id);//必选,报文标示号
  int SetHeadRefId(const char *ref_id);//必选,
  报文参考号
  int SetHeadWkdt(const char *wkdt); //必选,
  工作日期,yyyymmdd
  int SetHeadSndCode(const char *snd_code); //必选 发起节点代码
  int SetHeadRcvCode(const char *rcv_code); //必选 接收节点代码
  int SetHeadAppName(const char*app_name); //必选 应用名称
  int SetMsgVer(const char *msg_ver);//设置报文版本号
  void SetMsgSndTim(void); //设置发送时间
  void SetHeadInOut(const char * in_out);//必选,来帐往帐标识
  功能:设置报文头中字段的相关信息到buf中;
  int SetPkgValue(const char *tag_name, const char *value);
  功能:设置报文体信息;
  void GetPkg(char *out_buf);
  功能:获得要发送的报文,获得的报文存放在buf中;
  int SEND_TO_IDSYS (char *send_buf);
  功能:把组好的报文写入队列中。
  异步模式下,接收程序调用RECV_FROM_IDS?鄄
  YS时,必须设sync_flag = 0(或不设置,缺省值为0),同时接收程序将扫描接收队列和回应队列,即会接收到来帐指令或往账的回应指令。对于不同的指令,接收程序必须分别处理。如对来账指令,处理模式不变;对回应指令,则必须通过报文参考号(9012)或回应报文中的其他信息查找到原对应的往账指令并相应处理。一个完整的接收流程为:
  (1) RECV_FROM_IDSYS,sync_flag=0(缺省值);
  (2) 解包并处理(包括mbfe返回的9012、来账指令、其他异步回应);
  (3) COMMIT_CURRENT_MSG。
  5 结束语
  本文所指的ECDS直连系统是商业银行行内开发的独立系统,起到行内系统与中国人民银行ECDS系统之间数据交互的桥梁作用,它在通讯层与前置机之间的数据传输,本文主要以基于消息队列的Socket通讯方式为主。其实,在很多金融信息平台中,MQ中间件的应用也是很广泛的,但是MQ中间件更适用于实时通讯环境,而本文对于报文的收发处理,主要以异步处理模式为主,所以Socket通讯方式更为合适。
  参考文献:
  [1] 于会军. 基于商场收银POS一体化前置机系统的研究与实现[D]. 中南大学,2007.
  [2] 卢本捷. 分布式消息队列的理论、实现与应用[D]. 华中科技大学,2003.
  [3] 丁静. 基于Socket和消息队列的中后台接口通讯软件的设计[J]. 大连民族学院学报,2006(3):65-68.
  [4] 李光师. 如何在VB中利用Windows API调用其他应用程序[J]. 鞍山师范学院学报,2004(2):69-71.
  [5] 何红波,陆建德,丁卫平. 基于中间件MQSeries的消息队列异步通信服务的应用研究[J]. 南通大学学报:自然科学版,2006(12):86-89.
  (责任编辑:徐兴华)
其他文献
介绍某工程深基坑工程特点、基坑支护方案、施工过程以及基坑监测情况。
对新疆野生花卉匐生蝇子草进行了组织培养研究,结果表明:茎段为匐生蝇子草组培最适合外植体,初代培养最适宜芽诱导的培养基为MS+6-BA2.5mg/L+NAA0.2mg/L。诱导率最高可达85%;丛生芽继代
调查分析了24份中国南瓜农家品种资源的种子和幼苗的相关性状。结果表明,中国南瓜农家资源的种子和幼苗呈现遗传多样性的特征,种子长度、宽度、百粒重、幼苗子叶长度、幼苗子
对继代6代的蚕豆的再生植株的遗传变异进行田间鉴定、籽粒形态鉴定和DNA分子标记鉴定,结果表明:在田间对株型、叶色、茎色、花色、荚色进行鉴定均没有发现变异;对籽粒形态的鉴
以35个中熟、中晚熟、晚熟玉米品种为试材,对中熟、中晚熟与晚熟品种的产量、生物产量、产量构成因素、经济系数进行比较。结果表明,中熟、中晚熟品种的产量并不低于晚熟品种
重阳木以其生长速度快、木质好、根系发达、抗风能力强、对多种土壤适应性强、成活率高等一系列优点成为林业部门造林绿化的主要树种。我们了解的重阳木的性质是在酸性土壤、
摘 要: 针对德国在市场需求导向下开展职业教育的成功经验,进行了研究,以期为我国职业教育的发展寻求可借鉴的经验。  关键词: 职业教育; 市场需求; 人才培养; 德国  中图分类号: G710 文献标志码: A 文章编号: 1671-2153(2015)06-0009-03  现代管理学大师彼得·德鲁克说:培养人才的方向决定了员工(无论把他当成“人”或当成“资源”)究竟是更能发挥生产力,还是最后变
也许对于80后一代人来说,认识达·芬奇,源于小学课本里那篇著名的《达芬奇画鸡蛋》。但是,对于绝大多数的人来说,第一次踏入达·芬奇的艺术殿堂,恐怕是从那幅解释了什么叫
高速公路台背填土与路基填挖交界处的压实补强处理是修建高速公路中的主要工程环节之一,桥头跳车是修建高速公路工程中的难题之一。普通压实机械无法压实到位,采用液压夯实进行
随着社会的发展与进步,重视机电设备安装调试对于现实生活中具有重要的意义。在分析机电设备安装调试目的、试运行目的以及试运转的基本任务的基础上,重点分析了水处理站泥沙处