CN112015523A - 事件防丢失方法、装置、电子设备及存储介质 - Google Patents
事件防丢失方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112015523A CN112015523A CN202010766766.6A CN202010766766A CN112015523A CN 112015523 A CN112015523 A CN 112015523A CN 202010766766 A CN202010766766 A CN 202010766766A CN 112015523 A CN112015523 A CN 112015523A
- Authority
- CN
- China
- Prior art keywords
- event
- service
- thread pool
- target
- target event
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Retry When Errors Occur (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供了一种事件防丢失方法、装置、电子设备及存储介质,所述方法包括:在确定服务接收到启动指令进行启动的情况下,加载预置的事件处理方法;执行所述预置的事件处理方法,具体包括:监听所述服务是否接收到关闭指令;若是,从事件总线组件对应的线程池中获取目标事件,并对所述目标事件进行存储;在监听到所述服务再次启动的情况下,查找所存储的所述目标事件;将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种事件防丢失方法、装置、电子设备及存储介质。
背景技术
Guava是一种基于开源的Java库,Guava中的EventBus是一种用于Android的发布/订阅事件总线。EventBus组件可以用来进行一些事件的封装投递,发布者通过EventBus组件发布事件,订阅者通过EventBus组件订阅事件。其中,EventBus组件的事件处理机制其实是设计模式中的观察者模式的优雅实现,既支持事件的发布与订阅,又支持事件处理的同步异步机制,通过维护一组线程池来实现所有事件的处理。
相关技术中,随着服务QPS(Queries-per-second,每秒查询率)的逐渐增大,EventBus组件线程池中的事件可能会有积压,即线程池中线程数量有限,则处理事件的能力有限,有些事件并未及时被处理,相应的订阅者未及时接收这些事件,造成EventBus组件线程池中事件积压。如果此时服务进行重启,则EventBus组件线程池中积压的事件将会丢失,从而导致相应的功能并未执行,发布者与订阅者之间数据的一致性失去保障。
发明内容
本发明实施例的目的在于提供一种事件防丢失方法、装置、电子设备及存储介质,以实现在服务进行重启的过程中防止事件丢失,保证相应的功能可以执行,保证发布者与订阅者之间数据的一致性的有益效果。
在本发明实施例的第一方面,首先提供了一种事件防丢失方法,所述方法包括:
在确定服务接收到启动指令进行启动的情况下,加载预置的事件处理方法;
执行所述预置的事件处理方法,具体包括:
监听所述服务是否接收到关闭指令;
若是,从事件总线组件对应的线程池中获取目标事件,并对所述目标事件进行存储;
在监听到所述服务再次启动的情况下,查找所存储的所述目标事件;
将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。
在一个可选的实施方式中,所述监听所述服务是否接收到关闭指令,包括:
确定服务关闭事件是否触发;
若所述服务关闭事件触发,则确定所述服务接收到关闭指令;
所述若是,从事件总线组件对应的线程池中获取目标事件,包括:
若是,关闭所述服务对应的外部请求接收接口,以使所述服务停止接收外部请求;
在关闭所述服务对应的外部请求接收接口之后,从事件总线组件对应的线程池中获取目标事件。
在一个可选的实施方式中,所述从事件总线组件对应的线程池中获取目标事件,包括:
根据预设的服务与事件总线组件的对应关系,确定与所述服务对应的事件总线组件;
从所述事件总线组件对应的线程池中获取目标事件,并建立所述服务与所述目标事件之间的索引;
所述在监听到所述服务再次启动的情况下,查找所存储的所述目标事件,包括:
在监听到所述服务再次启动的情况下,根据所述服务与所述目标事件之间建立的索引查找所存储的所述目标事件。
在一个可选的实施方式中,所述从事件总线组件对应的线程池中获取目标事件,包括:
判断事件总线组件对应的线程池中是否存在积压的事件;
若所述事件总线组件对应的线程池中存在积压的事件,则从所述事件总线组件对应的线程池中获取积压的事件作为目标事件。
在一个可选的实施方式中,所述将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理,包括:
基于事件的生成时刻对所存储的所述目标事件进行排序;
按照所述目标事件的排列顺序,将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。
在一个可选的实施方式中,所述对所述目标事件进行存储,包括:
提取所述目标事件中携带的关键字;
建立与所述关键字对应的存储队列,其中,所述关键字与所述存储队列一一对应;
将所述目标事件基于事件的生成时刻存储至所述目标事件中携带的所述关键字对应的所述存储队列中;
所述在确定所述服务接收到启动指令进行再次启动的情况下,查找所存储的所述目标事件,包括:
在确定所述服务接收到启动指令进行再次启动的情况下,从所述存储队列中查找所存储的所述目标事件;
所述将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理,包括:
从所述存储队列中并行获取所存储的所述目标事件,并添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。
在本发明实施例的第二方面,还提供了一种事件防丢失装置,所述装置包括:
方法加载模块,用于在确定服务接收到启动指令进行启动的情况下,加载预置的事件处理方法;
方法执行模块,用于执行所述预置的事件处理方法,具体包括:服务监听子模块,用于监听所述服务是否接收到关闭指令;事件获取子模块,用于若是,从事件总线组件对应的线程池中获取目标事件;事件存储子模块,用于对所述目标事件进行存储;事件查找子模块,用于在监听到所述服务再次启动的情况下,查找所存储的所述目标事件;事件添加子模块,用于将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。
在一个可选的实施方式中,所述服务监听子模块具体用于:
确定服务关闭事件是否触发;
若所述服务关闭事件触发,则确定所述服务接收到关闭指令;
所述事件获取子模块具体用于:
若是,关闭所述服务对应的外部请求接收接口,以使所述服务停止接收外部请求;
在关闭所述服务对应的外部请求接收接口之后,从事件总线组件对应的线程池中获取目标事件。
在本发明实施例的第三方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述第一方面中任一所述的事件防丢失方法。
在本发明实施例的第四方面,还提供了一种存储介质,所述存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面中任一所述的事件防丢失方法。
在本发明实施例的第五方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面中任一所述的事件防丢失方法。
本发明实施例提供的技术方案,在确定服务接收到启动指令进行启动的情况下,加载预置的事件处理方法,执行预置的事件处理方法,具体包括:监听服务是否接收到关闭指令,若是,从事件总线组件对应的线程池中获取目标事件,并对目标事件进行存储;在监听到服务再次启动的情况下,查找所存储的目标事件;将所存储的目标事件添加至线程池中,以使线程池中线程继续对目标事件进行处理。如此在确定服务接收到关闭指令进行关闭的情况下对事件进行存储,在确定服务接收到启动指令进行再次启动的情况下将事件添加至线程池中,可以在服务进行重启的过程中防止事件丢失,保证相应的功能可以执行,保证发布者与订阅者之间数据的一致性。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中示出的一种事件防丢失方法的实施流程示意图;
图2为本发明实施例中示出的一种执行预置的事件处理方法的实施流程示意图;
图3为本发明实施例中示出的一种服务与EventBus组件对应关系示意图;
图4为本发明实施例中示出的一种对EventBus组件对应的线程池中积压的事件进行持久化存储的实施流程示意图;
图5为本发明实施例中示出的一种将积压的事件重新添加至EventBus组件对应的线程池中的实施流程示意图;
图6为本发明实施例中示出的另一种执行预置的事件处理方法的实施流程示意图;
图7为本发明实施例中示出的另一种执行预置的事件处理方法的实施流程示意图;
图8为本发明实施例中示出的一种事件防丢失装置的结构示意图;
图9为本发明实施例中示出的一种电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
如图1所示,为本发明实施例提供的一种事件防丢失方法的实施流程示意图,该方法具体可以包括以下步骤:
S101,在确定服务接收到启动指令进行启动的情况下,加载预置的事件处理方法。
在本发明实施例中,对于服务可以接收启动指令进行启动,在确定服务接收到启动指令进行启动的情况下,(由容器或者处理器)加载预置的事件处理方法。
S102,执行所述预置的事件处理方法。
在本发明实施例中,执行该事件处理方法,可以在确定服务接收到关闭指令进行关闭的情况下对事件进行存储,在确定服务接收到启动指令进行再次启动的情况下将事件添加至线程池中,如此在服务进行重启的过程中防止事件丢失,保证相应的功能可以执行,保证发布者与订阅者之间数据的一致性。
如图2所示,为本发明实施例示出的一种执行预置的事件处理方法的实施流程示意图,具体可以包括以下步骤:
S201,监听所述服务是否接收到关闭指令。
当服务接收到关闭指令进行关闭时,会触发服务关闭事件,如此可以通过以下方式监听服务是否接收到关闭指令:
确定服务关闭事件是否触发,若服务关闭事件触发,则确定服务接收到关闭指令,若服务关闭事件未触发,则确定服务未接收到关闭指令。
S202,若是,从事件总线组件对应的线程池中获取目标事件,并对所述目标事件进行存储。
在本发明实施例中,EventBus(事件总线)组件可以用来进行一些事件的封装投递,发布者通过EventBus组件发布事件,订阅者通过EventBus组件订阅事件。其中,该事件由服务对外部请求进行处理时产生。
对于目标事件,即EventBus组件对应的线程池中积压的事件,线程池中线程数量有限,则处理事件的能力有限,有些事件并未及时被处理(即未及时投递至订阅者),造成EventBus组件对应的线程池中事件积压。
为此,为了防止在服务重启过程中EventBus组件对应的线程池中积压的事件丢失,在确定服务接收到关闭指令的情况下,可以关闭服务对应的外部请求接收接口,服务将停止接收外部请求,如此避免服务对外部请求进行处理产生新的事件。
例如,在确定服务A接收到关闭指令的情况下,关闭服务A对应的外部请求接收接口,服务A将停止接收外部请求,如此可以避免服务A对外部请求进行处理产生新的事件,后续仅仅对EventBus组件对应的线程池中积压的事件进行存储即可,可以节省存储资源,减少工作量。
在关闭服务对应的外部请求接收接口之后,从事件总线组件,即EventBus组件对应的线程池中获取目标事件(即积压的事件),并对该目标事件进行存储,其中,具体可以采用以下方式对目标事件进行存储。
1、对该目标事件进行持久化存储。其中,对该目标事件进行持久化存储,即将该目标事件存储至数据库、磁盘等永久性存储工具中。
其中,在关闭服务对应的外部请求接收接口之后,根据预设的服务与事件总线组件的对应关系,确定与所述服务对应的事件总线组件,从所述事件总线组件对应的线程池中获取目标事件,即本发明实施例中EventBus组件与服务一一对应,在服务本地均存在一一对应的EventBus组件,如图3所示。
在对该目标事件进行持久化存储的过程中,可以基于服务的标识,以及事件的标识建立Key-Value形式的索引,即建立服务与目标事件之间的索引,方便后续查找该目标事件。其中,服务的标识可以是服务的ID、名称等,事件的标识可以是事件的ID、名称等,本发明实施例对此不作限定。
例如,在关闭服务对应的外部请求接收接口之后,从EventBus组件对应的线程池中获取积压的事件:事件1、事件2、事件3、……,并将该积压的事件存储至数据库,如图4所示,其中,基于服务的标识,以及事件的标识建立的Key-Value形式的索引,如下表1所示。
服务的标识 | 积压的事件的标识 |
A | A 1、A 2、A 3、…… |
B | B1、B2、B3、…… |
表1
2、为了加快存储速度以及加快事件的消费速度,在关闭服务对应的外部请求接收接口之后,从事件总线组件,即EventBus组件对应的线程池中获取目标事件(即积压的事件),提取所述目标事件中携带的关键字,并剔除所述关键字中重复的关键字,建立与所述关键字对应的存储队列,其中,所述关键字与所述存储队列一一对应,将所述目标事件基于事件的生成时刻存储至所述目标事件中携带的所述关键字对应的所述存储队列中。
例如,对于目标事件中携带的关键字Key,Key为用户UID,提取目标事件中携带的用户UID,由于目标事件中携带的用户UID可能重复(意味着多个目标事件属于同一个用户),可以剔除用户UID中重复的用户UID,基于剩余的用户UID分配10个redisson优先级存储队列:队列0、队列1、队列2、……、队列9,其中,剩余的用户UID与存储队列一一对应。
将目标事件基于事件的生成时刻存储至目标事件中携带的关键字对应的存储队列中:目标事件1、目标事件2、目标事件3中携带的用户ID一致,可以存储至该用户ID对应的存储队列0中,其中,对于目标事件1、目标事件2、目标事件3,事件的生成时刻越早则优先存储至存储队列0;目标事件4、目标事件5、目标事件6中携带的用户ID一致,可以存储至该用户ID对应的存储队列1中,其中,对于目标事件4、目标事件5、目标事件6,事件的生成时刻越早则优先存储至存储队列1;以此类推,如此属于同一个用户的目标事件可以存储至同一存储队列中,且基于事件的生成时刻进行排序存储,如下表2所示。
存储队列 | 目标事件 |
队列0 | 目标事件1、目标事件2、目标事件3 |
队列1 | 目标事件4、目标事件5、目标事件6 |
…… | …… |
队列9 | 目标事件20、目标事件21 |
表2
S203,在监听到所述服务再次启动的情况下,查找所存储的所述目标事件。
S204,将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。
经过上述步骤,在服务关闭以后,针对EventBus组件对应的线程池中积压的事件进行存储,可以防止事件丢失,如此在监听到服务再次启动的情况下,可以查找已存储的积压的事件,进而可以将该积压的事件添加至EventBus组件对应的线程池中,以使EventBus组件对应的线程池中线程继续对该积压的事件进行处理。其中,在确定所述服务接收到启动指令进行再次启动的情况下,根据所述服务与所述目标事件之间建立的索引查找所存储的所述目标事件。
例如,在监听到服务A接收到启动指令进行再次启动的情况下,根据上述表1所建立的Key-Value形式的索引,从数据库中可以查找服务A所对应的EventBus组件的线程池中积压的事件,并将该EventBus组件对应的线程池中积压的事件重新添加至EventBus组件对应的线程池中,如此EventBus组件对应的线程池中线程可以继续对积压的事件进行处理,如图5所示。其中,EventBus组件对应的线程池中多个线程可以继续并行对积压的事件进行处理,本发明实施例对此不作限定。
或者,在监听到所述服务再次启动的情况下,从所述存储队列中查找所存储的所述目标事件,从所述存储队列中并行获取所存储的所述目标事件,并添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。如此并行获取存储队列中所存储的目标事件添加至线程池中,这样线程池中线程可以快速消费目标事件,从而提高事件的消费速度。其中,在确定所述服务接收到启动指令进行再次启动的情况下,根据所述服务与所述目标事件之间建立的索引,从所述存储队列中查找所存储的所述目标事件。
在并行获取存储队列中所存储的目标事件的过程中,对于每个存储队列均存在对应的线程,对于每个存储队列中存储的目标事件遵循先进先出的原则,依次将所存储的所述目标事件添加至所述线程池中,由该存储队列对应的线程按照先后顺序继续对目标事件进行处理。如此对于每个存储队列中存储的目标事件,均存在对应的线程按照先后顺序继续对目标事件进行处理,从存储队列的维度来看,每个存储队列中存储的目标事件依序消费,保证事件消费的有序性。
例如,在确定服务A接收到启动指令进行再次启动的情况下,根据上述表1所建立的Key-Value形式的索引,从存储队列0、存储队列1、……、存储队列9查找服务A所对应的EventBus组件的线程池中积压的事件,从存储队列0、存储队列1、……、存储队列9中并行获取服务A所对应的EventBus组件的线程池中积压的事件,并添加至线程池中,以使线程池中线程继续对目标事件进行处理。
其中,在线程池中线程继续对目标事件进行处理的过程中,对于存储队列0、存储队列1、……、存储队列9分别分配对应的线程,如下表3所示,如此对于每个存储队列均存在对应的线程。
存储队列 | 线程 |
队列0 | 线程1 |
队列1 | 线程2 |
…… | …… |
队列9 | 线程10 |
表3
对于存储队列0中存储的目标事件基于事件的生成时刻进行排序存储,存储队列0中存储的目标事件遵循先进先出的原则,依次将所存储的目标事件添加至线程池中,由线程池中线程1对存储队列0中存储的目标事件进行处理,对于存储队列1中存储的目标事件基于事件的生成时刻进行排序存储,存储队列1中存储的目标事件遵循先进先出的原则,依次将所存储的目标事件添加至线程池中,由线程池中线程2对存储队列1中存储的目标事件进行处理,对于其它存储队列类似,本发明实施例在此不再一一赘述。从存储队列的维度来看,每个存储队列中存储的目标事件依序消费,保证事件消费的有序性,且多个存储队列中存储的目标事件并行消费可以进一步快速消费目标事件,从而提高事件的消费速度。
通过上述对本发明实施例提供的技术方案的描述,在确定服务接收到启动指令进行启动的情况下,加载预置的事件处理方法,执行预置的事件处理方法,具体包括:监听服务是否接收到关闭指令,若是,从事件总线组件对应的线程池中获取目标事件,并对目标事件进行存储;在监听到服务再次启动的情况下,查找所存储的目标事件;将所存储的目标事件添加至线程池中,以使线程池中线程继续对目标事件进行处理。
如此在确定服务接收到关闭指令进行关闭的情况下对事件进行存储,在确定服务接收到启动指令进行再次启动的情况下将事件添加至线程池中,可以在服务进行重启的过程中防止事件丢失,保证相应的功能可以执行,保证发布者与订阅者之间数据的一致性。
如图6所示,为本发明实施例提供的另一种执行预置的事件处理方法的实施流程示意图,具体可以包括以下步骤:
S601,监听所述服务是否接收到关闭指令。
在本发明实施例中,本步骤与上述步骤S201类似,本发明实施例在此不再一一赘述。
S602,若是,关闭所述服务对应的外部请求接收接口,以使所述服务停止接收外部请求。
在本发明实施例中,本步骤与上述步骤S202类似,本发明实施例在此不再一一赘述。
S603,在关闭所述服务对应的外部请求接收接口之后,判断事件总线组件对应的线程池中是否存在积压的事件。
S604,若所述事件总线组件对应的线程池中存在积压的事件,则从所述事件总线组件对应的线程池中获取积压的事件作为目标事件,并对所述目标事件进行存储;
在关闭服务对应的外部请求接收接口之后,本发明实施例可以判断EventBus组件对应的线程池中是否存在积压的事件,如果EventBus组件对应的线程池中存在积压的事件,从EventBus组件对应的线程池中获取积压的事件作为目标事件,并对该目标事件进行存储,如果EventBus组件对应的线程池中未存在积压的事件,可以不进行任何处理,程序直接结束。
S605,在监听到所述服务再次启动的情况下,查找所存储的所述目标事件。
S606,将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。
在监听到所述服务再次启动的情况下,查找所存储的积压的事件,并将所存储的积压的事件添加至EventBus组件对应的线程池中,以使EventBus组件对应的线程池中线程继续对积压的事件进行处理,如图7所示。
其中,为了确定目标事件及时被处理,提高事件反馈效率,基于事件的生成时刻对所存储的目标事件进行排序,按照目标的排列顺序,将目标事件添加至EventBus组件对应的线程池中,以使EventBus组件对应的线程池中线程继续对目标事件进行处理,优先保障目标事件被处理。
需要说明的是,在本发明实施例中,基于Spring Boot的应用,该应用提供的服务都是使用其内嵌的容器作为Web服务的底层支撑,即Web服务需要依托于容器。
其中,Spring Boot支持目前主流的servlet容器,包括Tomcat、jetty、undertow等。例如,基于Spring Boot的应用,该应用提供的服务都是使用其内嵌的Tomcat容器作为Web服务的底层支撑。
当服务依托的容器进行关闭时,服务依托的容器将移除所加载的预置的事件处理方法,因此在服务依托的容器启动之后,在确定服务接收到启动指令进行启动的情况下,服务依托的容器需要加载预置的事件处理方法,执行预置的事件处理方法,防止服务重启的过程中EventBus组件对应的线程池中积压的事件丢失。
与上述方法实施例相对应,本发明实施例还提供了一种事件防丢失装置,如图8所示,该装置可以包括:方法加载模块810、方法执行模块820,其中,所述方法执行模块820具体包括:服务监听子模块821、事件获取子模块822、事件存储子模块823、事件查找子模块824、事件添加子模块825。
方法加载模块810,用于在确定服务接收到启动指令进行启动的情况下,加载预置的事件处理方法;
方法执行模块820,用于执行所述预置的事件处理方法,具体包括:服务监听子模块821,用于监听所述服务是否接收到关闭指令;事件获取子模块822,用于若是,从事件总线组件对应的线程池中获取目标事件;事件存储子模块823,用于对所述目标事件进行存储;事件查找子模块824,用于在监听到所述服务再次启动的情况下,查找所存储的所述目标事件;事件添加子模块825,用于将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。
本发明实施例还提供了一种电子设备,如图9所示,包括处理器91、通信接口92、存储器93和通信总线94,其中,处理器91,通信接口92,存储器93通过通信总线94完成相互间的通信,
存储器93,用于存放计算机程序;
处理器91,用于执行存储器93上所存放的程序时,实现如下步骤:
在确定服务接收到启动指令进行启动的情况下,加载预置的事件处理方法;执行所述预置的事件处理方法,具体包括:监听所述服务是否接收到关闭指令;若是,从事件总线组件对应的线程池中获取目标事件,并对所述目标事件进行存储;在监听到所述服务再次启动的情况下,查找所存储的所述目标事件;将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种存储介质,该存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的事件防丢失方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的事件防丢失方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在存储介质中,或者从一个存储介质向另一个存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (10)
1.一种事件防丢失方法,其特征在于,所述方法包括:
在确定服务接收到启动指令进行启动的情况下,加载预置的事件处理方法;
执行所述预置的事件处理方法,具体包括:
监听所述服务是否接收到关闭指令;
若是,从事件总线组件对应的线程池中获取目标事件,并对所述目标事件进行存储;
在监听到所述服务再次启动的情况下,查找所存储的所述目标事件;
将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。
2.根据权利要求1所述的方法,其特征在于,所述监听所述服务是否接收到关闭指令,包括:
确定服务关闭事件是否触发;
若所述服务关闭事件触发,则确定所述服务接收到关闭指令;
所述若是,从事件总线组件对应的线程池中获取目标事件,包括:
若是,关闭所述服务对应的外部请求接收接口,以使所述服务停止接收外部请求;
在关闭所述服务对应的外部请求接收接口之后,从事件总线组件对应的线程池中获取目标事件。
3.根据权利要求1所述的方法,其特征在于,所述从事件总线组件对应的线程池中获取目标事件,包括:
根据预设的服务与事件总线组件的对应关系,确定与所述服务对应的事件总线组件;
从所述事件总线组件对应的线程池中获取目标事件,并建立所述服务与所述目标事件之间的索引;
所述在监听到所述服务再次启动的情况下,查找所存储的所述目标事件,包括:
在监听到所述服务再次启动的情况下,根据所述服务与所述目标事件之间建立的索引查找所存储的所述目标事件。
4.根据权利要求1所述的方法,其特征在于,所述从事件总线组件对应的线程池中获取目标事件,包括:
判断事件总线组件对应的线程池中是否存在积压的事件;
若所述事件总线组件对应的线程池中存在积压的事件,则从所述事件总线组件对应的线程池中获取积压的事件作为目标事件。
5.根据权利要求1所述的方法,其特征在于,所述将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理,包括:
基于事件的生成时刻对所存储的所述目标事件进行排序;
按照所述目标事件的排列顺序,将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。
6.根据权利要求1所述的方法,其特征在于,所述对所述目标事件进行存储,包括:
提取所述目标事件中携带的关键字;
建立与所述关键字对应的存储队列,其中,所述关键字与所述存储队列一一对应;
将所述目标事件基于事件的生成时刻存储至所述目标事件中携带的所述关键字对应的所述存储队列中;
所述在确定所述服务接收到启动指令进行再次启动的情况下,查找所存储的所述目标事件,包括:
在确定所述服务接收到启动指令进行再次启动的情况下,从所述存储队列中查找所存储的所述目标事件;
所述将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理,包括:
从所述存储队列中并行获取所存储的所述目标事件,并添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。
7.一种事件防丢失装置,其特征在于,所述装置包括:
方法加载模块,用于在确定服务接收到启动指令进行启动的情况下,加载预置的事件处理方法;
方法执行模块,用于执行所述预置的事件处理方法,具体包括:服务监听子模块,用于监听所述服务是否接收到关闭指令;事件获取子模块,用于若是,从事件总线组件对应的线程池中获取目标事件;事件存储子模块,用于对所述目标事件进行存储;事件查找子模块,用于在监听到所述服务再次启动的情况下,查找所存储的所述目标事件;事件添加子模块,用于将所存储的所述目标事件添加至所述线程池中,以使所述线程池中线程继续对所述目标事件进行处理。
8.根据权利要求7所述的装置,其特征在于,所述服务监听子模块具体用于:
确定服务关闭事件是否触发;
若所述服务关闭事件触发,则确定所述服务接收到关闭指令;
所述事件获取子模块具体用于:
若是,关闭所述服务对应的外部请求接收接口,以使所述服务停止接收外部请求;
在关闭所述服务对应的外部请求接收接口之后,从事件总线组件对应的线程池中获取目标事件。
9.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-6中任一所述的方法步骤。
10.一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010766766.6A CN112015523B (zh) | 2020-08-03 | 2020-08-03 | 事件防丢失方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010766766.6A CN112015523B (zh) | 2020-08-03 | 2020-08-03 | 事件防丢失方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112015523A true CN112015523A (zh) | 2020-12-01 |
CN112015523B CN112015523B (zh) | 2023-09-01 |
Family
ID=73500109
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010766766.6A Active CN112015523B (zh) | 2020-08-03 | 2020-08-03 | 事件防丢失方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112015523B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6829770B1 (en) * | 1999-02-23 | 2004-12-07 | Microsoft Corporation | Object connectivity through loosely coupled publish and subscribe events |
CN102664934A (zh) * | 2012-04-06 | 2012-09-12 | 北京华夏电通科技股份有限公司 | 一种用于服务器自适应自反馈的多线程控制方法及*** |
CN103209214A (zh) * | 2013-04-03 | 2013-07-17 | 蓝盾信息安全技术股份有限公司 | 一种基于NoSQL的消息中间件的实现方法 |
CN103870337A (zh) * | 2014-02-28 | 2014-06-18 | 浪潮集团山东通用软件有限公司 | 一种基于seda的esb组件实现方法 |
US20160292019A1 (en) * | 2015-03-31 | 2016-10-06 | Mckesson Corporation | Systems and Methods for Servicing Database Events |
WO2017049912A1 (zh) * | 2015-09-25 | 2017-03-30 | 中兴通讯股份有限公司 | 一种jslee容器的业务处理方法及*** |
CN107783849A (zh) * | 2017-09-27 | 2018-03-09 | 武汉斗鱼网络科技有限公司 | 事件处理方法及客户端 |
US20180091449A1 (en) * | 2016-09-26 | 2018-03-29 | Telefonaktiebolaget Lm Ericsson (Publ) | Event-driven policy-based distributed container management system |
CN109582472A (zh) * | 2018-10-19 | 2019-04-05 | 华为技术有限公司 | 一种微服务处理方法及设备 |
US20200150972A1 (en) * | 2018-11-09 | 2020-05-14 | Microsoft Technology Licensing, Llc | Performing actions opportunistically in connection with reboot events in a cloud computing system |
-
2020
- 2020-08-03 CN CN202010766766.6A patent/CN112015523B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6829770B1 (en) * | 1999-02-23 | 2004-12-07 | Microsoft Corporation | Object connectivity through loosely coupled publish and subscribe events |
CN102664934A (zh) * | 2012-04-06 | 2012-09-12 | 北京华夏电通科技股份有限公司 | 一种用于服务器自适应自反馈的多线程控制方法及*** |
CN103209214A (zh) * | 2013-04-03 | 2013-07-17 | 蓝盾信息安全技术股份有限公司 | 一种基于NoSQL的消息中间件的实现方法 |
CN103870337A (zh) * | 2014-02-28 | 2014-06-18 | 浪潮集团山东通用软件有限公司 | 一种基于seda的esb组件实现方法 |
US20160292019A1 (en) * | 2015-03-31 | 2016-10-06 | Mckesson Corporation | Systems and Methods for Servicing Database Events |
WO2017049912A1 (zh) * | 2015-09-25 | 2017-03-30 | 中兴通讯股份有限公司 | 一种jslee容器的业务处理方法及*** |
US20180091449A1 (en) * | 2016-09-26 | 2018-03-29 | Telefonaktiebolaget Lm Ericsson (Publ) | Event-driven policy-based distributed container management system |
CN107783849A (zh) * | 2017-09-27 | 2018-03-09 | 武汉斗鱼网络科技有限公司 | 事件处理方法及客户端 |
CN109582472A (zh) * | 2018-10-19 | 2019-04-05 | 华为技术有限公司 | 一种微服务处理方法及设备 |
US20200150972A1 (en) * | 2018-11-09 | 2020-05-14 | Microsoft Technology Licensing, Llc | Performing actions opportunistically in connection with reboot events in a cloud computing system |
Also Published As
Publication number | Publication date |
---|---|
CN112015523B (zh) | 2023-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10515326B2 (en) | Database systems and related queue management methods | |
US10430332B2 (en) | System and method for performance tuning of garbage collection algorithms | |
US20180365254A1 (en) | Method and apparatus for processing information flow data | |
US8635250B2 (en) | Methods and systems for deleting large amounts of data from a multitenant database | |
US11310066B2 (en) | Method and apparatus for pushing information | |
JP2017538200A (ja) | 分散環境におけるサービスアドレッシング | |
CN111708586B (zh) | 应用启动配置项加载方法、装置、计算机设备和存储介质 | |
CN109800204B (zh) | 数据分配方法及相关产品 | |
CN110711390A (zh) | 虚拟物品的发放方法、装置及服务器 | |
CN111666516A (zh) | 页面加载方法、装置、电子设备及存储介质 | |
CN113342839A (zh) | 数据处理方法、装置、终端设备和存储介质 | |
CN110633302B (zh) | 一种海量结构化数据的处理方法及装置 | |
CN110865877B (zh) | 一种任务请求的响应方法及设备 | |
CN113742057A (zh) | 一种任务执行方法和装置 | |
CN112015523B (zh) | 事件防丢失方法、装置、电子设备及存储介质 | |
CN111488382A (zh) | 一种数据调用方法、***及电子设备 | |
CN114090268B (zh) | 容器管理方法及容器管理*** | |
CN114756362A (zh) | 资源配额管理方法及***、智能终端、存储介质 | |
US8832176B1 (en) | Method and system for processing a large collection of documents | |
CN116263717A (zh) | 基于事件的订单业务处理方法及装置 | |
CN108718285B (zh) | 云计算集群的流量控制方法、装置及服务器 | |
CN112988806A (zh) | 一种数据处理的方法及装置 | |
CN112559269A (zh) | 一种处理器性能测试方法及装置 | |
CN111881181B (zh) | 一种基于分布式数据库的数据统计方法、装置及设备 | |
CN113177157B (zh) | 标签分离方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |