一种业务流程的处理方法及系统与流程

文档序号:13615799阅读:124来源:国知局
一种业务流程的处理方法及系统与流程
本发明涉及计算机
技术领域
,特别涉及一种业务流程的处理方法及系统。
背景技术
:票据是指出票人依法签发的由自己或指示他人无条件支付一定金额给收款人或持票人的有价证券,即某些可以代替现金流通的有价证券。票据的形式可以包括纸质票据和电子票据。随着互联网的发展,许多基于互联网的票据交易平台应运而生。以银行承兑汇票为例,现有的票据交易平台的交易模式如下:用户可以在网上发送公开、定向的银行承兑汇票买断式、回购式转贴现报价,通过报价应答方式与业务人员联系,线下进行进一步议价交易。或者用户还可以通过网上填写承兑行类型、票面金额、汇票到期日等信息进行线下沟通议价等。上述网络的交易平台的一个共同点在交易过程中,其主要作用还是发布交易信息,交易双方只能线下点对点进行票据议价,线下交易,一方面,银行承兑汇票进行交易要考虑的要素很多,在网站上找到自己想要的票据要花费很长的时间;另外一方面,当找到想要进行交易的票后要在线下通过一个一个打电话等方式跟对手方进行议价,费时费力还有可能失败从而需要重新寻找合适的票;最后,因为用户掌握的信息有限,所以用户在交易中的利益不能得到预期的保证。基于上述问题,如何提供一种票据交易系统,实现高效的票据交易流程流转,实现整个票据交易的电子化,解决用户之间信息不对称的问题,使交易双方都能够高效率地找到自身想要交易的票据或者交易者,成为亟待解决的问题。技术实现要素:鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种业务流程的处理方法及系统。第一方面,本发明实施例提供一种业务流程的处理方法,包括:当连接服务器接收到客户端发送的服务器事件时,确定所述事件是否为自身需要处理的服务器事件;当确定为是时,将所述服务器事件发送给所述连接服务器本地预设的处理该服务器事件的事件处理类进行处理;当确定为否时,将所述服务器事件发送给消息服务器;应用服务器在启动时,将各类交易下各业务流程对应的状态机信息缓存;当从消息服务器中监听到本应用服务器处理的服务器事件时,所述应用服务器读取该事件;从预设的线程池中调用线程,根据该服务器事件对应流程,读取缓存的状态机信息中定义的流程数据,确定下个操作状态和处理该服务器事件的类;从预设的线程池中调用线程,通过处理该服务器事件的类,处理所述服务器事件得到处理结果;将处理结果生成服务器事件并发送至消息服务器,并更新数据库服务器中的数据库数据。在一个实施例中,所述状态机信息包括:状态机的标识、状态标识、状态名称、当前状态对应的操作/事件、下一个状态的标识和下一个状态的名称和处理该事件的类。在一个实施例中,所述根据该服务器事件对应流程,读取缓存的状态机信息中定义的流程数据,确定下个操作状态和处理该服务器事件的类,包括:从所述服务器事件中解析出交易信息和流程信息;从所缓存的状态机信息中,确定所述交易下所述流程对应的状态机信息;从预设的线程池中调用线程,查询所述状态机信息,根据所述交易下所述流程的当前状态、当前状态对应的操作/事件,得到下个状态的标识和处理该事件的类。在一个实施例中,所述预设的线程池为同一个线程池;或者所述预设的线程池,包括:处理服务器事件的线程池和状态机流转引擎线程池;所述处理服务器事件的线程池中包含预设数量的多个处理服务器事件的类的线程;所述状态机流转引擎线程池中包含预设数量的多个状态机流转引擎线程。在一个实施例中,所述确定所述事件是否为自身需要处理的服务器事件,包括:所述连接服务器判断所述服务器事件的类型是否与自身预先注册的事件类型一致,若一致,则确定所述服务器事件属于自身需要处理的服务器事件;否则,确定所述服务器事件不属于自身需要处理的服务器事件。在一个实施例中,当所述服务器事件为多个时,将所述服务器事件发送给所述连接服务器本地预设的处理该服务器事件的事件处理类进行处理,包括:将各个服务器事件按照预设的优先级级别,分别缓存于对应级别的队列中,每个队列中服务器事件按照接收的时间先后排列;按照优先级的高低顺序,依次从不同级别的队列中取出该队列中的服务器事件,并将所述服务器事件分发至对应级别的事件处理线程;通过所述事件处理线程调用服务器事件对应的事件处理类,对所述服务器事件进行处理。在一个实施例中,所述读取该服务器事件之后,还包括:将所述服务器事件所属的服务器之间的消息类型,转换成本应用服务器处理的消息类型;所述处理结果生成服务器事件,包括:将所述处理结果,按照所述服务器之间的消息类型进行封装,生成服务器事件。在一个实施例中,所述方法还包括:当通过处理该服务器事件的类的线程,处理所述服务器事件成功时,更新所述流程的状态为所述下一个状态;将交易信息、流程的状态信息和处理结果生成服务器事件并发送给消息服务器;否则,结束所述流程的处理,并通告中控客户端。第二方面,本发明实施例提供一种业务流程的处理系统,包括:连接服务器和应用服务器;其中:所述连接服务器,包括:确定模块,用于当连接服务器接收到客户端发送的服务器事件时,判断所述事件是否为自身需要处理的服务器事件;事件处理模块,用于当判断模块判断为是时,将所述服务器事件发送给所述连接服务器本地预设的处理该服务器事件的事件处理类进行处理;发送模块,用于当判断模块判断为否时,将所述服务器事件发送给消息服务器,以便其他应用服务器从所述消息服务器读取并处理;所述应用服务器,包括:缓存模块,用于应用服务器在启动时,将各类交易下各业务流程对应的状态机信息缓存;消息读取模块,用于当从消息服务器中监听到本应用服务器处理的服务器事件时,所述应用服务器读取该事件;状态流转模块,用于从预设的线程池中调用线程,根据该服务器事件对应流程,读取缓存的状态机信息中定义的流程数据,确定下个操作状态和处理该服务器事件的类;事件处理模块,用于从预设的线程池中调用线程,通过处理该服务器事件的类,处理所述服务器事件得到处理结果;生成模块,用于将处理结果生成服务器事件;发送模块,用于将所述生成模块生成的服务器事件发送给消息服务器;数据更新模块,用于根据所述处理结果,更新数据库服务器中的数据库数据。在一个实施例中,所述状态机信息包括:状态机的标识、状态标识、状态名称、当前状态对应的操作/事件、下一个状态的标识和下一个状态的名称和处理该事件的类。在一个实施例中,所述状态流转模块,包括:解析子模块,用于从所述服务器事件中解析出交易信息和流程信息;确定子模块,用于从所缓存的状态机信息中,确定所述交易下所述流程对应的状态机信息;查询子模块,用于从预设的线程池中调用线程,查询所述状态机信息,根据所述交易下所述流程的当前状态、当前状态对应的操作/事件,得到下个状态的标识和处理该事件的类。在一个实施例中,所述预设的线程池为同一个线程池;或者所述预设的线程池,包括:处理服务器事件的线程池和状态机流转引擎线程池;所述处理服务器事件的线程池中包含预设数量的多个处理服务器事件的类的线程;所述状态机流转引擎线程池中包含预设数量的多个状态机流转引擎线程。在一个实施例中,所述连接服务器的确定模块,具体用于判断所述服务器事件的类型是否与自身预先注册的事件类型一致,若一致,则确定所述服务器事件属于自身需要处理的服务器事件;否则,确定所述服务器事件不属于自身需要处理的服务器事件。在一个实施例中,所述服务器事件为多个时,所述事件处理模块,包括:队列缓存子模块,用于将各个服务器事件按照预设的优先级级别,分别缓存于对应级别的队列中,每个队列中服务器事件按照接收的时间先后排列;分发子模块,用于按照优先级的高低顺序,依次从不同级别的队列中取出该队列中的服务器事件,并将所述服务器事件分发至对应级别的事件处理线程;处理子模块,用于通过所述事件处理线程调用服务器事件对应的事件处理类,对所述服务器事件进行处理。在一个实施例中,上述应用服务器还包括:转换模块,用于在消息读取模块读取该服务器事件之后,将所述服务器事件所属的服务器之间的消息类型,转换成本应用服务器处理的消息类型;以及将所述事件处理模块得到的处理结果,按照所述服务器之间的消息类型进行封装,生成服务器事件。在一个实施例中,上述应用服务器还包括:状态更新模块和异常处理模块;其中:所述状态更新模块,用于当通过处理该服务器事件的类的线程,处理所述服务器事件成功时,更新所述流程的状态为所述下一个状态;所述生成模块,还用于将交易信息、流程的状态信息和处理结果生成服务器事件;所述异常处理模块,用于通过处理该服务器事件的类的线程,处理所述服务器事件出现错误时,结束所述流程的处理,并通告中控客户端。本发明实施例提供的上述技术方案的有益效果至少包括:本发明实施例提供的业务流程的处理方法及系统中,连接服务器在接收到客户端发送的服务器事件时,确认该事件是否为自身需要处理的服务器事件,如果是,则使用预设的事件处理类进行处理,否则转发至消息服务器,以便其他应用服务器读取并处理,在上述方案中,整个业务流程以事件为驱动,可以实现流程的快速流转,并且,应用服务器与连接服务器等服务器之间并不直接交互,而采用消息服务器进行消息的中转,消息服务器作为消息中间件(messagequeue,mq),负责服务器之间消息的缓存和转发,这种方式,消息可以驻留在内存或者磁盘上,直到它们被需要处理它们的服务器的应用程序读走,通过消息队列,服务器可以独立的执行,不需要知道彼此的位置,不需要直接与其他服务器进行交互,以及在继续执行流程的下一个步骤时不需要等待处理结果是否已被接收的服务器接收,这种快速的消息交换机制,一方面,对于服务器集群来说,可以显著提高各服务器的执行效率,另外一方面,也可以更好地适应于异构的网络环境,为大规模的网络架构的服务器间提供有效的通信手段。并且,应用服务器预先将各类交易下各业务对应的状态机信息缓存,当从消息服务器读取服务器事件时,从预设的线程池中调用线程,根据该服务器事件对应流程,读取状态机定义的流程数据,确定下个操作状态和处理该服务器事件的类,再通过处理该服务器事件的类,处理该事件得到处理结果,将处理结果通过新的服务器事件发给消息服务器,并更新数据库,在整个处理过程中,利用了状态机,实现了业务流程的准确快速的流转,并且,将状态机预先缓存的方式,便于快速读取,提高了响应的速度,并且从预设的线程池中调用线程来优化事件处理任务及状态机流转任务,提高了cpu的有效利用率和系统的整体性能。本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。附图说明附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:图1为本发明实施例提供的基于事件的流程处理方法所适用的网络架构图;图2为本发明实施例提供的业务流程的处理方法的流程图;图3为本发明实施例提供的确定事件是否为连接服务器需要处理的服务器事件的步骤的具体实施流程图;图4为本发明实施例提供的将服务器事件发送给连接服务器本地预设的处理该服务器事件的处理类进行处理的具体实施流程图;图5为本发明实施例提供的客户端向连接服务器发起交易请求的一个例子的示意图;图6为本发明实施例提供的确定下个操作状态和处理该服务器事件的类的步骤的流程图;图7为本发明实施例提供的业务流程的系统的结构图;图8为本发明实施例提供的连接服务器的结构框图;图9为本发明实施例提供的应用服务器的结构框图;图10为本发明实施例提供的状态流转模块的结构框图;图11为本发明实施例提供的事件处理模块的结构框图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。下面结合附图,对本发明实施例提供的业务流程的处理方法及系统的具体实施方式进行详细的说明。为了更好地说明本发明实施例提供的基于事件的流程处理方法,首先对该基于事件的流程处理方法适用的网络架构进行简单介绍,如图1所示,该网络架构中包含票据交易客户端(例如可包括银行客户端或企业客户端),连接服务器和其他类型服务器(例如应用服务器等等);连接服务器与各客户端之间相连,用于处理客户端的服务请求的接受、连接会话的建立、维持和中断服务;应用服务器(也叫核心业务服务器)用于对用户登录进行认证、对用户交易权限进行验证、执行对应的交易逻辑,并在必要时对数据库进行读写操作;各服务器可以采用服务器集群的方式,以应对数量巨大的业务处理量。本发明实施例提供的业务流程的处理方法,在同一个票据交易系统中,应用服务器是负责处理业务逻辑的服务器;应用服务器可以有一个或多个,应用服务器有多个时,彼此可以组成应用服务器集群,应用服务器与其他服务器例如连接服务器、其他应用服务器等之间并不直接交互,而是通过消息服务器进行消息的中转,消息服务器起到消息中间件的作用,缓存和转发每个服务器所需的消息(服务器事件)。参照图2所示,本发明实施例提供的业务流程的处理方法,包括下述步骤:s21、当连接服务器接收到客户端发送的服务器事件时,确定所述事件是否为自身需要处理的服务器事件;当确定为是时,将所述服务器事件发送给所述连接服务器本地预设的处理该服务器事件的事件处理类进行处理;当确定为否时,将所述服务器事件发送给消息服务器;s22、应用服务器在启动时,将各类交易下各业务流程对应的状态机信息缓存;当从消息服务器中监听到本应用服务器处理的服务器事件时,所述应用服务器读取该事件;从预设的线程池中调用线程,根据该服务器事件对应流程,读取缓存的状态机信息中定义的流程数据,确定下个操作状态和处理该服务器事件的类;从预设的线程池中调用线程,通过处理该服务器事件的类,处理所述服务器事件得到处理结果;将处理结果生成服务器事件并发送至消息服务器,并更新数据库服务器中的数据库数据。本发明实施例提供的业务流程的处理方法中,连接服务器在接收到客户端发送的服务器事件时,确认该事件是否为自身需要处理的服务器事件,如果是,则使用预设的事件处理类进行处理,否则转发至消息服务器,以便其他应用服务器读取并处理,在上述方案中,整个业务流程以事件为驱动,可以实现流程的快速流转,并且,应用服务器与连接服务器等服务器之间并不直接交互,而采用消息服务器进行消息的中转,消息服务器作为消息中间件(messagequeue,mq),负责服务器之间消息的缓存和转发,这种方式,消息可以驻留在内存或者磁盘上,直到它们被需要处理它们的服务器的应用程序读走,通过消息队列,服务器可以独立的执行,不需要知道彼此的位置,不需要直接与其他服务器进行交互,以及在继续执行流程的下一个步骤时不需要等待处理结果是否已被接收的服务器接收,这种快速的消息交换机制,一方面,对于服务器集群来说,可以显著提高各服务器的执行效率,另外一方面,也可以更好地适应于异构的网络环境,为大规模的网络架构的服务器间提供有效的通信手段。并且,应用服务器预先将各类交易下各业务对应的状态机信息缓存,当从消息服务器读取服务器事件时,从预设的线程池中调用线程,根据该服务器事件对应流程,读取状态机定义的流程数据,确定下个操作状态和处理该服务器事件的类,再通过处理该服务器事件的类,处理该事件得到处理结果,将处理结果通过新的服务器事件发给消息服务器,并更新数据库,在整个处理过程中,利用了状态机,实现了业务流程的准确快速的流转,并且,将状态机预先缓存的方式,便于快速读取,提高了响应的速度,并且采用预设的线程池,从中调用线程来优化事件处理任务及状态机流转任务,提高了cpu的有效利用率和系统的整体性能。在一个实施例中,上述步骤s21中确定所述事件是否为自身需要处理的服务器事件,如图3所示,可具体实施为:s301、连接服务器判断所述服务器事件的类型是否与自身预先注册的事件类型一致;若一致,则执行下述步骤s302;否则执行下述步骤s303;s302、确定所述服务器事件属于自身需要处理的服务器事件;s303、确定所述服务器事件不属于自身需要处理的服务器事件。不论是连接服务器,还是各种类型的应用服务器,在本发明实施例中,都预先注册了各种需要自身处理的事件类型,根据预先注册的事件类型,就可以确认该消息是否为自身需要处理的消息。例如采用publisher(消息发布者)和consumer(消息消费者)实现的pub(发布)-sub(消费)的模式,消息发布者和消息消费者(服务器和服务器之间,客户端与服务器之间)预先设定了一个共同的topic(话题),有了这个模式之后,可以实现对于同一类话题的消息的发送和接收。如果不是自身处理的服务器事件,则连接服务器将其发送至消息服务器,等待其他需要处理该事件的服务器读取。对于连接服务器来说,其主要负责处理客户端的服务请求的接受、连接会话的建立、维持和中断服务;对于某些简单的查询类的关联事件,可以由连接服务器来处理,连接服务器查询数据库,获得查询结果,然后将查询的结果进行序列化,然后将序列化后的数据通过socket连接返回给客户端。对服务器事件的序列化是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化主要是为了解决在对对象流进行读写操作时所引发的问题。在一个实施例中,服务器事件发送给消息服务器之后,还包括执行下述步骤:通过socket连接向发送服务器事件的客户端返回提交成功的消息。不论是否由自身处理,连接服务器在事件处理的同时或者将服务事件发送给消息服务器之后,将反馈一个提交成功的消息给客户端,客户端收到这个提交成功的消息后,及时会切换界面,避免用户等待,提高用户使用体验。比如结束正在提交查询请求的页面,转换到下一个界面。在大型分布式的处理系统中,连接服务器可能会与大量的客户端连接,当接收的服务器事件为多个时,将服务器事件发送给连接服务器本地预设的处理该服务器事件的处理类进行处理时,为了优化处理效率,在本发明实施例中,如图4所示,可以通过下述方式实现:s401、将各个服务器事件按照预设的优先级级别,分别缓存于对应级别的队列中,每个队列中服务器事件按照接收的时间先后排列;s402、按照优先级的高低顺序,依次从不同级别的队列中取出该队列中的服务器事件,并将服务器事件分发至对应级别的事件处理线程;s403、通过事件处理线程调用服务器事件对应的事件处理类,对服务器事件进行处理。服务器事件也按照其与业务之间的重要程度,划分对应的优先级,每个队列中按照事件接收的先后顺序来排列。按照优先级的高低顺序,依次按照先入先出的规则,依次从不同级别的队列中取出该队列中的服务器事件,并将服务器事件分发至对应级别的事件处理线程;不同的事件处理线程的处理能力也不同,总的来说,对应事件级别越高的,其线程的处理能力也越高。这样,多线程并行处理,并且,处理能力高的线程,也能够优先处理级别较高的服务器事件,可以整体提高处理能力。如图5所示,在客户端,发起确认面板上,用户选择发送对象列表:张三、李四和王五;客户端的交易请求管理监听类(inquirymanager)调用函数submitinquiry(),生成交易请求事件(dealrequestevent),将画面的请求数据封装在该交易请求事件中,该交易请求事件(deal_request)的内容如下:事件名称:dealrequestaction,数据:交易请求事件(dealrequestevent),其中包括交易id,交易类型,交易限定时间,交易价格,发送对象列表等。事件对象即交易请求事件通过map将数据序列化,然后再通过socket通信函数(senddatatoserver)将其发送给连接服务器;连接服务器(cs)接收到客户端事件,事件名称为dealrequestaction,数据:交易请求事件(dealrequestevent),发现自身不是处理该交易请求事件的服务器,将该事件发送到消息服务器。消息队列技术是分布式应用间交换信息的一种技术。消息队列(其他服务器发送的事件形成的队列)可驻留在消息服务器的内存或磁盘上,队列存储消息直到它们被其他服务器的应用程序读走。通过消息队列,各服务器之间也可独立地执行,它们不需要知道彼此的位置、或在继续执行前不需要等待接收的服务器接收此消息。在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境下的分布式应用提供有效的通信手段。为了管理需要共享的消息,这种消息中间件的技术是非常重要的。在本发明实施例中,票据交易系统可以实现多类型的票据交易,例如买断、卖断、正回购、逆回购等等。每种票据交易类型都具有唯一的协议号,在每种交易类型下面,又包括多种交易流程,每种流程都对应一个状态机,状态机记录了相关流程流转的信息。参照下表1所示的例子,标识为32的状态机的描述为“testprocess”,标识为21的状态机的描述为“ticketprocess”,分别对应不同的流程。状态机id状态机id初始化状态id32testprocess5121ticketprocess14在一个实施例中,状态机信息包括多种,例如包括:状态机的标识、状态标识、状态名称、当前状态对应的操作/事件、下一个状态的标识和下一个状态的名称和处理该事件的类。参照下表2所示的例子,标识为32的状态机中记录了多个流程流转信息。表2在一个实施例中,上述步骤s22中,应用服务器可以在启动时,将各类交易下各业务对应的状态机信息缓存在内存中,并在关闭时,删除状态机信息,释放内存。在一个实施例中,上述步骤s22中,消息服务器中的消息的发布者可能是连接服务器,或者其他应用服务器,或者票据交易系统中的认证服务器等等,当本应用服务器订阅了这类消息时,对消息服务器中缓存的服务器事件进行监听,就能读取本应用服务器需要处理的服务器事件。相应地,如图6所示,上述步骤s22中根据该服务器事件对应流程,通过对应的状态机流转引擎线程,读取缓存的状态机信息中定义的流程数据,确定下个操作状态和处理该服务器事件的类的步骤,可以通过下述步骤s61-s63实现:s61、从所述服务器事件中解析出交易信息和流程信息;服务器事件中包含了是哪类交易,以及是哪类交易下的哪类流程。s62、从所缓存的状态机信息中,确定所述交易下所述流程对应的状态机信息;s63、从预设的线程池中调用线程,查询所述状态机信息,根据所述交易下所述流程的当前状态、当前状态对应的操作/事件,得到下个状态的标识和处理该事件的类。例如,按照表2,当当前状态名称为等待回复时,且操作/事件为确定时,查询状态机信息可以知道下一个状态的名称为完成,对应处理该事件的类为okhandler。各流程对应的状态机的生成可以参照现有技术,本发明实施例在此不再赘述。在一个实施例中,上述预设的线程池例如可以为同一个线程池,也可以包括多个线程池,例如包括处理服务器事件的线程池和状态机流转引擎线程池;其中,处理服务器事件的线程池中包含预设数量的多个处理服务器事件的类的线程;状态机流转引擎线程池中包含预设数量的多个状态机流转引擎线程。较佳地,上述步骤s22中,从预设的线程池中调用线程,例如可以是状态机流转引擎线程,可以从预先启动的状态机流转引擎线程池中调用。类似地,在上述步骤s22中,从预设的线程池中调用线程,例如可以是处理服务器事件的类的线程,可以从预先启动的用于处理服务器事件的线程池中调用。应用服务器在启动时,除了将各类交易下各业务对应的状态机信息缓存之外,还可以执行下述步骤即:启动用于处理服务器事件的线程池和状态机流转引擎线程池。线程池中包含预先创建的多个线程,当需要处理的任务产生时,可以直接调用预先已创建完成的线程,可以实现多线程同时执行,显著减少处理器的闲置时间,增加处理单元的吞吐能力。线程池中线程初始化预设数量的线程,后续再根据任务量的多少,进行动态的增加或减少,每次增加或减少可以是固定数量的线程。线程池适用于单个任务处理时间较短,但所需处理的任务数量大的情况,使用线程池的好处:1、减少在创建和销毁线程上所花的时间及系统资源的开销(将线程预先创建出来),2、如果不使用线程池,则有可能造成系统创建大量线程而导致消耗完系统内存以及“过度切换”。许多服务器应用都面向处理来自某些远程来源的大量短小的任务。构建服务器应用程序的一个过于简单的模型是:每当一个请求到达就创建一个新的服务对象,然后在新的服务对象中为请求服务。但当有大量请求并发访问时,服务器不断的创建和销毁对象的开销很大。所以提高服务器效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。线程池是预先创建线程的一种技术。线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中。这些线程都是处于睡眠状态,即均为启动,不消耗cpu,而只是占用较小的内存空间。当请求到来之后,缓冲池给这次请求分配一个空闲线程,把请求传入此线程中运行,进行处理。当预先创建的线程都处于运行状态,即预制线程不够,线程池可以自由创建一定数量的新线程,用于处理更多的请求。当系统比较闲的时候,也可以通过移除一部分一直处于停用状态的线程。线程池中的多线程并非越多越好,需要根据系统运行的软硬件环境以及应用本身的特点决定线程池的大小。如果处理任务较多,线程运行时可能出现阻塞现象,可相应增加池的大小;如处理任务较少,必要时可采用自适应算法来动态调整线程池的大小,以提高了cpu的有效利用率和系统的整体性能。在一个实施例中,本发明实施例提供的上述业务流程的处理方法,在服务器之间传递的消息类型与应用服务器内部处理事件的类型不同时,在上述步骤s22中读取该服务器事件之后,还需要执行下述步骤:将服务器事件所属的服务器之间的消息类型,转换成本应用服务器处理的消息类型;相应地,上述步骤s22处理结果生成服务器事件,具体通过下述步骤实现:将服务事件的处理结果,按照所述服务器之间的消息类型进行封装,生成新的服务器事件。进一步地,本发明实施例提供的上述业务流程的处理方法,还可以执行下述步骤:当通过处理该服务器事件的类的线程,处理所述服务器事件成功时,更新所述流程的状态为所述下一个状态;将交易信息、流程的状态信息和处理结果生成服务器事件并发送给消息服务器;发送给消息服务器后,订阅了这类服务器事件的其他服务器就会从消息服务器中进一步读取该服务器事件,然后进一步处理。否则,当通过处理该服务器事件的类的线程,处理所述服务器事件出现错误时,直接结束所述流程的处理,并通告中控客户端。中控客户端接收到通告后,可以通过人工干预的方式,对流程中出错的原因进行排查。比如票据议价的流程,如果一旦处理出错,则直接中断该流程的执行,使该流程回到起点,即通知发起交易的客户端重新发起交易,同时因为议价流程被锁定的持仓也被释放。基于同一发明构思,本发明实施例还提供了一种业务流程的处理系统,由于该系统所解决问题的原理与前述业务流程的处理方法相似,因此该系统的实施可以参见前述方法的实施,重复之处不再赘述。本发明实施例提供的一种业务流程的处理系统,如图7所示,包括:连接服务器71和应用服务器72;其中:如图8所示,所述连接服务器71,包括:确定模块710,用于当接收到客户端发送的服务器事件时,判断所述事件是否为自身需要处理的服务器事件;事件处理模块711,用于当判断模块判断为是时,将所述服务器事件发送给所述连接服务器本地预设的处理该服务器事件的事件处理类进行处理;发送模块712,用于当判断模块判断为否时,将所述服务器事件发送给消息服务器,以便其他应用服务器从所述消息服务器读取并处理;如图9所示,所述应用服务器72,包括:缓存模块720,用于在启动时,将各类交易下各业务对应的状态机信息缓存;消息读取模块721,用于当从消息服务器中监听到本应用服务器处理的服务器事件时,读取该事件;状态流转模块722,用于从预设的线程池中调用线程,根据该服务器事件对应流程,读取缓存的状态机信息中定义的流程数据,确定下个操作状态和处理该服务器事件的类;事件处理模块723,用于从预设的线程池中调用线程,通过处理该服务器事件的类,处理所述服务器事件得到处理结果;生成模块724,用于将处理结果生成服务器事件;发送模块725,用于将所述生成模块724生成的服务器事件发送给消息服务器;数据更新模块726,用于根据所述处理结果,更新数据库服务器中的数据库数据。在一个实施例中,上述状态机信息包括:状态机的标识、状态标识、状态名称、当前状态对应的操作/事件、下一个状态的标识和下一个状态的名称和处理该事件的类。在一个实施例中,上述状态流转模块722,参照图10所示,包括:解析子模块7221,用于从所述服务器事件中解析出交易信息和流程信息;确定子模块7222,用于从所缓存的状态机信息中,确定所述交易下所述流程对应的状态机信息;查询子模块7223,用于从预设的线程池中调用线程,查询所述状态机信息,根据所述交易下所述流程的当前状态、当前状态对应的操作/事件,得到下个状态的标识和处理该事件的类。在一个实施例中,上述预设的线程池为同一个线程池;或者所述预设的线程池,包括:处理服务器事件的线程池和状态机流转引擎线程池;所述处理服务器事件的线程池中包含预设数量的多个处理服务器事件的类的线程;所述状态机流转引擎线程池中包含预设数量的在一个实施例中,上述业务流程的处理系统,参照图9,还包括:转换模块727,用于在消息读取模块读取该服务器事件之后,将所述服务器事件所属的服务器之间的消息类型,转换成本应用服务器处理的消息类型;以及将所述事件处理模块得到的处理结果,按照所述服务器之间的消息类型进行封装,生成服务器事件。在一个实施例中,上述业务流程的处理系统,参照图9,上述应用服务器72,还包括:状态更新模块728和异常处理模块729;其中:所述状态更新模块728,用于当通过处理该服务器事件的类的线程,处理所述服务器事件成功时,更新所述流程的状态为所述下一个状态;所述生成模块724,还用于将交易信息、流程的状态信息和处理结果生成服务器事件;所述异常处理模块729,用于通过处理该服务器事件的类的线程,处理所述服务器事件出现错误时,结束所述流程的处理,并通告中控客户端。在一个实施例中,上述连接服务器的确定模块710,具体用于判断所述服务器事件的类型是否与自身预先注册的事件类型一致,若一致,则确定所述服务器事件属于自身需要处理的服务器事件;否则,确定所述服务器事件不属于自身需要处理的服务器事件。在一个实施例中,所述发送模块712,还用于将所述服务器事件发送给消息服务器之后,通过socket连接向发送服务器事件的客户端返回提交成功的消息。在一个实施例中,所述服务器事件为多个时,事件处理模块711,如图11所示,包括:队列缓存子模块7110,用于将各个服务器事件按照预设的优先级级别,分别缓存于对应级别的队列中,每个队列中服务器事件按照接收的时间先后排列;分发子模块7111,用于按照优先级的高低顺序,依次从不同级别的队列中取出该队列中的服务器事件,并将所述服务器事件分发至对应级别的事件处理线程;处理子模块7112,用于通过所述事件处理线程调用服务器事件对应的事件处理类,对所述服务器事件进行处理。在一个实施例中,上述基于事件的流程处理系统,如图8所示,还可以包括:序列化处理模块713,用于对事件处理模块的处理结果的数据进行序列化;相应地,所述发送模块712,还用于将经过序列化处理后的数据通过socket连接返回给对应的客户端。本发明实施例提供的业务流程的处理方法及系统中,应用服务器预先将各类交易下各业务对应的状态机信息缓存,当从消息服务器读取服务器事件时,从预设的线程池中调用线程,根据该服务器事件对应流程,读取状态机定义的流程数据,确定下个操作状态和处理该服务器事件的类,再通过处理该服务器事件的类,处理该事件得到处理结果,将处理结果通过新的服务器事件发给消息服务器,并更新数据库,一方面,在整个处理过程中,利用了状态机,实现了业务流程的准确快速的流转,并且,将状态机预先缓存的方式,便于快速读取,提高了响应的速度,另一方面,利用线程池优化事件处理任务及状态机流转任务,提高了cpu的有效利用率和系统的整体性能。进一步地,本发明实施例提供的上述业务流程的处理方法及系统中,应用服务器可以将处理业务逻辑的类与处理状态机的类(状态机流转引擎)分开,分别独立执行服务器事件处理任务和执行状态机流转任务,进一步优化了处理的速度。进一步地,本发明实施例提供的上述业务流程的处理方法及系统中,应用服务器处理的事件从消息服务器中来,处理完成后依然交由消息服务器,所有服务器之间的事件(消息)均通过消息服务器中转,尤其对于集群服务器的方式而言,采用消息服务器中转的方式,可以使得彼此有交互的两个服务器之间不再一对一的直接交互,减少了服务器等待对方响应的时间,使得服务器可以集中资源处理本服务器应该处理的相关业务逻辑,提高了业务处理的效率。本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1