本发明涉及计算机技术领域,尤其涉及一种事件处理方法、设备及一种服务器。
背景技术:
现有技术在处理事件的过程中,需要经过多种环节,每一环节可能需要处理的业务量比较大或比较频繁,采用现有java多线程技术处理事件时,代码量较大并且逻辑及耦合比较高,需要研发工程师具有丰富的java多线程知识,并且在开发过程中需要花费大量时间编写和调试技术性代码。
因此,现有技术中的事件处理方式,处理时间长、处理速度慢,即效率不高。
技术实现要素:
本发明实施例提供了一种事件处理方法、设备及一种服务器,用以提高事件处理效率。
本发明实施例提供的一种事件处理方法包括:
在预先对事件的处理过程进行划分得到的与每一步骤一一对应的处理平台中,
第一个步骤对应的处理平台,按照预先在第一个步骤对应的处理平台中设置的处理算法对预先在该第一个步骤对应的处理平台中添加的事件进行处理,并将该处理产生的事件交给下一步骤对应的处理平台;
第一个步骤之后最后一个步骤之前的任一步骤对应的处理平台,对从上一步骤对应的处理平台产生的事件,按照预先在该任一步骤对应的处理平台中设 置的处理算法进行处理,并将该处理产生的事件交给下一步骤对应的处理平台;
最后一个步骤对应的处理平台,对从上一步骤对应的处理平台产生的事件,按照预先在该最后一个步骤对应的处理平台中设置的处理算法进行处理,并输出该处理产生的结果。
本发明实施例中,预先对事件的处理过程进行划分得到的与每一步骤一一对应的处理平台,其中,在处理事件的过程中,第一个步骤对应的处理平台,按照预先在第一个步骤对应的处理平台中设置的处理算法对预先在该第一个步骤对应的处理平台中添加的事件进行处理,并将该处理产生的事件交给下一步骤对应的处理平台;第一个步骤之后最后一个步骤之前的任一步骤对应的处理平台,对从上一步骤对应的处理平台产生的事件,按照预先在该任一步骤对应的处理平台中设置的处理算法进行处理,并将该处理产生的事件交给下一步骤对应的处理平台;最后一个步骤对应的处理平台,对从上一步骤对应的处理平台产生的事件,按照预先在该最后一个步骤对应的处理平台中设置的处理算法进行处理,并输出该处理产生的结果。即本发明实施例提供了处理事件的框架,工程师在该框架的基础上开发业务代码即可实现各种事件处理,从而可以提高处理事件的效率,避免工程师对多线程技术的过多关注,进而也节省了人力资源。
可选地,每一步骤对应的处理平台中包括:事件队列模块、事件队列的监控模块、线程池模块、事件处理器、和事件处理器的监控模块;其中,
所述事件队列模块,存储本处理平台中需要处理的事件;
所述事件队列的监控模块,监控所述事件队列模块中是否有事件,若有,则将所述事件队列模块中的事件取出交给所述事件处理器进行处理;
所述事件处理器,调用所述线程池模块中提供的线程,对所述事件队列的监控模块从所述事件队列模块中取出的事件进行处理;
所述事件处理器的监控模块,将经过所述事件处理器处理产生的事件交给 下一步骤对应的处理平台或输出。
可选地,每一步骤对应的处理平台中还包括:采集模块,和调控器模块;
该方法还包括:
所述采集模块采集事件处理设备的信息;
所述调控器模块根据所述信息当确定需要调整所述线程池模块中线程的数量时,调整所述线程池模块中线程的数量。
可选地,所述信息包括事件处理设备的如下信息之一或组合:
CPU信息,内存信息,网络信息,磁盘信息。
可选地,所述事件队列模块采用如下事件队列之一或组合对事件进行存储:
无锁队列、阻塞队列、双端队列。
本发明实施例提供的一种事件处理设备,包括:预先对事件的处理过程进行划分得到的与每一步骤一一对应的处理平台,其中,
第一个步骤对应的处理平台,用于按照预先在第一个步骤对应的处理平台中设置的处理算法对预先在该第一个步骤对应的处理平台中添加的事件进行处理,并将该处理产生的事件交给下一步骤对应的处理平台;
第一个步骤之后最后一个步骤之前的任一步骤对应的处理平台,用于对从上一步骤对应的处理平台产生的事件,按照预先在该任一步骤对应的处理平台中设置的处理算法进行处理,并将该处理产生的事件交给下一步骤对应的处理平台;
最后一个步骤对应的处理平台,用于对从上一步骤对应的处理平台产生的事件,按照预先在该最后一个步骤对应的处理平台中设置的处理算法进行处理,并输出该处理产生的结果。
可选地,每一步骤对应的处理平台中包括:事件队列模块、事件队列的监控模块、线程池模块、事件处理器、和事件处理器的监控模块;其中,
所述事件队列模块,用于存储本处理平台中需要处理的事件;
所述事件队列的监控模块,用于监控所述事件队列模块中是否有事件,若有,则将所述事件队列模块中的事件取出交给所述事件处理器进行处理;
所述事件处理器,用于调用所述线程池模块中提供的线程,对所述事件队列的监控模块从所述事件队列模块中取出的事件进行处理;
所述事件处理器的监控模块,用于将经过所述事件处理器处理产生的事件交给下一步骤对应的处理平台或输出。
可选地,每一步骤对应的处理平台中还包括:采集模块,和调控器模块;其中,
所述采集模块,用于采集事件处理设备的信息;
所述调控器模块,用于根据所述信息当确定需要调整所述线程池模块中线程的数量时,调整所述线程池模块中线程的数量。
可选地,所述信息包括事件处理设备的如下信息之一或组合:
CPU信息,内存信息,网络信息,磁盘信息。
可选地,所述事件队列模块采用如下事件队列之一或组合对事件进行存储:
无锁队列、阻塞队列、双端队列。
本发明实施例提供的一种服务器,包括本发明实施例提供的任一所述的事件处理设备。
附图说明
图1为本发明实施例提供的一种事件处理设备的结构示意图;
图2为本发明实施例提供的第二种事件处理设备的结构示意图;
图3为本发明实施例提供的第三种事件处理设备的结构示意图;
图4为本发明实施例提供的一种事件处理方法的流程示意图。
具体实施方式
本发明实施例提供了一种事件处理方法、设备及一种服务器,用以提高事件处理效率。
本发明实施例提供的技术方案,对于为不具有多线程知识的或非专业多线程研发人员提供了一种框架,在该框架的基础上开发业务代码,无需关注多线程及并发知识和并发问题。
本发明实施例提供的技术方案,把一个事件请求链路上每个单独处理的部分划分为单独的处理平台(stage),每个stage负责处理独立的业务逻辑,即预先把做一件事情分成具体的若干步骤,每一步骤与一stage一一对应,每一stage负责完成自己平台的事件,即该stage对应的步骤中涉及的事件,可以理解为整个大的事件下的子事件。在具体的实际应用中,针对整个事件,即整个链路,可以按照业务需求预先设置一个或多个stage,参见图1所示,例如,预先将需要处理的事件划为五个步骤,每一步骤对应一stage,其中,stage一对应第一个步骤,stage二对应第二个步骤,stage三和stage四分别对应第二步骤后的两个并列的步骤,stage五对应这两个并列执行的步骤的后续的最后一个步骤。
在上述图1中所示的事件处理设备的架构下,例如:生产铅笔,可以把制作铅笔的事件处理设备分为以下五个stage:
stage一:设计铅笔图纸;
stage二:铅笔图纸可行性分析;
stage三:按照铅笔要求生产笔芯;
stage四:按照铅笔要求生产铅笔壳;
stage五:根据stage三和stage四生产的部件组装铅笔,组装好铅笔整个铅笔的制作就完成了。
其中每一stage负责处理该stage对应的步骤,具体采用的算法可以根据实际业务需求而定,即不同的业务需求对应不同的事件处理过程,因此,当多种业务的事件处理过程中,具有相同的处理步骤时,就可以将之前已经划分出的 处理步骤所对应的stage直接应用到另一业务对应的事件处理过程中,进行灵活组合,无需每次都要针对不同的业务需求,重新设计相应的事件处理过程中所需要的各种算法、代码等。因此,可以很大程度地提高事件处理效率,节约人力、物力。
因此,参见图2,本发明实施例提供的一种事件处理设备,包括:预先对事件的处理过程进行划分得到的与每一步骤一一对应的处理平台,其中,
第一个步骤对应的处理平台201,用于按照预先在第一个步骤对应的处理平台中设置的处理算法对预先在该第一个步骤对应的处理平台中添加的事件进行处理,并将该处理产生的事件交给下一步骤对应的处理平台;
第一个步骤之后最后一个步骤之前的任一步骤对应的处理平台202,也可以简称为中间处理平台,用于对从上一步骤对应的处理平台产生的事件,按照预先在该任一步骤对应的处理平台中设置的处理算法进行处理,并将该处理产生的事件交给下一步骤对应的处理平台;
最后一个步骤对应的处理平台203,用于对从上一步骤对应的处理平台产生的事件,按照预先在该最后一个步骤对应的处理平台中设置的处理算法进行处理,并输出该处理产生的结果。
需要说明的是,本发明实施例中提供的事件处理设备,具体包括的处理平台的数量不进行限制,具体可以根据实际需要而定,即有可能只有一个处理平台,也有可能只有两个处理平台,或者更多个处理平台,当存在多个中间处理平台时,每一中间处理平台相互之间的连接关系,以及与第一个步骤对应的处理平台、最后一个步骤对应的处理平台之间的连接关系,取决于实际需要,即根据实际业务需求对整个事件划分的步骤之间的相互关系而定,本发明实施例不进行限定。
可选地,参见图3,可以假设对于当前步骤对应的处理平台402,存在上一步骤对应的处理平台401和下一步骤对应的处理平台403。其中,上一步骤对应的处理平台401可以有一个或多个,下一步骤对应的处理平台403也可以 有一个或多个。
每一步骤对应的处理平台中包括:事件队列模块21、事件队列的监控模块22、线程池模块24、事件处理器23、和事件处理器的监控模块25;其中,
所述事件队列模块,用于存储本处理平台中需要处理的事件,该事件有可能是预设的(若当前步骤对应的处理平台402是第一个步骤对应的处理平台),也可以是经上一步骤对应的处理平台401处理后得到的事件;
所述事件队列的监控模块(EventQueueListenerThread),具体为事件队列模块的监控线程,用于监控所述事件队列模块中是否有事件,若有,则将所述事件队列模块中的事件取出交给所述事件处理器进行处理;
所述事件处理器,用于调用所述线程池模块中提供的线程,对所述事件队列的监控模块从所述事件队列模块中取出的事件进行处理;
所述事件处理器的监控模块(EventHandlerListenerThread),为事件处理器的监控线程,用于将经过所述事件处理器处理产生的事件交给下一步骤对应的处理平台403或输出(若当前步骤对应的处理平台402是最后一个步骤对应的处理平台)。
可选地,每一步骤对应的处理平台中还包括:采集模块26,和调控器模块27;其中,
所述采集模块,用于采集事件处理设备的信息;
所述调控器模块,用于根据所述信息当确定需要调整所述线程池模块中线程的数量时,调整所述线程池模块中线程的数量。
可选地,所述信息包括事件处理设备的如下信息之一或组合:
CPU信息,内存信息,网络信息,磁盘信息。
可选地,所述事件队列模块采用如下事件队列之一或组合对事件进行存储:
无锁队列(UnlockQueue)、阻塞队列(Fine grit queue)、双端队列(edque)。这些队列都是java提供的数据结构。
下面给出以上架构中各个模块的具体的解释说明。
事件队列模块(Queue):主要可以采用无锁队列,无锁队列主要采用环形数组,其下有2个游标,生产者游标和消费者游标。当生产者游标减去消费者游标小于预设的最大容量时,生产者才可以生产事件;同理,当生产者游标减去消费者游标大于0时,消费者才可消费事件。无锁队列主要采用环形数组来存储数据,其中所述的最大容量,即环形数组可容纳的最大数据个数,本发明实施例中使用无锁原子Long类型作为生产者游标和消费者游标,当生产者游标减消费者游标等于最大容量时,代表无锁队列容量已满不能再添加数据,同理当生产者游标减消费者游标等于零时,代表无锁队列容量为空,消费者不能再消费数据。
其中的环形数组,是计算机数据结构的一种,环形数组的最大长度节点的下一个节点为数据的起始节点。
对于本发明实施例提供的框架中,生产者游标仅指事件生产者生产事件的个数,消费者游标仅指事件消费者消费事件的个数。所述的最大容量,即无锁队列能够接收事件的最多个数,即:接受事件的最大个数。
所述的生产事件,是生产者根据自己的业务逻辑产生对应的事件,比如:生产铅笔芯,负责生产铅笔芯的处理平台就是一个生产者,按照铅笔设计的要求生产出的铅笔芯就是事件。所述的消费事件,是指根据生产者生产的事件特性,从无锁队列中把事件取出执行相应的业务逻辑(具体的事件特性以及业务逻辑都是可以预先设置好的),可以理解为当前步骤对应的处理平台获取上一步骤对应的处理平台处理得到的事件,并对该事件进行处理,将处理得到的事件输出或发给下一步骤对应的处理平台。
线程池模块(Thread Pool):即主要使用java语言提供的固定线程池,实现线程的不定期回收线程,具体地,JVM会根据线程池中线程特性,比如某个线程已经执行完毕,此时JVM会把该线程规划为初始化状态,使用该线程能够继续完成后续工作。
事件处理器(EventHandler):主要是业务开发人员编写业务代码的地方,业务开发者继承事件处理器类,实现相应的方法,具体地,本发明实施例提供的框架(即事件处理设备)开发了事件处理器接口,接口中定义了处理器(handler)方法,具体的事件处理器继承该接口实现handler方法即可。
采集模块:负责采集事件处理设备的软、硬件信息,比如cpu信息、网络信息、接口信息,以便提供给调控器模块。
调控器模块(Controler),负责根据采集模块采集的事件处理设备的软、硬件信息,判断是否对线程池大小做出调整,例如,调控器模块会根据采集到的cpu信息,当确定cpu使用率偏高时降低线程池大小,反之增加线程池线程大小;或根据采集到的网络信息当确定网络使用率偏高时降低线程池大小,反之增加线程池线程大小。
另外,本发明实施例提供了一种服务器,包括本发明实施例提供的任一所述的事件处理设备。
相应地,参见图4,本发明实施例提供的一种事件处理方法包括:
在预先对事件的处理过程进行划分得到的与每一步骤一一对应的处理平台中:
S301、第一个步骤对应的处理平台,按照预先在第一个步骤对应的处理平台中设置的处理算法对预先在该第一个步骤对应的处理平台中添加的事件进行处理,并将该处理产生的事件交给下一步骤对应的处理平台;
S302、第一个步骤之后最后一个步骤之前的任一步骤对应的处理平台,对从上一步骤对应的处理平台产生的事件,按照预先在该任一步骤对应的处理平台中设置的处理算法进行处理,并将该处理产生的事件交给下一步骤对应的处理平台;
需要说明的是,所述上一步骤对应的处理平台,可以是上一个步骤对应的处理平台,也可以是上上个步骤对应的处理平台,即是指当前步骤之前的步骤对应的处理平台,而不限于上一个步骤对应的处理平台。同理,所述下一步骤 对应的处理平台可以是下一个步骤对应的处理平台,也可以是下下个步骤对应的处理平台,即是指当前步骤之后的步骤对应的处理平台,而不限于下一个步骤对应的处理平台。
S303、最后一个步骤对应的处理平台,对从上一步骤对应的处理平台产生的事件,按照预先在该最后一个步骤对应的处理平台中设置的处理算法进行处理,并输出该处理产生的结果。
可选地,每一步骤对应的处理平台中包括:事件队列模块、事件队列的监控模块、线程池模块、事件处理器、和事件处理器的监控模块;其中,
所述事件队列模块,存储本处理平台中需要处理的事件;
所述事件队列的监控模块,监控所述事件队列模块中是否有事件,若有,则将所述事件队列模块中的事件取出交给所述事件处理器进行处理;
所述事件处理器,调用所述线程池模块中提供的线程,对所述事件队列的监控模块从所述事件队列模块中取出的事件进行处理;
所述事件处理器的监控模块,将经过所述事件处理器处理产生的事件交给下一步骤对应的处理平台或输出。
可选地,每一步骤对应的处理平台中还包括:采集模块,和调控器模块;
该方法还包括:
所述采集模块采集事件处理设备的信息;
所述调控器模块根据所述信息当确定需要调整所述线程池模块中线程的数量时,调整所述线程池模块中线程的数量。
可选地,所述信息包括事件处理设备的如下信息之一或组合:
CPU信息,内存信息,网络信息,磁盘信息。
可选地,所述事件队列模块采用如下事件队列之一或组合对事件进行存储:
无锁队列、阻塞队列、双端队列。
综上所述,本发明实施例中,预先对事件的处理过程进行划分得到的与每 一步骤一一对应的处理平台,其中,在处理事件的过程中,第一个步骤对应的处理平台,按照预先在第一个步骤对应的处理平台中设置的处理算法对预先在该第一个步骤对应的处理平台中添加的事件进行处理,并将该处理产生的事件交给下一步骤对应的处理平台;第一个步骤之后最后一个步骤之前的任一步骤对应的处理平台,对从上一步骤对应的处理平台产生的事件,按照预先在该任一步骤对应的处理平台中设置的处理算法进行处理,并将该处理产生的事件交给下一步骤对应的处理平台;最后一个步骤对应的处理平台,对从上一步骤对应的处理平台产生的事件,按照预先在该最后一个步骤对应的处理平台中设置的处理算法进行处理,并输出该处理产生的结果。即本发明实施例提供了处理事件的框架,工程师在该框架的基础上开发业务代码即可实现各种事件处理,从而可以提高处理事件的效率,避免工程师对多线程技术的过多关注,进而也节省了人力资源。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中 的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。