首页> 中国专利> 一种银行账户动账通知服务系统

一种银行账户动账通知服务系统

摘要

本发明涉及一种银行账户动账通知服务系统,用于银行账户单笔收、付款交易金额达到预设条件时将动账信息通知客户;上述动账通知服务系统部署有消息生产方程序模块和消息消费方程序模块;上述消息生产方程序模块用于采集银行账户动账数据,包括若干采集银行账户动账数据线程;任一上述采集动账数据周期任务线程用于银行账户动账通知消息采集并落地;上述消息消费方程序模块用于发送银行账户动账数据,包括若干发送银行账户动账数据线程;任一上述发送动账数据周期任务线程用于银行账户动账通知消息发送。有益效果是按“生产者‑消费者”模型分层代码层次清晰,执行开销小资源利用率高。

著录项

  • 公开/公告号CN112463167A

    专利类型发明专利

  • 公开/公告日2021-03-09

    原文格式PDF

  • 申请/专利号CN202011258020.0

  • 发明设计人 王智超;孙婧;

    申请日2020-11-11

  • 分类号G06F8/60(20180101);G06F9/50(20060101);G06F11/30(20060101);G06Q40/02(20120101);

  • 代理机构31317 上海恒慧知识产权代理事务所(特殊普通合伙);

  • 代理人张宁展

  • 地址 200120 上海市浦东新区银城路9号

  • 入库时间 2023-06-19 10:08:35

说明书

【技术领域】

本发明涉及银行信息化技术领域,具体涉及一种银行账户动账通知服务系统。

【背景技术】

银行账户消息服务(动账通知)的系统,根据客户约定,当客户结算账户单笔收、付款交易金额达到预设条件时,银行可以通过电子渠道或手机短信等方式,及时将动账信息通知客户。例如:信用卡消费一定金额会用短信通知信用卡持卡人。有的银行是300元,有的银行是自己设定,如果设定成1元,就是说刷卡0.9元不通知,超过1元就通知。300元和1元这里都是动帐通知额度。当然这项服务有的银行是免费的,有的收费。

现有的银行账户动账通知服务系统:1、程序部署上为单机部署,存在宕机导致的程序异常风险,可靠性差;2、并发实现上采用fork子进程组调用方式,资源消耗大;3、功能集成上针对每个消费方业务系统需要单独布置一套程序,没有提取公共模块,不便于后续代码优化;4、程序自动化上为程序启动时读取配置文件,参数修改不能自动更新缓存,需要重启进程才能生效;5、仅单纯的追加系统日志,需人工定期清理日志确保操作系统空间可用。

进程是资源分配最小单位,线程是程序执行的最小单位。两者根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)。内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。

复刻(英语:fork,又译作派生、分支)是UNIX或类UNIX中的分叉函数,fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。

线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。JAVA语言的newScheduledThreadPool线程池支持定时,以及周期性的任务执行,我们可以延迟任务的执行时间,也可以设置一个周期性的时间让任务重复执行,该线程池中有以下两种延迟的方法,scheduleAtFixedRate以及scheduleWithFixedDelay。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。GC(Garbage Collection):JAVA/.NET中的垃圾回收器。Air可以远程或者本地调用Java程序。用logback日志配置简单,易于上手。

本发明针对上述1、单机部署,系统风险高;2、功能未集成,模块耦合度较高;3、无自动化配置能力,存在一定的运维成本;这些现有技术的缺陷,利用上述进程及线程技术对银行账户动账通知服务方法及其系统作了改进。

【发明内容】

本发明的目的是,提供一种按“生产者-消费者”模型分层代码层次清晰,执行开销小资源利用率高的银行账户动账通知服务系统。

为实现上述目的,本发明采取的技术方案是一种银行账户动账通知服务系统,用于银行账户单笔收、付款交易金额达到预设条件时将动账信息通知客户;上述动账通知服务系统部署有消息生产方程序模块和消息消费方程序模块;上述消息生产方程序模块用于采集银行账户动账数据,包括若干采集银行账户动账数据线程;任一上述采集动账数据周期任务线程用于银行账户动账通知消息采集并落地;上述消息消费方程序模块用于发送银行账户动账数据,包括若干发送银行账户动账数据线程;任一上述发送动账数据周期任务线程用于银行账户动账通知消息发送。

进一步地优选技术方案,上述消息生产方程序模块用于采集银行账户动账数据执行以下步骤:

C1、银行账户动账消息生产方进程初始化;

C2、初始化银行账户动账消息生产方进程内存配置;

C3、银行账户动账消息生产方进程建立采集动账数据周期任务线程池;

C4、银行账户动账消息生产方进程循环读取数据库配置;

C5、银行账户动账消息生产方进程判断数据库配置一致性;

C6、如果数据库配置不一致,刷新银行账户动账消息生产方进程内存配置,根据获取的数据库配置重启/关闭采集动账数据周期任务线程,跳转执行C4步骤;

C7、如果数据库配置一致,银行账户动账消息生产方进程堵塞等待一个周期,跳转执行C4步骤;

任一上述采集动账数据周期任务线程用于银行账户动账通知消息采集并落地执行以下步骤:

C31、采集动账数据周期任务线程读取数据库获取业务参数;

C32、采集动账数据周期任务线程根据银行账户上主机查询明细、解析明细;

C33、如果上主机查询的明细有后续,采集动账数据周期任务线程记录动账通知,明细表落地,跳转执行C31步骤;

C34、如果上主机查询的明细无后续,采集动账数据周期任务线程更新明细末笔查询条件,退出采集动账数据周期任务线程;

上述消息消费方程序模块用于发送银行账户动账数据执行以下步骤:

F1、银行账户动账消息消费方进程初始化;

F2、初始化银行账户动账消息消费方进程内存配置;

F3、银行账户动账消息消费方进程建立发送动账数据周期任务线程池;

F4、银行账户动账消息消费方进程循环读取数据库配置;

F5、银行账户动账消息消费方进程判断数据库配置一致性;

F6、如果数据库配置不一致,刷新银行账户动账消息消费方进程内存配置,根据获取的数据库配置重启/关闭发送动账数据周期任务线程,跳转执行F4步骤;

F7、如果数据库配置一致,银行账户动账消息消费方进程堵塞等待一个周期,跳转执行F4步骤;

任一上述发送动账数据周期任务线程用于银行账户动账通知消息发送执行以下步骤:

F31、发送动账数据周期任务线程读取数据库获取业务参数;

F32、发送动账数据周期任务线程根据银行账户读取未发送动账通知记录,发送动账通知到各个消费方系统;

F33、退出发送动账数据周期任务线程。

进一步地优选技术方案,上述动账通知服务系统还部署有动账通知公共程序模块;上述动账通知公共程序模块包括同步内存对象属性程序子模块、定时任务调度程序子模块和动账查询程序子模块;上述步骤C2、步骤F2调用同步内存对象属性程序子模块初始化内存配置,上述步骤C3、步骤F3调用定时任务调度程序子模块进行周期任务线程业务处理,上述步骤C32调用动账查询程序子模块上主机查询明细。

优选地,上述的一种银行账户动账通知服务系统所述步骤C33明细表落地是指中登业务消息采集落地、上期所业务消息采集落地和社保业务消息采集落地;所述步骤F32发送动账通知是指中登业务消息发送、上期所业务消息发送和社保业务消息发送。

优选地,上述的一种银行账户动账通知服务系统所述动账查询程序子模块根据银行业务特点分为对私动账查询程序子模块和对公动账查询程序子模块。

优选地,上述的一种银行账户动账通知服务系统所述步骤C32根据银行账号末笔明细的查询日期、日志号、时间戳、顺序号、分录序号调用所述对公动账查询程序子模块上主机查询明细、解析明细;当业务类型为中登时,所述步骤C32对私方为借记卡的情况调用所述对私动账查询程序子模块上主机查询获取附言信息。

进一步地优选技术方案,上述动账通知服务系统还部署有实时监控方程序模块,上述消息生产方程序模块和消息消费方程序模块内部部署有内部监控程序子模块;上述实时监控方程序模块和上述内部监控程序子模块配合用于对消息生产方程序模块和消息消费方程序模块异常情况的实时监控报警。

优选地,上述实时监控方程序模块包括外部程序监控子模块、消息采集监控子模块和消息发送监控子模块;上述外部程序监控子模块通过外部程序监控日志信息、日志是否增长来判断所述银行账户动账消息生产方进程和银行账户动账消息消费方进程是否正常进行监控报警;上述消息采集监控子模块对于银行账户动账消息生产方进程消息采集过程中遇到的异常进行监控报警;上述消息发送监控子模块对于银行账户动账消息消费方进程消息发送被拒或超时进行监控报警。

优选地,上述日志采用logback日志管理配置,日志可以自动清理。

优选地,上述的一种银行账户动账通知服务系统采用Java程序语言编程部署,上述周期任务线程池是使用newScheduledThreadPool线程池框架建立的线程池。

本发明有如下有益效果:1)本发明分析各银行账户动账通知业务的基础功能点,按“生产者-消费者”模型分层,独立出相关模块,代码层次更清晰;2)本发明采用newScheduledThreadPool线程池框架,执行开销小,资源利用率高,且具有可管理性;3)本发明在每个轮询周期中读取数据库,对于程序执行时间段、轮询频次、节假日参数、并发数、发送目标、报文类型等配置动态刷新,即时生效;4)本发明为集群部署,高可用且性能可扩展;5)本发明采用logback日志管理配置化,日志可以自动清理。

【附图说明】

图1是一种银行账户动账通知服务系统逻辑架构示意图。

图2是一种银行账户动账通知服务系统消息生产方程序模块流程图。

图3是一种银行账户动账通知服务系统消息消费方程序模块流程图。

图4是一种银行账户动账通知服务系统动账通知公共程序模块架构示意图。

【具体实施方式】

下面结合实施例并参照附图对本发明作进一步描述。

在本发明中,服务器是在网络上提供、管理网络资源的一个计算机或设备,终端可指各种类型的装置,包括(但不限于)无线电话、蜂窝式电话、膝上型计算机、多媒体无线装置、无线通信个人计算机(PC)卡、个人数字助理(PDA)、外部或内部调制解调器等。客户端设备,即终端可为任何经由无线信道和/或经由有线信道(例如,光纤或同轴电缆)与服务器通信的数据装置。终端可具有多种名称,例如移动台、移动装置、移动单元,移动电话、远程站、远程终端机、远程单元、用户装置、用户设备、手持式装置等。不同终端可并入一个系统中。终端可为移动的或固定的,且可分散遍及一个通信网络。

实施例1

本实施例实现一种银行账户动账通知服务系统。

附图1是一种银行账户动账通知服务系统逻辑架构示意图。如附图1所示,本实施例一种银行账户动账通知服务系统,用于银行账户单笔收、付款交易金额达到预设条件时将动账信息通知客户;上述动账通知服务系统部署有消息生产方程序模块和消息消费方程序模块;上述消息生产方程序模块用于采集银行账户动账数据,包括若干采集银行账户动账数据线程;任一上述采集动账数据周期任务线程用于银行账户动账通知消息采集并落地;上述消息消费方程序模块用于发送银行账户动账数据,包括若干发送银行账户动账数据线程;任一上述发送动账数据周期任务线程用于银行账户动账通知消息发送。

附图2是一种银行账户动账通知服务系统消息生产方程序模块流程图。如附图2所示,上述消息生产方程序模块用于采集银行账户动账数据执行以下步骤:

C1、银行账户动账消息生产方进程初始化;

C2、初始化银行账户动账消息生产方进程内存配置;

C3、银行账户动账消息生产方进程建立采集动账数据周期任务线程池;

C4、银行账户动账消息生产方进程循环读取数据库配置;

C5、银行账户动账消息生产方进程判断数据库配置一致性;

C6、如果数据库配置不一致,刷新银行账户动账消息生产方进程内存配置,根据获取的数据库配置重启/关闭采集动账数据周期任务线程,跳转执行C4步骤;

C7、如果数据库配置一致,银行账户动账消息生产方进程堵塞等待一个周期,跳转执行C4步骤。

任一上述采集动账数据周期任务线程用于银行账户动账通知消息采集并落地执行以下步骤:

C31、采集动账数据周期任务线程读取数据库获取业务参数;

C32、采集动账数据周期任务线程根据银行账户上主机查询明细、解析明细;

C33、如果上主机查询的明细有后续,采集动账数据周期任务线程记录动账通知,明细表落地,跳转执行C31步骤;

C34、如果上主机查询的明细无后续,采集动账数据周期任务线程更新明细末笔查询条件,退出采集动账数据周期任务线程。

附图3是一种银行账户动账通知服务系统消息消费方程序模块流程图。如附图3所示,上述消息消费方程序模块用于发送银行账户动账数据执行以下步骤:

F1、银行账户动账消息消费方进程初始化;

F2、初始化银行账户动账消息消费方进程内存配置;

F3、银行账户动账消息消费方进程建立发送动账数据周期任务线程池;

F4、银行账户动账消息消费方进程循环读取数据库配置;

F5、银行账户动账消息消费方进程判断数据库配置一致性;

F6、如果数据库配置不一致,刷新银行账户动账消息消费方进程内存配置,根据获取的数据库配置重启/关闭发送动账数据周期任务线程,跳转执行F4步骤;

F7、如果数据库配置一致,银行账户动账消息消费方进程堵塞等待一个周期,跳转执行F4步骤。

任一上述发送动账数据周期任务线程用于银行账户动账通知消息发送执行以下步骤:

F31、发送动账数据周期任务线程读取数据库获取业务参数;

F32、发送动账数据周期任务线程根据银行账户读取未发送动账通知记录,发送动账通知到各个消费方系统;

F33、退出发送动账数据周期任务线程。

附图4是一种银行账户动账通知服务系统消息消费方程序模块流程图。如附图4所示,进一步地优选技术方案,上述动账通知服务系统还部署有动账通知公共程序模块;上述动账通知公共程序模块包括同步内存对象属性程序子模块、定时任务调度程序子模块和动账查询程序子模块;上述步骤C2、步骤F2调用同步内存对象属性程序子模块初始化内存配置,上述步骤C3、步骤F3调用定时任务调度程序子模块进行周期任务线程业务处理,上述步骤C32调用动账查询程序子模块上主机查询明细。

优选地,上述的一种银行账户动账通知服务系统所述步骤C33明细表落地是指中登业务消息采集落地、上期所业务消息采集落地和社保业务消息采集落地;所述步骤F32发送动账通知是指中登业务消息发送、上期所业务消息发送和社保业务消息发送。

优选地,上述的一种银行账户动账通知服务系统所述动账查询程序子模块根据银行业务特点分为对私动账查询程序子模块和对公动账查询程序子模块。

优选地,上述的一种银行账户动账通知服务系统所述步骤C32根据银行账号末笔明细的查询日期、日志号、时间戳、顺序号、分录序号调用所述对公动账查询程序子模块上主机查询明细、解析明细;当业务类型为中登时,所述步骤C32对私方为借记卡的情况调用所述对私动账查询程序子模块上主机查询获取附言信息。

进一步地优选技术方案,上述动账通知服务系统还部署有实时监控方程序模块,上述消息生产方程序模块和消息消费方程序模块内部部署有内部监控程序子模块;上述实时监控方程序模块和上述内部监控程序子模块配合用于对消息生产方程序模块和消息消费方程序模块异常情况的实时监控报警。

优选地,上述实时监控方程序模块包括外部程序监控子模块、消息采集监控子模块和消息发送监控子模块;上述外部程序监控子模块通过外部程序监控日志信息、日志是否增长来判断所述银行账户动账消息生产方进程和银行账户动账消息消费方进程是否正常进行监控报警;上述消息采集监控子模块对于银行账户动账消息生产方进程消息采集过程中遇到的异常进行监控报警;上述消息发送监控子模块对于银行账户动账消息消费方进程消息发送被拒或超时进行监控报警。

优选地,上述日志采用logback日志管理配置,日志可以自动清理。

优选地,上述的一种银行账户动账通知服务系统采用Java程序语言编程部署,上述周期任务线程池是使用newScheduledThreadPool线程池框架建立的线程池。

实施例2

本实施例实现一种银行账户动账通知服务系统。本实施例在实施例1的基础上具体实现。

本实施例实现一种银行账户动账通知服务系统根据配置主动轮询账户明细,并实时发送消费方系统通知动账信息。本实施例一种银行账户动账通知服务系统支持本外币对公账户、多级账簿、借记卡、NRA账户等多种账户类型的实时轮询明细查询。支持按不同报文格式、不同通讯方式轮询发送动账通知报文,对于消费方系统异常提供监控告警机制。本实施例一种银行账户动账通知服务系统逻辑架构示意图如图1所示。

本实施例一种银行账户动账通知服务系统主要包括如下模块:

1、MsgCommon公共模块,分为以下子模块:

(1)memSync读取数据库同步内存对象属性模块:创建数据库连接,根据业务类型查询UT_MSG_SYS动账通知系统表及UT_MSG_HOLIDAY动账通知节假日表,得到以下成员属性:系统开关、生产方/消费方线程池大小、生产/消费方轮询周期、轮询起始时间、轮询停止时间、是否节假日等,如果与内存中的参数不一致时更新内存。

(2)scheduleService定时任务调度模块:当满足以下条件:(1)系统开启、(2)当日为任务启用日、(3)在调度时间范围内,则创建周期任务线程池框架ScheduledThreadPool,抛出线程通过scheduleWithFixedDelay(command,initialDelay,delay,unit)固定时间轮询任务,由线程进行消息采集/发送的业务处理。当内存参数变动时,遇到系统关闭、任务非启用日、调度时间不符等情况则关闭定时调度线程池(等待任务完成,不超过一个周期)。遇到线程数配置变动、自动重启周期任务。

(3)主机对私查询模块。

(4)主机对公查询模块。

2、MsgProducer动账消息采集,作为消息生产方,会调用公共模块的4大子模块,数据流详见附图2一种银行账户动账通知服务系统消息生产方程序模块流程图,按目标方分为以下子模块:

(1)消息采集落地-中登;

(2)消息采集落地-上期所;

(3)消息采集落地-社保。

3、MsgConsumer动账消息发送,作为消息消费方,会调用公共模块(4大子模块),数据流详见附图3一种银行账户动账通知服务系统消息消费方程序模块流程图,按目标方分为以下子模块:

(1)消息发送-中登;

(2)消息发送-上期所;

(3)消息发送-社保。

4、MsgMonitor系统实时监控,分为以下子模块:

(1)外部程序监控:通过外部程序监控日志信息内容、日志是否增长来判断进程是否正常,进行监控报警。

(2)消息采集监控:每次消息采集的过程中遇到异常,如数据库连接异常、AIR主机通讯异常等,则发送UDP包至银行分行监控平台。

(3)消息发送监控:类似消息采集监控,遇到发送被拒或超时时,则发送UDP包至银行分行监控平台。

本实施例一种银行账户动账通知服务系统由于采用了上述技术方案:

1)提升了系统性能和稳定性,降低了系统性风险;

2)模块层次清晰,易于交接管理和后期代码维护;

3)业务可延展,并发性能可扩展;

4)系统自动化程度高,运维成本低。

本实施例一种银行账户动账通知服务系统数据采集模块,数据流见附图2一种银行账户动账通知服务系统消息生产方程序模块流程图所示。主要流程如下:

1、首先读取配置加载数据库驱动;

2、获取输入参数的业务种类,并通过构造方法MsgProducer(String type)实例化对象;

3、主进程调用公共模块进行内存同步和线程调度;同一业务允许并行查询不同账号,但对于同一账号只能被一个线程顺序查询;

4、消息采集业务实现:

1)连接数据库,根据业务种类读取动账通知账号采集控制表,查询启用状态为Y-启用、查询同步状态为0-可查询,且最新轮询时间戳在一个轮询周期前的一条账号记录(含币种),读取时须加行级锁,更新此行设置查询同步状态为1-已被查询,并实例化MySyncTask_[TYPE]对象进行明细查询;

2)根据当前账号末笔明细的查询日期、日志号、时间戳、顺序号、分录序号等通过AIR方式调用对公账户信息和对公明细查询接口采集动账消息;

3)业务类型为中登时,除了调用对公查询明细外,需对对私方为借记卡的情况调用借记卡查询接口获取附言信息;如遇到对公明细查询后借记卡明细数据不存在的则阻塞一个周期再查一次,第二次仍查询不到的则继续下一步;

4)按当前业务种类解析报文并落地记录明细表;如果有后继则继续查询,直到无后继,插表失败时判断是否是因为键值重复,是则继续,否则发送告警UDP,中断业务处理,跳转6);

5)更新采集控制表中的该账号末笔明细查询条件,作为下一周期的初始查询条件;

6)为防止内存泄露,对象堆空间需取消引用使得能被GC回收;最后将动账通知账号采集控制表中的轮询时间戳改为当前时间戳,同步状态恢复为0-未查询。

本实施例一种银行账户动账通知服务系统数据发送模块,数据流见附图3一种银行账户动账通知服务系统消息消费方程序模块流程图所示。主要流程如下:

1、首先读取配置加载数据库驱动;

2、获取输入参数的业务种类,并通过构造方法MsgConsumer(String type)实例化对象;

3、主进程调用公共模块进行内存同步和线程调度;

4、消息发送业务处理:

1)连接数据库,根据业务种类在系统表中获得发送IP和端口;读取消息发送控制表,查询启用状态为Y-启用、发送同步状态为0-可发送,且最新轮询时间戳在一个轮询周期前的一条账号记录,读取时须加行级锁,更新此行设置发送同步状态为1-发送中,并实例化sendTask_[TYPE]进行消息发送;

2)根据业务类型、客户帐号、币种,查询明细表中未发送记录,拼装报文,对于特定业务需做XML报文转换;

3)TCP发送报文至消费方系统;如遇到发送被拒或超时,则该笔明细需重发;如重发失败的,则退出发送流程;接收成功返回的更新明细表发送状态为1-已发送;

4)更新消息发送控制表轮询时间戳为当前时间,发送同步状态为0-可发送。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AcessMemory,RAM)等。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明原理的前提下,还可以做出若干改进和补充,这些改进和补充也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号