CN111367694B - 事件处理方法、服务器及计算机存储介质 - Google Patents
事件处理方法、服务器及计算机存储介质 Download PDFInfo
- Publication number
- CN111367694B CN111367694B CN202010190711.5A CN202010190711A CN111367694B CN 111367694 B CN111367694 B CN 111367694B CN 202010190711 A CN202010190711 A CN 202010190711A CN 111367694 B CN111367694 B CN 111367694B
- Authority
- CN
- China
- Prior art keywords
- event
- events
- processing
- target event
- target
- 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.)
- Active
Links
- 238000003672 processing method Methods 0.000 title abstract description 16
- 238000012545 processing Methods 0.000 claims abstract description 116
- 238000000034 method Methods 0.000 claims abstract description 58
- 238000003780 insertion Methods 0.000 claims description 22
- 230000037431 insertion Effects 0.000 claims description 22
- 238000001914 filtration Methods 0.000 claims description 21
- 238000004891 communication Methods 0.000 claims description 19
- 238000004590 computer program Methods 0.000 claims description 8
- 230000008569 process Effects 0.000 abstract description 37
- 238000012986 modification Methods 0.000 abstract description 12
- 230000004048 modification Effects 0.000 abstract description 12
- 230000008859 change Effects 0.000 abstract description 7
- 238000010586 diagram Methods 0.000 description 7
- 230000009471 action Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
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/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/541—Client-server
-
- 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)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Multimedia (AREA)
- Debugging And Monitoring (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明实施例提供了一种事件处理方法、服务器及计算机存储介质,通过实体标识和序列号共同标识事件的唯一性,对实体标识和序列号均相同的事件严格按照顺序执行,保证在同一时间,仅存在单线程对同一个实体对象进行处理,避免同一实体对象数据被重复修改,或者同一实体对象状态被重复变更,使得服务器事件处理的业务逻辑更加清晰,同时也降低了服务器因重复处理而产生的不必要的资源消耗,提高了服务器事件处理的效率和正确率。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种事件处理方法、服务器及计算机存储介质。
背景技术
在合同中台系统中,用户的每次操作请求,服务器都会转化成事件形式进行处理。响应于用户的不同操作请求,服务器对不同事件进行处理时,将会涉及到数据的查询、修改或者状态变更等。由于客户端快速操作或者网络通信响应延迟等原因,可能导致服务器接收到多个相同的并发事件,由于服务器的高并发性,服务器将会对上述多个相同的并发事件重复处理,从而导致对实体数据的重复修改,针对交易系统、支付系统等后果尤其严重。
可见,现有技术中存在对同一实体的并发事件进行重复处理的问题。
发明内容
本发明实施例的目的在于提供一种事件处理方法、服务器及计算机存储介质,以实现在同一时刻仅单线程对同一实体进行处理。具体技术方案如下:
在本发明实施的第一方面,首先提供了一种事件处理方法,包括:
在同时接收到N个事件的情况下,生成所述N个事件的序列号,所述N个事件的序列号相同;
在所述N个事件中包括实体标识相同的M个事件的情况下,向MySQL数据表中插入目标事件对应的MySQL记录;
在所述目标事件的MySQL记录插入成功的情况下,对所述目标事件进行处理,并过滤M-1个事件;
其中,所述目标事件为所述M个事件中的一个事件,在向MySQL数据表中插入目标事件对应的MySQL记录时,所述M-1个事件处于等待插入记录的状态,N为大于1的整数;M为大于1,且小于或等于N的整数。
在本发明实施的第二方面,还提供了一种服务器,包括:
生成模块,用于在同时接收到N个事件的情况下,生成所述N个事件的序列号,所述N个事件的序列号相同;
插入模块,用于在所述N个事件中包括实体标识相同的M个事件的情况下,向MySQL数据表中插入目标事件对应的MySQL记录;
处理模块,用于在所述目标事件的MySQL记录插入成功的情况下,对所述目标事件进行处理,并过滤M-1个事件;
其中,所述目标事件为所述M个事件中的一个事件,在向MySQL数据表中插入目标事件对应的MySQL记录时,所述M-1个事件处于等待插入记录的状态,N为大于1的整数;M为大于1,且小于或等于N的整数。
在本发明实施的第三方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现本发明实施例第一方面中所述的方法步骤。
在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述任一所述的事件处理方法。
在本发明实施的又一方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的事件处理方法。
本发明实施例提供的事件处理方法、服务器及计算机存储介质,当服务器接收到N个事件的情况下,生成所述N个事件的序列号,该N个事件的序列号相同,若所述N个事件中包括实体标识相同的M个事件时,向MySQL数据表中插入目标事件对应的MySQL记录,在目标事件对应的MySQL记录插入成功的情况下,对目标事件进行处理,对除目标事件之外的其他M-1个事件进行过滤。通过实体标识和序列号共同标识事件的唯一性,对实体标识和序列号均相同的事件严格按照顺序执行,保证在同一时间,服务器仅存在单线程对同一个实体对象进行处理,避免同一实体对象数据被重复修改,或者同一实体对象状态被重复变更,使得服务器事件处理的业务逻辑更加清晰,同时也降低了服务器因重复处理而产生的不必要的资源消耗,提高了服务器事件处理的效率和正确率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明实施例中一种事件处理方法的流程图;
图2为本发明实施例中另一种事件处理方法的流程图;
图3为本发明实施例中一种事件处理方法的示意图;
图4是本发明实施例中一种服务器的结构图;
图5是本发明实施例中另一种服务器的结构图;
图6是本发明实施例中又一种服务器的结构图;
图7是本发明实施例中一种电子设备的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
实施例一
请参见图1,图1是本发明实施例提供的一种事件处理方法的流程图,该方法可以应用于服务器。
如图1所示,所述方法包括以下步骤:
步骤101、在同时接收到N个事件的情况下,生成所述N个事件的序列号,所述N个事件的序列号相同;
步骤102、在所述N个事件中包括实体标识相同的M个事件的情况下,向MySQL数据表中插入目标事件对应的MySQL记录;
步骤103、在所述目标事件的MySQL记录插入成功的情况下,对所述目标事件进行处理,并过滤M-1个事件;
其中,所述目标事件为所述M个事件中的一个事件,在向MySQL数据表中插入目标事件对应的MySQL记录时,所述M-1个事件处于等待插入记录的状态,N为大于1的整数;M为大于1,且小于或等于N的整数
由于客户端的快速点击操作、多客户端同时操作、网络通信延迟或者服务器响应慢等问题,可能导致服务器同时接受因客户端操作而触发的N个事件,其中,N为大于1的整数。上述事件可以理解为消息事件,用户在客户端的操作请求将会封装为事件,以消息的形式发送至服务器。其中,每一事件的消息体字段中包括当前用户操作所指向的实体对象以及对应的业务逻辑。服务器响应于上述操作请求,将会对接收到的消息事件进行处理,执行其中包含的业务逻辑。在此过程中,可能涉及数据的修改,或者实体对象状态的变更。
现有技术中,基于服务器的高并发性,服务器可对上述N个事件同时处理。若上述N个事件中存在完全相同的两个或者多个事件,例如在交易系统中,存在针对同一订单的重复支付事件时,服务器对上述两个或者多个事件的重复处理,将会导致数据的重复修改或者增减,危害较大。
本发明实施例中,服务器针对同时接收到的N个事件,为每一事件生成实体标识和序列号作为联合唯一键,标识事件的唯一性,针对实体标识和序列号均相同的并发事件严格按照顺序进行处理。
步骤101中,当同时接收到N个事件的情况下,服务器会为该N个事件生成对应的序列号,将序列号和事件的实体标识一同作为联合唯一键添加至对应事件的消息字段中。
其中,实体标识可以由一个或者多个字符串组成,用于标识事件的实体对象,该实体对象是指触发当前事件的用户操作所指向的实体对象,例如火车票、用户信息或者合同,对应的,实体标识可以表现为该火车票的订单号、用户的身份证号、或者合同号等,在此不作任何限定。
序列号用于标识事件的接收顺序,在服务器中序列号是由0开始原子递增的数字,服务器接收到事件的序列号是在服务器已有的序列号的基础上“+1”生成,例如,当前服务器中序列号已经原子递增至“4”,则当服务器接收到新的事件时,该事件的序列号则在“4”的基础上“+1”,即为“5”。当服务器同时接收到N个事件时,该N个事件的序列号均是在“4”的基础上“+1”,均为“5”,即N个事件的序列号相同。
步骤102中,MySQL数据表包括用于记录事件的event_entry,在N个事件的序列号相同的前提下,若存在M个实体标识相同的事件时,为了保证服务器不对该M个事件进行重复处理,仅向MySQL数据表请求插入目标事件对应的MySQL记录,目标事件为M个事件中的任一事件,此时,M个事件中除目标事件以外的M-1个事件将处于等待插入记录的状态,以使实体标识相同的事件中同一时刻仅向MySQL数据表中插入一条事件记录。其中,M为大于1,且小于或等于N的整数。
步骤103中,当目标事件的MySQL记录插入成功后,标志着服务器可以对该目标事件进行处理,上述对目标事件进行处理可以理解为:执行目标事件对应的业务逻辑。若目标事件的业务逻辑顺利执行,目标事件实体标识指向的实体对象状态将会对应变更,或者改实体对象的数据将会对应修改,服务器再将处理结果反馈至触发目标事件的客户端。
此时,其他M-1个事件失去了插入MySQL数据表的意义,服务器不再向MySQL数据表中插入该M-1个事件对应的事件记录,而直接将该M-1个事件进行过滤。这样,即可保证针对同一实体对象,服务器在同一时刻仅存在单线程对其进行处理。
需要说明的是,上述N个事件中,若除M个事件之外的N-M个事件的实体标识均不相同,则该N-M个事件并不针对同一实体对象,服务器对该N-M个事件的处理不会涉及对数据的重复修改,也不会涉及实体对象状态的重复变更。因此,服务器可分别向MySQL数据表中插入该N-M个事件对应的MySQL记录,在该N-M个事件对应的MySQL记录插入成功后,分别执行该N-M个事件对应的业务逻辑。
本发明实施例中,通过实体标识和序列号共同标识事件的唯一性,对实体标识和序列号均相同的事件严格按照顺序执行:同一时刻仅向MySQL数据表中插入一个目标事件对应的MySQL记录,且在该目标事件的MySQL记录插入成功的情况下,将其他事件进行过滤,保证在同一时刻,服务器仅存在单线程对同一个实体对象进行处理,避免同一实体对象的数据被重复修改,或者同一实体对象的状态被重复变更,使得服务器事件处理的业务逻辑更加清晰,同时也降低了服务器因重复处理而产生的不必要的资源消耗,提高了服务器事件处理的效率和正确率。
实施例二
请参见图2,图2是本发明实施例提供的另一种事件处理方法的流程图,该方法可以应用于服务器。
如图2所示,所述方法包括以下步骤:
步骤201、在同时接收到N个事件的情况下,生成所述N个事件的序列号,所述N个事件的序列号相同;
步骤202、在所述N个事件中包括实体标识相同的M个事件的情况下,向MySQL数据表中插入目标事件对应的MySQL记录;
步骤203、在所述目标事件的MySQL记录插入成功的情况下,过滤M-1个事件,并判断是否存在正在处理的第一事件,所述第一事件的实体标识与所述目标事件的实体标识相同;
步骤204、若存在所述正在处理的第一事件,在所述第一事件处理完成的情况下,对所述目标事件进行处理。
其中,所述目标事件为所述M个事件中的一个事件,在向MySQL数据表中插入目标事件对应的MySQL记录时,所述M-1个事件处于等待插入记录的状态,N为大于1的整数;M为大于1,且小于或等于N的整数。
本实施例中,步骤201至步骤202的具体实现形式可参考如图1所示实施例中步骤101至步骤102的说明,为避免重复,在此不再赘述。
本实施例与实施例一的主要区别在于,步骤203中,当目标事件的MySQL记录插入成功的情况下,过滤M-1个事件,并判断是否存在与目标事件的实体标识相同,且正在处理的第一事件,若不存在,则可直接对目标事件进行处理;若存在,需要在第一事件处理完成之后,再对目标事件进行处理。
在服务器接受到N个事件时,该N个事件的序列号是在服务器已有的序列号的基础上“+1”生成,也就是说,在服务器接收上述N个事件之前,服务器可能已经接收了一个或者多个事件,并存在正在进行处理的先前事件。
为了进一步保证服务器在同一时刻仅存在单线程对同一实体对象进行处理,当目标事件的MySQL记录插入成功的情况下,若存在与目标事件的实体标识相同,且正在处理的第一事件时,需要等待第一事件处理完成之后,再对目标事件进行处理。
进一步的,若存在所述正在处理的第一事件,在所述第一事件处理完成的情况下,对所述目标事件进行处理,包括:
在所述第一事件处理完成的情况下,根据所述第一事件的处理结果,执行所述目标事件或者过滤所述目标事件。
本实施例中,当目标事件的MySQL记录插入成功的情况下,若存在与目标事件的实体标识相同,且正在处理的第一事件时,需要根据第一事件的处理结果,进一步判断如何对目标事件进行处理:
若第一事件处理完成且处理成功时,目标事件的实体标识对应的实体对象数据,或者实体对象状态将会发生改变。由于目标事件与第一事件的实体标识相同,服务器将不会对目标事件继续处理,即,服务器将不会继续执行目标事件对应的业务逻辑,而过滤目标事件;
若第一事件处理完成但是处理失败时,目标事件的实体标识对应的实体对象数据,或者实体对象状态将不会发生改变。此时,服务器仍然可以对实体标识相同的目标事件进行处理,以修改实体标识对应的实体对象的数据,或者变更实体对象的状态,而不会造成重复处理的问题。
在一些实施例中,每一事件的消息字段中可添加事件处理的状态标识,例如FLAG,该状态标识可用于记录事件处理的状态,可具体表现为未处理、处理中、已处理或者处理失败。当一个事件处理完成之后,可将其对应的状态标识变更为已处理,服务器对后续事件进行处理时,可根据状态标识判断先前事件的处理情况。
本实施例中,若存在与目标事件的实体标识相同,且正在处理的第一事件时,需要根据第一事件的处理结果,进一步判断如何对目标事件进行处理,在第一事件处理成功时,过滤目标事件,而在第一事件处理失败的情况下,继续对目标事件进行处理,进一步保证同一时刻仅单线程处理同一实体对象,进一步避免了不同时刻的重复处理而产生的不必要资源消耗。
在其他实施例中,当目标事件的MySQL记录插入成功的情况下,若不存在与目标事件的实体标识相同,且正在处理的第一事件时,仍然可能存在与目标事件的实体标识相同,但已经处理完成的第二事件。此时,同样需要根据第二事件的处理结果,具体的,根据实体标识对应的实体对象的状态,进一步判断如何对目标事件进行处理。具体实现形式可参照第一事件与目标事件之间的处理方式进行处理,为避免重复,在此不再赘述。
进一步的,上述根据所述第一事件的处理结果,执行所述目标事件或者过滤所述目标事件,包括:
根据所述第一事件的处理结果,向第三方服务器发送所述目标事件对应的请求,以调用第三方服务器接口执行所述目标事件,或者过滤所述目标事件。
服务器对目标事件的处理,或者说服务器执行目标事件对应的业务逻辑时,并不限于利用服务器内部的资源,经常需要调用第三方接口,以请求第三方服务器的资源来执行目标事件的业务逻辑。
现有技术中,在需要请求第三方服务器的场景中,为了避免对实体对象数据重复修改,或者对实体对象状态重复变更,通常要求第三方接口具有幂等性,即第三方接口执行任意多次请求时产生的影响均与一次执行的影响相同。其中,查询类接口几乎可以保证幂等性,但数据修改或者更新等接口实现幂等性较困难。
本实施例中,通过步骤201至步骤203中,当根据第一事件的处理结果,目标事件的实体标识对应的实体对象数据,或者实体对象状态未发生改变时,再向第三方服务器发送目标事件对应的请求,以调用第三方接口执行目标事件的业务逻辑;而当根据第一事件的处理结果,目标事件的实体标识对应的实体对象数据,或者实体对象状态已经发生改变时,则不向第三方服务器发送目标事件对应的请求,直接过滤目标事件。保证针对同一实体对象仅有一个请求发送至第三方服务器,无需第三方接口具有幂等性,即可避免第三方服务器重复处理实体对象的问题。
在一些实施例中,服务器基于Spring的Event监听者模式运行,一旦用户在客户端的操作请求触发该事件对象时,与该事件对象存在关联的监听器,包括第三方服务器,可以监听到该事件对象的触发,服务器即可将事件对象传递至与其关联的监听器,并调用监听器的方法对事件对象进行处理。
基于上述实施例中步骤201至步骤203的实现,当根据第一事件的处理结果,目标事件的实体标识对应的实体对象数据,或者实体对象状态未发生改变时,可向与目标事件关联的监听器发送目标事件对象,并调用监听器的方法执行目标事件;而当根据第一事件的处理结果,目标事件的实体标识对应的实体对象数据,或者实体对象状态已经发生改变时,则不向与目标事件关联的监听器发送目标事件对象,直接过滤目标事件。
可选的,在所述目标事件的MySQL记录插入成功的情况下,过滤M-1个事件,包括:
对M-1个事件分别生成事件处理失败的处理结果;
将所述处理结果对应发送至分别触发所述M-1个事件的客户端。
本实施例中,在目标事件的MySQL记录插入成功的情况下,过滤M-1个事件。服务器可对M-1个事件分别生成事件处理失败的处理结果。在一实施例中,可将M-1个事件的状态标识变更为处理失败,之后服务器可将上述M-1个处理结果对应发送至分别触发所述M-1个事件的客户端,以提示用户操作请求失败。
需要说明的是,上述实施例中,对于目标事件的过滤同样可以参考过滤M-1个事件的步骤:服务器可对目标事件生成事件处理失败的处理结果,并将上述处理结果发送至触发目标事件的客户端。
为方便理解,对本发明的一完整实施例进行举例说明:
在火车票订票系统中,用户在客户端选中目标火车票后将会生成订单信息供用户确认,用户确认订单信息后进行付款,服务器接收到上述付款请求后,将调用第三方支付软件对用户对应的账户进行扣费。其中,每一张火车票的订单号是唯一的,可利用订单号作为实体标识,标识针对目标火车票的付款事件,当客户端提交付款请求时,针对该订单的付款请求将转化为事件发送至服务器。
当存在两名用户在其对应客户端选中同一张火车票A,并同时向服务器发送付款请求时,服务器接收到的N个事件中将包含有实体标识均为A的两个事件,分别用Request1和Request2表示。
如图3所示,服务器可向MySQL数据表中的event_entry插入Request1对应的MySQL记录,而Request2处于等待插入记录的状态(当然的,服务器也可向MySQL数据表中插入Request2对应的MySQL记录,而Request1处于等待插入记录的状态)。当Request1对应的MySQL记录插入成功后,Request2则插入记录失败,服务器将会过滤Request2,并向触发Request2的客户端发送如“支付失败”的提示信息,同时,服务器将会继续对Request1进行处理,向第三方支付软件发送付款请求,以请求第三方支付软件对触发Request1的客户端对应的用户账号进行扣费。
若当Request1对应的MySQL记录插入成功后,服务器存在正在处理的Request3,Request3同样是针对火车票A的付款事件,此时,服务器需要等待Request3处理完成之后,再进一步判断对Request1如何处理:
若Request3处理完成且付款成功,则触发Request3的客户端针对火车票A的支付已经完成,火车票A已经处于已被购买的状态,其实体状态已经发生变更,Request1不能对火车票A重复购买,服务器将过滤Request1,并向触发Request1的客户端发送如“支付失败”的提示信息;
若Request3处理完成但因余额不足等原因付款失败,则火车票A仍然处于未被购买的状态,其实体状态未发生变更,服务器可以继续对Request1进行处理,向第三方支付软件发送付款请求,以请求第三方支付软件对触发Request1的客户端对应的用户账号进行扣费,若扣费成功,则触发Request1的客户端针对火车票A的支付已经完成,火车票A的实体状态将会发生变更,以使后续无法对火车票A进行购买。
本实施例中,在实施例一的基础上,增加了多种实现形式,进一步保证在同一时刻,服务器仅存在单线程对同一个实体对象进行处理,避免同一实体对象的数据被重复修改,或者同一实体对象的状态被重复变更。
请参见图4,图4是本发明实施例提供的一种服务器的结构图。
如图4所示,服务器400包括:
生成模块401,用于在同时接收到N个事件的情况下,生成所述N个事件的序列号,所述N个事件的序列号相同;
插入模块402,用于在所述N个事件中包括实体标识相同的M个事件的情况下,向MySQL数据表中插入目标事件对应的MySQL记录;
处理模块403,用于在所述目标事件的MySQL记录插入成功的情况下,对所述目标事件进行处理,并过滤M-1个事件;
其中,所述目标事件为所述M个事件中的一个事件,在向MySQL数据表中插入目标事件对应的MySQL记录时,所述M-1个事件处于等待插入记录的状态,N为大于1的整数;M为大于1,且小于或等于N的整数。
可选的,如图5所示,处理模块403包括:
判断单元4031,用于在所述目标事件的MySQL记录插入成功的情况下,判断是否存在正在处理的第一事件,所述第一事件的实体标识与所述目标事件的实体标识相同;
处理单元4032,用于若存在所述正在处理的第一事件,在所述第一事件处理完成的情况下,对所述目标事件进行处理。
可选的,处理单元4032具体用于:
在所述第一事件处理完成的情况下,根据所述第一事件的处理结果,执行所述目标事件或者过滤所述目标事件。
可选的,处理单元4032具体用于:
根据所述第一事件的处理结果,向第三方服务器发送所述目标事件对应的请求,以调用第三方接口执行所述目标事件,或者过滤所述目标事件。
可选的,如图6所示,处理模块403还包括:
生成单元4033,用于对M-1个事件分别生成事件处理失败的处理结果;
发送单元4034,用于将所述处理结果对应发送至分别触发所述M-1个事件的客户端。
服务器400能够实现如图1至图2所示的方法实施例中实现的各个过程,为避免重复,这里不再赘述。
请参见图7,图7是本发明实施例提供的一种电子设备的结构图。
如图7所示,电子设备700包括处理器701、通信接口702、存储器703及通信总线704,其中,处理器701,通信接口702,存储器703通过通信总线704完成相互间的通信。
其中,存储器703用于存放计算机程序。
其中,处理器701用于执行存储器703上所存放的程序时,实现如下步骤:
在同时接收到N个事件的情况下,生成所述N个事件的序列号,所述N个事件的序列号相同;
在所述N个事件中包括实体标识相同的M个事件的情况下,向MySQL数据表中插入目标事件对应的MySQL记录;
在所述目标事件的MySQL记录插入成功的情况下,对所述目标事件进行处理,并过滤M-1个事件;
其中,所述目标事件为所述M个事件中的一个事件,在向MySQL数据表中插入目标事件对应的MySQL记录时,所述M-1个事件处于等待插入记录的状态,N为大于1的整数;M为大于1,且小于或等于N的整数。
可选的,所述在所述目标事件的MySQL记录插入成功的情况下,对所述目标事件进行处理,包括:
在所述目标事件的MySQL记录插入成功的情况下,判断是否存在正在处理的第一事件,所述第一事件的实体标识与所述目标事件的实体标识相同;
若存在所述正在处理的第一事件,在所述第一事件处理完成的情况下,对所述目标事件进行处理。
可选的,所述在所述第一事件处理完成的情况下,对所述目标事件进行处理,包括:
在所述第一事件处理完成的情况下,根据所述第一事件的处理结果,执行所述目标事件或者过滤所述目标事件。
可选的,所述根据所述第一事件的处理结果,执行所述目标事件或者过滤所述目标事件,包括:
根据所述第一事件的处理结果,向第三方服务器发送所述目标事件对应的请求,以调用第三方接口执行所述目标事件,或者过滤所述目标事件。
可选的,所述过滤M-1个事件包括:
对M-1个事件分别生成事件处理失败的处理结果;
将所述处理结果对应发送至分别触发所述M-1个事件的客户端。
上述电子设备700提到的通信总线704可以是外设部件互连标准(PeripheralComponent Interconnect,简称PCI)总线或扩展工业标准结构(Extended IndustryStandard Architecture,简称EISA)总线等。该通信总线704可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口702用于上述电子设备700与其他设备之间的通信。
存储器703可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器701可以是通用处理器,包括中央处理器(Central ProcessingUnit,简称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.一种事件处理方法,其特征在于,所述方法包括以下步骤:
在同时接收到N个事件的情况下,生成所述N个事件的序列号,所述N个事件的序列号相同;
在所述N个事件中包括实体标识相同的M个事件的情况下,向MySQL数据表中插入目标事件对应的MySQL记录;
在所述目标事件的MySQL记录插入成功的情况下,对所述目标事件进行处理,并过滤M-1个事件,所述在所述目标事件的MySQL记录插入成功的情况下,对所述目标事件进行处理,包括:在所述目标事件的MySQL记录插入成功的情况下,判断是否存在正在处理的第一事件,所述第一事件的实体标识与所述目标事件的实体标识相同;若存在所述正在处理的第一事件,在所述第一事件处理完成的情况下,对所述目标事件进行处理;
其中,所述目标事件为所述M个事件中的一个事件,在向MySQL数据表中插入目标事件对应的MySQL记录时,所述M-1个事件处于等待插入记录的状态,N为大于1的整数;M为大于1,且小于或等于N的整数。
2.根据权利要求1所述的方法,其特征在于,所述在所述第一事件处理完成的情况下,对所述目标事件进行处理,包括:
在所述第一事件处理完成的情况下,根据所述第一事件的处理结果,执行所述目标事件或者过滤所述目标事件。
3.根据权利要求2所述的方法,其特征在于,所述根据所述第一事件的处理结果,执行所述目标事件或者过滤所述目标事件,包括:
根据所述第一事件的处理结果,向第三方服务器发送所述目标事件对应的请求,以调用第三方接口执行所述目标事件,或者过滤所述目标事件。
4.根据权利要求1所述的方法,其特征在于,所述过滤M-1个事件包括:
对M-1个事件分别生成事件处理失败的处理结果;
将所述处理结果对应发送至分别触发所述M-1个事件的客户端。
5.一种服务器,其特征在于,所述服务器包括:
生成模块,用于在同时接收到N个事件的情况下,生成所述N个事件的序列号,所述N个事件的序列号相同;
插入模块,用于在所述N个事件中包括实体标识相同的M个事件的情况下,向MySQL数据表中插入目标事件对应的MySQL记录;
处理模块,用于在所述目标事件的MySQL记录插入成功的情况下,对所述目标事件进行处理,并过滤M-1个事件,所述处理模块包括:判断单元,用于在所述目标事件的MySQL记录插入成功的情况下,判断是否存在正在处理的第一事件,所述第一事件的实体标识与所述目标事件的实体标识相同;处理单元,用于若存在所述正在处理的第一事件,在所述第一事件处理完成的情况下,对所述目标事件进行处理;
其中,所述目标事件为所述M个事件中的一个事件,在向MySQL数据表中插入目标事件对应的MySQL记录时,所述M-1个事件处于等待插入记录的状态,N为大于1的整数;M为大于1,且小于或等于N的整数。
6.根据权利要求5所述的服务器,其特征在于,所述处理单元具体用于:
在所述第一事件处理完成的情况下,根据所述第一事件的处理结果,执行所述目标事件或者过滤所述目标事件。
7.根据权利要求6所述的服务器,其特征在于,所述处理单元具体用于:
根据所述第一事件的处理结果,向第三方服务器发送所述目标事件对应的请求,以调用第三方接口执行所述目标事件,或者过滤所述目标事件。
8.根据权利要求5所述的服务器,其特征在于,所述处理模块还包括:
生成单元,用于对M-1个事件分别生成事件处理失败的处理结果;
发送单元,用于将所述处理结果对应发送至分别触发所述M-1个事件的客户端。
9.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1至4中任一所述的方法步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至4中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010190711.5A CN111367694B (zh) | 2020-03-18 | 2020-03-18 | 事件处理方法、服务器及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010190711.5A CN111367694B (zh) | 2020-03-18 | 2020-03-18 | 事件处理方法、服务器及计算机存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111367694A CN111367694A (zh) | 2020-07-03 |
CN111367694B true CN111367694B (zh) | 2024-01-26 |
Family
ID=71208981
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010190711.5A Active CN111367694B (zh) | 2020-03-18 | 2020-03-18 | 事件处理方法、服务器及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111367694B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113778711B (zh) * | 2021-09-09 | 2024-04-16 | 恒安嘉新(北京)科技股份公司 | 一种事件处理方法、装置、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016180164A1 (zh) * | 2015-09-29 | 2016-11-17 | 中兴通讯股份有限公司 | 一种分布式事务回滚方法及装置 |
CN107656822A (zh) * | 2016-07-25 | 2018-02-02 | 武汉票据交易中心有限公司 | 一种业务流程的处理方法及相关系统 |
CN107862082A (zh) * | 2017-11-29 | 2018-03-30 | 努比亚技术有限公司 | 基于MySQL计数器表的高并发计数方法及web服务器 |
CN108984325A (zh) * | 2018-07-20 | 2018-12-11 | 北京北信源信息安全技术有限公司 | 消息队列消费方法和装置 |
CN110689394A (zh) * | 2018-07-06 | 2020-01-14 | 北京嘀嘀无限科技发展有限公司 | 业务补单的处理方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10977639B2 (en) * | 2016-01-25 | 2021-04-13 | Freelancer Technology Pty Limited | Adaptive gateway switching system |
US10783453B2 (en) * | 2016-06-14 | 2020-09-22 | Jpmorgan Chase Bank, N.A. | Systems and methods for automated incident response |
-
2020
- 2020-03-18 CN CN202010190711.5A patent/CN111367694B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016180164A1 (zh) * | 2015-09-29 | 2016-11-17 | 中兴通讯股份有限公司 | 一种分布式事务回滚方法及装置 |
CN107656822A (zh) * | 2016-07-25 | 2018-02-02 | 武汉票据交易中心有限公司 | 一种业务流程的处理方法及相关系统 |
CN107862082A (zh) * | 2017-11-29 | 2018-03-30 | 努比亚技术有限公司 | 基于MySQL计数器表的高并发计数方法及web服务器 |
CN110689394A (zh) * | 2018-07-06 | 2020-01-14 | 北京嘀嘀无限科技发展有限公司 | 业务补单的处理方法及装置 |
CN108984325A (zh) * | 2018-07-20 | 2018-12-11 | 北京北信源信息安全技术有限公司 | 消息队列消费方法和装置 |
Non-Patent Citations (1)
Title |
---|
SQL数据库中并发控制的研究;赵慧玲;刘美荣;;长春工程学院学报(自然科学版)(第02期);第78-81页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111367694A (zh) | 2020-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI734088B (zh) | 基於區塊鏈的交易處理方法及裝置、電子設備 | |
EP3816910B1 (en) | Blockchain-based transaction processing method and apparatus, and electronic device | |
CN107436799B (zh) | 分布式事务一致性实现方法及装置 | |
CN109491765B (zh) | 对跨域业务请求的处理方法及装置 | |
US11593188B2 (en) | Method and apparatus for providing asynchronicity to microservice application programming interfaces | |
CN112053149A (zh) | 一种防止重复支付的方法、装置、电子设备和可读存储介质 | |
CN111897542A (zh) | 一种灰度发布的方法及装置 | |
CN111367694B (zh) | 事件处理方法、服务器及计算机存储介质 | |
CN111415146A (zh) | 资源数据的处理方法、装置及设备 | |
CN112598529B (zh) | 数据处理方法及装置、计算机可读存储介质、电子设备 | |
CN110851207A (zh) | 状态转换管理方法、装置、电子设备和计算机可读存储介质 | |
CN111125168B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN110175915B (zh) | 一种基于区块链的业务执行结果获取方法及系统 | |
CN115098528B (zh) | 业务处理方法、装置、电子设备及计算机可读存储介质 | |
CN113112344B (zh) | 业务处理方法、设备、存储介质及计算机程序产品 | |
CN111488252B (zh) | 一种流量回放方法及装置 | |
CN115222390A (zh) | 安全检查方法、装置、设备及存储介质 | |
CN113449023A (zh) | 业务处理方法、装置及电子设备 | |
CN112383434B (zh) | 网络请求的接口模拟方法、装置、电子设备和存储介质 | |
CN110661792B (zh) | 服务有序调用方法、装置、电子设备及存储介质 | |
JP7221927B2 (ja) | 情報処理装置、方法及びプログラム | |
CN111639089B (zh) | 事务处理方法、装置、电子设备和计算机可读存储介质 | |
CN117591311A (zh) | 一种处理mq消息幂等性的解决方法 | |
CN116596540A (zh) | 信息处理方法、装置及电子设备 | |
CN116647603A (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 |