本发明涉及银行支付系统数据处理技术领域,尤其涉及一种支付系统消息控制和处理方法、装置。
背景技术:
目前,随着金融业的不断发展,诸如外币支付等业务也得到了空前的发展。外币支付系统(chinaforeignexchangepaymentsystem,简称cfxps)是以业务处理中心(简称fxcc)为核心,由直接参与机构等单一法人集中接入,由结算银行(简称fxsi)进行银行间外币资金结算的系统。其中,业务处理中心主要负责外币支付指令的接收、存储、清分、转发,并将参与者的支付指令逐笔实时清算后,分币种分场次将结算指令提交结算银行进行结算。其中,外币支付系统的直接参与机构分为直接参与者和特许参与者,直接参与者是直接接入业务处理中心的银行业金融机构,特许参与者是直接接入业务处理中心的支付清算组织等法人机构;另外,委托直接参与者办理外币支付业务的机构为间接参与者。结算银行是中国人民银行指定或授权的商业银行,可以为直接参与者开立外币结算账户,负责参与者之间的外币资金结算。
当前,外币支付系统采用分布式应用架构。在外币支付系统的分布式应用架构中,对外部消息的监听、接收、处理是至关重要的环节。目前对外部消息的监听、接收、处理的实现主要有j2ee体系中的mdb(messagedrivenbean)和spring体系中的mdp(messagedrivenpojo)。而目前mdb和mdp这两种方式在系统环境上需要依赖容器,即mdb需要依赖j2ee容器、mdp需要依赖spring容器(容器是应用服务器中位于组件和平台之间的接口集合),这样严重制约了其使用场景,而外币支付系统中有诸多节点需要使用并最大程度地减少对容器的依赖。可见,现有技术中在不依赖容器的情况下,难以进行支付系统消息控制和处理。
技术实现要素:
本发明的实施例提供一种支付系统消息控制和处理方法、装置,以解决现有技术中在不依赖容器的情况下,难以进行支付系统消息控制和处理的问题。
为达到上述目的,本发明采用如下技术方案:
一种支付系统消息控制和处理方法,包括:
从支付系统的消息中间件中轮询读取消息,获取待处理业务报文;
判断当前线程数是否大于预先设置的最大线程数阈值;
在当前线程数小于所述最大线程数阈值时,读取所述待处理业务报文,并确定待处理业务报文的类型;
在待处理业务报文的类型满足预先设置的报文类型条件时,将待处理业务报文写入来报表;
若将待处理业务报文写入来报表未出现异常,启动新线程,对待处理业务报文进行处理;
若将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数大于等于预先设置的异常次数阈值,则将待处理业务报文放入错误队列;
若将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数小于预先设置的异常次数阈值,则将该待处理业务报文写入来报表出现异常的次数增加1,并抛出该待处理业务报文写入来报表出现的异常,制造事务回滚使得待处理业务报文回到消息中间件的消息队列中。
进一步的,所述的支付系统消息控制和处理方法,还包括:
在从支付系统的消息中间件中轮询读取消息时,若所述消息中间件中没有待处理业务报文,且在一预设读取时长内未读取到消息中间件中的待处理业务报文,则生成失效标识。
具体的,在待处理业务报文的类型满足预先设置的报文类型条件时,将待处理业务报文写入来报表,包括:
在待处理业务报文的类型为textmessage格式类型或bytesmessage格式类型时,将待处理业务报文写入来报表。
进一步的,所述的支付系统消息控制和处理方法,还包括:
在待处理业务报文的类型不为textmessage格式类型和bytesmessage格式类型时,将待处理业务报文的类型记录于系统异常日志中,并将所述待处理业务报文删除。
具体的,所述启动新线程,对待处理业务报文进行处理,包括:
将当前线程数增加1,并从待处理业务报文中获取报文业务号;
根据所述报文业务号获取与所述报文业务号对应的业务处理策略;
根据所述业务处理策略对待处理业务报文进行处理;
在对待处理业务报文进行处理后判断待处理业务报文的基础信息是否存在异常;
若待处理业务报文的基础信息存在异常,将来报表中记录待处理业务报文处理次数设为1,并将当前线程数减1,以结束对待处理业务报文的处理;所述基础信息包括待处理业务报文的报文格式以及报文处理权限;
若待处理业务报文的基础信息不存在异常,判断对待处理业务报文的处理返回值是否为空;
若对待处理业务报文的处理返回值为空,表示对待处理业务报文的数据处理正常,将当前线程数减1,以结束对待处理业务报文的处理;
若对待处理业务报文的处理返回值不为空,表示对待处理业务报文的数据处理出现异常,将待处理业务报文放入错误队列,将当前线程数减1,以结束对待处理业务报文的处理。
具体的,根据所述业务处理策略对待处理业务报文进行处理,包括:
根据待处理业务报文进行消息中间件操作;
若进行消息中间件操作正常,则进行消息中间件提交;
若进行消息中间件操作出现异常,则进行消息中间件回滚,不进行消息中间件提交;
若进行消息中间件提交时出现异常,则进行消息中间件回滚,使得待处理业务报文回到消息中间件的消息队列中。
进一步的,根据所述业务处理策略对待处理业务报文进行处理,还包括:
根据待处理业务报文进行系统数据库操作;
若进行系统数据库操作正常,则进行系统数据库提交;
若进行系统数据库操作出现异常,则进行系统数据库回滚,确定待处理业务报文入来报表失败,抛出进行系统数据库操作异常,进行消息中间件回滚,使得待处理业务报文回到消息中间件的消息队列中;
若进行系统数据库提交出现异常,则进行系统数据库回滚,确定待处理业务报文入来报表失败,抛出进行系统数据库操作异常,进行消息中间件回滚,使得待处理业务报文回到消息中间件的消息队列中。
此外,所述的支付系统消息控制和处理方法,还包括:
在从待处理业务报文中获取报文业务号之后,根据所述报文业务号确定待处理业务报文是否已经被处理;
若待处理业务报文已经被处理,则将待处理业务报文删除。
一种支付系统消息控制和处理装置,包括:
轮询读取单元,用于从支付系统的消息中间件中轮询读取消息,获取待处理业务报文;
线程控制单元,用于判断当前线程数是否大于预先设置的最大线程数阈值;
报文类型确定单元,用于在当前线程数小于所述最大线程数阈值时,读取所述待处理业务报文,并确定待处理业务报文的类型;
来报表写入单元,用于在待处理业务报文的类型满足预先设置的报文类型条件时,将待处理业务报文写入来报表;
待处理业务报文处理单元,用于在将待处理业务报文写入来报表未出现异常时,启动新线程,对待处理业务报文进行处理;
异常处理单元,用于在将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数大于等于预先设置的异常次数阈值时,将待处理业务报文放入错误队列;
回滚单元,用于在将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数小于预先设置的异常次数阈值时,将该待处理业务报文写入来报表出现异常的次数增加1,并抛出该待处理业务报文写入来报表出现的异常,制造事务回滚使得待处理业务报文回到消息中间件的消息队列中。
进一步的,所述的支付系统消息控制和处理装置,还包括:
失效标识生成单元,用于在从支付系统的消息中间件中轮询读取消息时,若所述消息中间件中没有待处理业务报文,且在一预设读取时长内未读取到消息中间件中的待处理业务报文时,则生成失效标识。
此外,所述来报表写入单元,具体用于:
在待处理业务报文的类型为textmessage格式类型或bytesmessage格式类型时,将待处理业务报文写入来报表。
进一步的,所述支付系统消息控制和处理装置,还包括:
待处理业务报文删除单元,用于在待处理业务报文的类型不为textmessage格式类型和bytesmessage格式类型时,将待处理业务报文的类型记录于系统异常日志中,并将所述待处理业务报文删除。
具体的,所述待处理业务报文处理单元,包括:
报文业务号获取模块,用于将当前线程数增加1,并从待处理业务报文中获取报文业务号;
业务处理策略获取模块,用于根据所述报文业务号获取与所述报文业务号对应的业务处理策略;
待处理业务报文处理模块,用于根据所述业务处理策略对待处理业务报文进行处理;
基础信息异常判断模块,用于在对待处理业务报文进行处理后判断待处理业务报文的基础信息是否存在异常;
基础信息异常处理模块,用于在待处理业务报文的基础信息存在异常时,将来报表中记录待处理业务报文处理次数设为1,并将当前线程数减1,以结束对待处理业务报文的处理;所述基础信息包括待处理业务报文的报文格式以及报文处理权限;
处理返回值判断模块,用于在待处理业务报文的基础信息不存在异常时,判断对待处理业务报文的处理返回值是否为空;
所述待处理业务报文处理模块,还用于在对待处理业务报文的处理返回值为空时,表示对待处理业务报文的数据处理正常,将当前线程数减1,以结束对待处理业务报文的处理;在对待处理业务报文的处理返回值不为空时,表示对待处理业务报文的数据处理出现异常,将待处理业务报文放入错误队列,将当前线程数减1,以结束对待处理业务报文的处理。
此外,所述待处理业务报文处理模块,具体用于:
根据待处理业务报文进行消息中间件操作;
在进行消息中间件操作正常时,进行消息中间件提交;
在进行消息中间件操作出现异常时,进行消息中间件回滚,不进行消息中间件提交;
在进行消息中间件提交时出现异常时,进行消息中间件回滚,使得待处理业务报文回到消息中间件的消息队列中。
此外,所述待处理业务报文处理模块,具体还用于:
根据待处理业务报文进行系统数据库操作;
在进行系统数据库操作正常时,进行系统数据库提交;
在进行系统数据库操作出现异常时,进行系统数据库回滚,确定待处理业务报文入来报表失败,抛出进行系统数据库操作异常,进行消息中间件回滚,使得待处理业务报文回到消息中间件的消息队列中;
在进行系统数据库提交出现异常时,进行系统数据库回滚,确定待处理业务报文入来报表失败,抛出进行系统数据库操作异常,进行消息中间件回滚,使得待处理业务报文回到消息中间件的消息队列中。
进一步的,所述的支付系统消息控制和处理装置,还包括:
防重账处理单元,用于在从待处理业务报文中获取报文业务号之后,根据所述报文业务号确定待处理业务报文是否已经被处理;在待处理业务报文已经被处理时,将待处理业务报文删除。
本发明实施例提供的一种支付系统消息控制和处理方法、装置,首先从支付系统的消息中间件中轮询读取消息,获取待处理业务报文;判断当前线程数是否大于预先设置的最大线程数阈值;在当前线程数小于所述最大线程数阈值时,读取所述待处理业务报文,并确定待处理业务报文的类型;在待处理业务报文的类型满足预先设置的报文类型条件时,将待处理业务报文写入来报表;若将待处理业务报文写入来报表未出现异常,启动新线程,对待处理业务报文进行处理;若将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数大于等于预先设置的异常次数阈值,则将待处理业务报文放入错误队列;若将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数小于预先设置的异常次数阈值,则将该待处理业务报文写入来报表出现异常的次数增加1,并抛出该待处理业务报文写入来报表出现的异常,制造事务回滚使得待处理业务报文回到消息中间件的消息队列中。本发明对支付系统消息的控制和处理可读取不同的消息中间件,不依赖任何特定的容器,可同时处理大量的待处理业务数据,解决了多用户客户端压力并发、大业务量后台压力并发问题,避免了现有技术中在不依赖容器的情况下,难以进行支付系统消息控制和处理的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种支付系统消息控制和处理方法的流程图一;
图2为本发明实施例提供的一种支付系统消息控制和处理方法的流程图二;
图3为本发明实施例中的启动新线程,对待处理业务报文进行处理的过程示意图;
图4为本发明实施例提供的一种支付系统消息控制和处理装置的结构示意图一;
图5为本发明实施例提供的一种支付系统消息控制和处理装置的结构示意图二。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供一种支付系统消息控制和处理方法,包括:
步骤101、从支付系统的消息中间件中轮询读取消息,获取待处理业务报文。
步骤102、判断当前线程数是否大于预先设置的最大线程数阈值。
步骤103、在当前线程数小于所述最大线程数阈值时,读取所述待处理业务报文,并确定待处理业务报文的类型。
步骤104、在待处理业务报文的类型满足预先设置的报文类型条件时,将待处理业务报文写入来报表。
在步骤104之后,执行步骤105、步骤106或者步骤107。
步骤105、若将待处理业务报文写入来报表未出现异常,启动新线程,对待处理业务报文进行处理。
步骤106、若将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数大于等于预先设置的异常次数阈值,则将待处理业务报文放入错误队列。
步骤107、若将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数小于预先设置的异常次数阈值,则将该待处理业务报文写入来报表出现异常的次数增加1,并抛出该待处理业务报文写入来报表出现的异常,制造事务回滚使得待处理业务报文回到消息中间件的消息队列中。
本发明实施例提供的一种支付系统消息控制和处理方法,首先从支付系统的消息中间件中轮询读取消息,获取待处理业务报文;判断当前线程数是否大于预先设置的最大线程数阈值;在当前线程数小于所述最大线程数阈值时,读取所述待处理业务报文,并确定待处理业务报文的类型;在待处理业务报文的类型满足预先设置的报文类型条件时,将待处理业务报文写入来报表;若将待处理业务报文写入来报表未出现异常,启动新线程,对待处理业务报文进行处理;若将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数大于等于预先设置的异常次数阈值,则将待处理业务报文放入错误队列;若将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数小于预先设置的异常次数阈值,则将该待处理业务报文写入来报表出现异常的次数增加1,并抛出该待处理业务报文写入来报表出现的异常,制造事务回滚使得待处理业务报文回到消息中间件的消息队列中。本发明对支付系统消息的控制和处理可读取不同的消息中间件,不依赖任何特定的容器,可同时处理大量的待处理业务数据,解决了多用户客户端压力并发、大业务量后台压力并发问题,避免了现有技术中在不依赖容器的情况下,难以进行支付系统消息控制和处理的问题。
为了使本领域的技术人员更好的了解本发明,下面列举一个更为详细的实施例,如图2所示,本发明实施例提供一种支付系统消息控制和处理方法,包括:
步骤201、从支付系统的消息中间件中轮询读取消息,获取待处理业务报文。
此处,在从支付系统的消息中间件中轮询读取消息时,若所述消息中间件中没有待处理业务报文,且在一预设读取时长内未读取到消息中间件中的待处理业务报文,则生成失效标识(可以表示为null),其中预设读取时长为jms.receivetimeout,默认值可以为120000,单位为毫秒,即120秒。
另外,为了避免重账问题,在从待处理业务报文中获取报文业务号之后,根据报文业务号确定待处理业务报文是否已经被处理;在待处理业务报文已经被处理时,则将待处理业务报文删除。
步骤202、判断当前线程数是否大于预先设置的最大线程数阈值。
在当前线程数大于所述最大线程数阈值时,执行步骤210。在当前线程数小于所述最大线程数阈值时,执行步骤203。
由于线程数过多可能导致java虚拟机(javavirtualmachine,简称jvm)发生异常,因此需要设置最大线程数阈值,避免线程数过多。
步骤203、读取所述待处理业务报文,并确定待处理业务报文的类型是否为textmessage格式类型或bytesmessage格式类型。
在待处理业务报文的类型不为textmessage格式类型和bytesmessage格式类型时,执行步骤204。在待处理业务报文的类型为textmessage格式类型或bytesmessage格式类型时,执行步骤205。
由于在消息中间件中java消息服务(javamessageservice,简称jms)的报文的类型有很多,而此处待处理业务报文的处理仅支持textmessage格式类型和bytesmessage格式类型,因此需要对待处理业务报文的类型进行筛选。
步骤204、将待处理业务报文的类型记录于系统异常日志中,并将所述待处理业务报文删除。
步骤205、将待处理业务报文写入来报表,并判断将待处理业务报文写入来报表是否出现异常。
若将待处理业务报文写入来报表未出现异常,执行步骤206。否则,若将待处理业务报文写入来报表出现异常,执行步骤207。
步骤206、启动新线程,对待处理业务报文进行处理。在步骤206之后,执行步骤210。
步骤207、判断同一待处理业务报文写入来报表出现异常的次数是否大于等于预先设置的异常次数阈值。
若同一待处理业务报文写入来报表出现异常的次数大于等于预先设置的异常次数阈值,执行步骤208。若同一待处理业务报文写入来报表出现异常的次数小于预先设置的异常次数阈值,执行步骤209。此处,该预先设置的异常次数阈值可以为3次。
步骤208、将待处理业务报文放入错误队列。在步骤208之后,执行步骤210。
步骤209、将该待处理业务报文写入来报表出现异常的次数增加1,并抛出该待处理业务报文写入来报表出现的异常,制造事务回滚使得待处理业务报文回到消息中间件的消息队列中。在步骤209之后,执行步骤210。
步骤210、进行支付系统事务提交,完成支付系统消息控制和处理。
在上述步骤206中,启动新线程,对待处理业务报文进行处理的过程可以如图3所示,包括:
步骤301、将当前线程数增加1,并从待处理业务报文中获取报文业务号。
步骤302、根据所述报文业务号获取与所述报文业务号对应的业务处理策略。
此处,该业务处理策略可以是以业务处理bean的形式来实现,其中bean是用来描述java软件组件的模型,是应用程序素材的角色。
步骤303、根据所述业务处理策略对待处理业务报文进行处理。
此处,步骤303中的根据所述业务处理策略对待处理业务报文进行处理,包括:
根据待处理业务报文进行消息中间件操作。
若进行消息中间件操作正常,则进行消息中间件提交。
若进行消息中间件操作出现异常,则进行消息中间件回滚,不进行消息中间件提交。
若进行消息中间件提交时出现异常,则进行消息中间件回滚,使得待处理业务报文回到消息中间件的消息队列中。
另外,步骤303中的根据所述业务处理策略对待处理业务报文进行处理,还可以包括:
根据待处理业务报文进行系统数据库操作。
若进行系统数据库操作正常,则进行系统数据库提交。
若进行系统数据库操作出现异常,则进行系统数据库回滚,确定待处理业务报文入来报表失败,抛出进行系统数据库操作异常,进行消息中间件回滚,使得待处理业务报文回到消息中间件的消息队列中。
若进行系统数据库提交出现异常,则进行系统数据库回滚,确定待处理业务报文入来报表失败,抛出进行系统数据库操作异常,进行消息中间件回滚,使得待处理业务报文回到消息中间件的消息队列中。
步骤304、在对待处理业务报文进行处理后判断待处理业务报文的基础信息是否存在异常。
若待处理业务报文的基础信息存在异常,执行步骤305。否则,若待处理业务报文的基础信息不存在异常,执行步骤306。
步骤305、将来报表中记录待处理业务报文处理次数设为1,并将当前线程数减1,以结束对待处理业务报文的处理。
其中,所述基础信息包括待处理业务报文的报文格式以及报文处理权限。
步骤306、判断对待处理业务报文的处理返回值是否为空。
若对待处理业务报文的处理返回值为空,表示对待处理业务报文的数据处理正常,执行步骤307;若对待处理业务报文的处理返回值不为空,表示对待处理业务报文的数据处理出现异常,执行步骤308。
步骤307、将当前线程数减1,以结束对待处理业务报文的处理。
步骤308、将待处理业务报文放入错误队列,将当前线程数减1,以结束对待处理业务报文的处理。
本发明实施例提供的一种支付系统消息控制和处理方法在测试环境中可以具有每小时4万笔待处理业务报文的处理能力,可满足支付系统中各种项目要求。本发明实施例提供的支付系统消息控制和处理方法可以在包括tomcat在内的java应用服务器上运行。
本发明实施例提供的一种支付系统消息控制和处理方法,首先从支付系统的消息中间件中轮询读取消息,获取待处理业务报文;判断当前线程数是否大于预先设置的最大线程数阈值;在当前线程数小于所述最大线程数阈值时,读取所述待处理业务报文,并确定待处理业务报文的类型;在待处理业务报文的类型满足预先设置的报文类型条件时,将待处理业务报文写入来报表;若将待处理业务报文写入来报表未出现异常,启动新线程,对待处理业务报文进行处理;若将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数大于等于预先设置的异常次数阈值,则将待处理业务报文放入错误队列;若将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数小于预先设置的异常次数阈值,则将该待处理业务报文写入来报表出现异常的次数增加1,并抛出该待处理业务报文写入来报表出现的异常,制造事务回滚使得待处理业务报文回到消息中间件的消息队列中。本发明对支付系统消息的控制和处理可读取不同的消息中间件,不依赖任何特定的容器,可同时处理大量的待处理业务数据,解决了多用户客户端压力并发、大业务量后台压力并发问题,避免了现有技术中在不依赖容器的情况下,难以进行支付系统消息控制和处理的问题。
对应于上述图1至图3所述的方法实施例,如图4所示,本发明实施例提供一种支付系统消息控制和处理装置,包括:
轮询读取单元401,用于从支付系统的消息中间件中轮询读取消息,获取待处理业务报文。
线程控制单元402,用于判断当前线程数是否大于预先设置的最大线程数阈值。
报文类型确定单元403,用于在当前线程数小于所述最大线程数阈值时,读取所述待处理业务报文,并确定待处理业务报文的类型。
来报表写入单元404,用于在待处理业务报文的类型满足预先设置的报文类型条件时,将待处理业务报文写入来报表。
待处理业务报文处理单元405,用于在将待处理业务报文写入来报表未出现异常时,启动新线程,对待处理业务报文进行处理。
异常处理单元406,用于在将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数大于等于预先设置的异常次数阈值时,将待处理业务报文放入错误队列。
回滚单元407,用于在将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数小于预先设置的异常次数阈值时,将该待处理业务报文写入来报表出现异常的次数增加1,并抛出该待处理业务报文写入来报表出现的异常,制造事务回滚使得待处理业务报文回到消息中间件的消息队列中。
进一步的,如图5所示,所述的支付系统消息控制和处理装置,还包括:
失效标识生成单元408,用于在从支付系统的消息中间件中轮询读取消息时,若所述消息中间件中没有待处理业务报文,且在一预设读取时长内未读取到消息中间件中的待处理业务报文时,则生成失效标识。
此外,所述来报表写入单元404,具体用于:
在待处理业务报文的类型为textmessage格式类型或bytesmessage格式类型时,将待处理业务报文写入来报表。
进一步的,所述支付系统消息控制和处理装置,还包括:
待处理业务报文删除单元409,用于在待处理业务报文的类型不为textmessage格式类型和bytesmessage格式类型时,将待处理业务报文的类型记录于系统异常日志中,并将所述待处理业务报文删除。
具体的,如图5所示,所述待处理业务报文处理单元405,包括:
报文业务号获取模块451,用于将当前线程数增加1,并从待处理业务报文中获取报文业务号。
业务处理策略获取模块452,用于根据所述报文业务号获取与所述报文业务号对应的业务处理策略。
待处理业务报文处理模块453,用于根据所述业务处理策略对待处理业务报文进行处理。
基础信息异常判断模块454,用于在对待处理业务报文进行处理后判断待处理业务报文的基础信息是否存在异常。
基础信息异常处理模块455,用于在待处理业务报文的基础信息存在异常时,将来报表中记录待处理业务报文处理次数设为1,并将当前线程数减1,以结束对待处理业务报文的处理;所述基础信息包括待处理业务报文的报文格式以及报文处理权限。
处理返回值判断模块456,用于在待处理业务报文的基础信息不存在异常时,判断对待处理业务报文的处理返回值是否为空。
所述待处理业务报文处理模块453,还用于在对待处理业务报文的处理返回值为空时,表示对待处理业务报文的数据处理正常,将当前线程数减1,以结束对待处理业务报文的处理;在对待处理业务报文的处理返回值不为空时,表示对待处理业务报文的数据处理出现异常,将待处理业务报文放入错误队列,将当前线程数减1,以结束对待处理业务报文的处理。
此外,所述待处理业务报文处理模块453,具体可以:
根据待处理业务报文进行消息中间件操作。
在进行消息中间件操作正常时,进行消息中间件提交。
在进行消息中间件操作出现异常时,进行消息中间件回滚,不进行消息中间件提交。
在进行消息中间件提交时出现异常时,进行消息中间件回滚,使得待处理业务报文回到消息中间件的消息队列中。
此外,所述待处理业务报文处理模块453,具体还用于:
根据待处理业务报文进行系统数据库操作。
在进行系统数据库操作正常时,进行系统数据库提交。
在进行系统数据库操作出现异常时,进行系统数据库回滚,确定待处理业务报文入来报表失败,抛出进行系统数据库操作异常,进行消息中间件回滚,使得待处理业务报文回到消息中间件的消息队列中。
在进行系统数据库提交出现异常时,进行系统数据库回滚,确定待处理业务报文入来报表失败,抛出进行系统数据库操作异常,进行消息中间件回滚,使得待处理业务报文回到消息中间件的消息队列中。
进一步的,如图5所示,所述的支付系统消息控制和处理装置,还包括:
防重账处理单元410,用于在从待处理业务报文中获取报文业务号之后,根据所述报文业务号确定待处理业务报文是否已经被处理;在待处理业务报文已经被处理时,将待处理业务报文删除。
本发明实施例提供的一种支付系统消息控制和处理装置,首先从支付系统的消息中间件中轮询读取消息,获取待处理业务报文;判断当前线程数是否大于预先设置的最大线程数阈值;在当前线程数小于所述最大线程数阈值时,读取所述待处理业务报文,并确定待处理业务报文的类型;在待处理业务报文的类型满足预先设置的报文类型条件时,将待处理业务报文写入来报表;若将待处理业务报文写入来报表未出现异常,启动新线程,对待处理业务报文进行处理;若将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数大于等于预先设置的异常次数阈值,则将待处理业务报文放入错误队列;若将待处理业务报文写入来报表出现异常,且同一待处理业务报文写入来报表出现异常的次数小于预先设置的异常次数阈值,则将该待处理业务报文写入来报表出现异常的次数增加1,并抛出该待处理业务报文写入来报表出现的异常,制造事务回滚使得待处理业务报文回到消息中间件的消息队列中。本发明对支付系统消息的控制和处理可读取不同的消息中间件,不依赖任何特定的容器,可同时处理大量的待处理业务数据,解决了多用户客户端压力并发、大业务量后台压力并发问题,避免了现有技术中在不依赖容器的情况下,难以进行支付系统消息控制和处理的问题。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。