CN105512244A - 基于消息队列实现数据库事务处理的方法及装置 - Google Patents

基于消息队列实现数据库事务处理的方法及装置 Download PDF

Info

Publication number
CN105512244A
CN105512244A CN201510862134.9A CN201510862134A CN105512244A CN 105512244 A CN105512244 A CN 105512244A CN 201510862134 A CN201510862134 A CN 201510862134A CN 105512244 A CN105512244 A CN 105512244A
Authority
CN
China
Prior art keywords
message
rollback
queue
database
status
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
Application number
CN201510862134.9A
Other languages
English (en)
Other versions
CN105512244B (zh
Inventor
魏亚文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Jingdong Shangke Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN201510862134.9A priority Critical patent/CN105512244B/zh
Publication of CN105512244A publication Critical patent/CN105512244A/zh
Application granted granted Critical
Publication of CN105512244B publication Critical patent/CN105512244B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明提供一种基于消息队列实现数据库事务处理的方法及装置,能够使指定服务器异步消费和处理消息。该基于消息队列实现数据库事务处理的方法包括:接收数据库访问请求;根据所述数据库访问请求生成有序的消息队列;通过监控机构按顺序执行所述消息队列的处理,直到所述消息队列中所有消息被成功处理或者该消息队列中消息状态为“异常”的消息的重试次数超过预定阈值;当所述消息队列中的消息状态为“异常”的消息的重试次数超过预定阈值,则回退所述消息队列中已执行的消息。

Description

基于消息队列实现数据库事务处理的方法及装置
技术领域
本发明涉及计算机技术领域,特别地涉及一种基于消息队列实现数据库事务处理的方法及装置。
背景技术
在关系型数据库中,当由于数据量特别大,而达到单表或者单库的瓶颈的时候,大都需要对数据库进行分库分表操作。具体的实现方式就是部署多台数据库实例,同时一台数据库服务器中又对数据表进行水平拆分,从而形成多库多表存储多类型数据的结构。
一般对于已进行拆分的数据库或者数据表进行操作的原则是尽量避免同时操作几个数据库的数据。但是随着业务量的逐渐增多,很多情况下,一些业务是需要同时对多个数据库或者数据表进行操作的。例如:现在越来越多的人开始网上购物,电子商务运营的模式发展迅速,当出现一个客户订单中既包括食品,又包括衣服时,大多会因为食品和衣服的分类不同而要从多个数据库中操作数据。目前,对于多库多表中数据的操作,使用较多的方法是通过分布式事务来保证数据的准确性和一致性。
目前,分布式事务的处理比较常用的是两阶段提交协议(Two-phaseCommit,2pc)方法。即:由客户端提交请求到事务协调器(TC),然后由事务协调器来确认各个事务执行者是否都执行完毕。待全部执行成功后,才能将整个事务提交完成。
但是,在使用过程中,发现现有的两阶段提交的方法具有以下的缺陷:
1、现有的方法需要事务协调器主动确认各个事务执行者的状态,因此涉及多次节点间的网络通信,通信时间长,系统性能消耗大;
2、现有的方法需要各个事务执行者同步执行分配的任务,因此不适合高并发的系统,且数据库实例越多,可用性能越差;
3、现有的方法对线上环境的容错性要求高,一旦一台机器出现问题,整个事务就会执行失败,无法部分重试。
综上,正是由于现有的处理分布式事务的方法存在很严重的性能问题,故而大部分高并发服务器都在尽量避免使用,尤其是那些对时间需求不是很高,但是对性能要求很高的系统。
发明内容
有鉴于此,本发明提供一种基于消息队列实现数据库事务处理的方法及装置,能够通过消息队列使指定服务器异步消费和处理消息,通过记录消息状态解决各事务执行者之间的频繁通信问题,且容错性能强,具有异常重试的功能。
为实现上述目的,根据本发明的一个方面,提供了一种基于消息队列实现数据库事务处理的方法。
一种基于消息队列实现数据库事务处理的方法,包括:接收数据库访问请求,所述数据库访问请求包括一个或多个数据库操作;根据所述数据库访问请求生成有序的消息队列,其中,所述消息队列中的消息对应数据库操作,每个消息包括消息状态和重试次数;通过监控机构按顺序执行所述消息队列的处理,直到所述消息队列中所有消息被成功处理或者该消息队列中消息状态为“异常”的消息的重试次数超过预定阈值;当所述消息队列中的消息状态为“异常”的消息的重试次数超过预定阈值,则回退所述消息队列中已执行的消息。
可选地,所述消息队列的处理包括:按顺序查找所述消息队列中消息状态为初始状态的第一个消息;调用相应的数据库服务来处理该消息对应的数据库操作;根据处理的结果更新该消息的消息状态和重试次数,其中,如果该消息对应的数据库操作成功完成,则修改该消息的消息状态,否则把该消息的消息状态设为“异常”并把该消息的重试次数递增1。
可选地,所述消息队列保存在消息状态表中,所述消息状态表以双向链表形式实现。
可选地,所述消息状态表还保存消息的回退消息。
可选地,回退所述消息队列中已执行的消息包括:从所述消息状态表中倒序读取所述消息队列中已执行消息对应的回退消息并根据所述回退消息执行回退,直至将所述消息队列回退至初始状态。
可选地,所述回退消息根据当前消息的数据库操作类型包括以下情况:若当前消息是做插入操作的,则根据当前消息待执行插入操作对象的标识符生成删除操作指令作为回退消息;若当前消息是做更新操作的,则根据当前消息需要更新的对象及更新前的初始值生成更新操作指令作为回退消息;若当前消息是做删除操作的,则根据当前消息待执行删除操作对象的标识符生成插入操作指令作为回退消息。
根据本发明的另一方面,提供了一种基于消息队列实现数据库事务处理的装置。
一种基于消息队列实现数据库事务处理的装置,包括:访问请求接收模块,用于接收数据库访问请求,所述数据库访问请求包括一个或多个数据库操作;消息队列生成模块,用于根据所述数据库访问请求生成有序的消息队列,其中,所述消息队列中的消息对应数据库操作,每个消息包括消息状态和重试次数;监控机构,用于按顺序执行所述消息队列的处理,直到所述消息队列中所有消息被成功处理或者该消息队列中消息状态为“异常”的消息的重试次数超过预定阈值;回退模块,用于当所述消息队列中的消息状态为“异常”的消息的重试次数超过预定阈值时回退所述消息队列中已执行的消息。
可选地,所述监控机构还用于:按顺序查找所述消息队列中消息状态为初始状态的第一个消息;调用相应的数据库服务来处理该消息对应的数据库操作;根据处理的结果更新该消息的消息状态和重试次数,其中,如果该消息对应的数据库操作成功完成,则修改该消息的消息状态,否则把该消息的消息状态设为“异常”并把该消息的重试次数递增1。
可选地,所述消息队列保存在消息状态表中,所述消息状态表以双向链表形式实现。
可选地,所述消息状态表还保存消息的回退消息。
可选地,所述回退模块还用于:从所述消息状态表中倒序读取所述消息队列中已执行消息对应的回退消息并根据所述回退消息执行回退,直至将所述消息队列回退至初始状态。
可选地,所述回退消息根据当前消息的数据库操作类型包括以下情况:若当前消息是做插入操作的,则根据当前消息待执行插入操作对象的标识符生成删除操作指令作为回退消息;若当前消息是做更新操作的,则根据当前消息需要更新的对象及更新前的初始值生成更新操作指令作为回退消息;若当前消息是做删除操作的,则根据当前消息待执行删除操作对象的标识符生成插入操作指令作为回退消息。
根据本发明的技术方案,将接收到的数据库访问请求生成消息队列,并将消息数据写在zookeeper服务器的节点上,然后通过zookeeper的监听回调机制来通知注册在各节点上的业务服务器异步消费、处理消息,从而实现数据库分布式事务的处理。通过使用消息队列来处理数据库事务,可以对消息进行异步处理,当一条消息出现重试预定次数仍未能处理的异常时,将会执行消息回退直至初始状态,相应消息队列中未处理的消息便不再执行,从而节省了系统资源;且通过消息状态对消息的处理过程进行管理避免了上下级系统间的频繁通信,从而极大地提高了系统的性能。同时本发明的技术方案还具有较强的容错性,当一台业务服务器出现故障时,会有其他的业务服务器来接手处理未完成的任务,且可以部分重试,从而节约了系统资源,并且保证了数据处理的准确性。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的基于消息队列实现数据库事务处理的方法的主要步骤示意图;
图2是根据本发明实施例的基于消息队列实现数据库事务处理的装置的主要模块示意图;
图3是根据本发明实施例的实现数据库事务处理的系统的架构图;
图4是根据本发明实施例的分布式事务实现流程图;
图5是根据本发明实施例的分布式事务自动回退功能实现流程图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施例的基于消息队列实现数据库事务处理的方法的主要步骤示意图。如图1所示,本发明的基于消息队列实现数据库事务处理的方法主要包括如下的步骤S11至步骤S14。
步骤S11:接收数据库访问请求,所述数据库访问请求包括一个或多个数据库操作;
步骤S12:根据所述数据库访问请求生成有序的消息队列,其中,所述消息队列中的消息对应数据库操作,每个消息包括消息状态和重试次数;
步骤S13:通过监控机构按顺序执行所述消息队列的处理,直到所述消息队列中所有消息被成功处理或者该消息队列中消息状态为“异常”的消息的重试次数超过预定阈值;
步骤S14:当所述消息队列中的消息状态为“异常”的消息的重试次数超过预定阈值,则回退所述消息队列中已执行的消息。
根据本发明的技术方案,所述消息队列的处理包括:按顺序查找所述消息队列中消息状态为初始状态的第一个消息;调用相应的数据库服务来处理该消息对应的数据库操作;根据处理的结果更新该消息的消息状态和重试次数,其中,如果该消息对应的数据库操作成功完成,则修改该消息的消息状态,否则把该消息的消息状态设为“异常”并把该消息的重试次数递增1。
其中,所述消息队列保存在消息状态表中,所述消息状态表以双向链表形式实现。并且,所述消息状态表还保存消息的回退消息。
如上所述的步骤S14中回退所述消息队列中已执行的消息在具体操作时,可按照以下方法来执行:从所述消息状态表中倒序读取所述消息队列中已执行消息对应的回退消息并根据所述回退消息执行回退,直至将所述消息队列回退至初始状态。
其中,回退消息根据当前消息的数据库操作类型包括以下情况:
若当前消息是做插入操作的,则根据当前消息待执行插入操作对象的标识符生成删除操作指令作为回退消息;
若当前消息是做更新操作的,则根据当前消息需要更新的对象及更新前的初始值生成更新操作指令作为回退消息;
若当前消息是做删除操作的,则根据当前消息待执行删除操作对象的标识符生成插入操作指令作为回退消息。
图2是根据本发明实施例的基于消息队列实现数据库事务处理的装置的主要模块示意图。如图2所述,本发明的基于消息队列实现数据库事务处理的装置20主要包括访问请求接收模块21、消息队列生成模块22、监控机构23和回退模块24。
访问请求接收模块21用于接收数据库访问请求,所述数据库访问请求包括一个或多个数据库操作。
消息队列生成模块22用于根据所述数据库访问请求生成有序的消息队列,其中,所述消息队列中的消息对应数据库操作,每个消息包括消息状态和重试次数。
监控机构23用于按顺序执行所述消息队列的处理,直到所述消息队列中所有消息被成功处理或者该消息队列中消息状态为“异常”的消息的重试次数超过预定阈值。
回退模块24用于当所述消息队列中的消息状态为“异常”的消息的重试次数超过预定阈值时回退所述消息队列中已执行的消息。
所述监控机构还可以用于按顺序查找所述消息队列中消息状态为初始状态的第一个消息;调用相应的数据库服务来处理该消息对应的数据库操作;以及根据处理的结果更新该消息的消息状态和重试次数,其中,如果该消息对应的数据库操作成功完成,则修改该消息的消息状态,否则把该消息的消息状态设为“异常”并把该消息的重试次数递增1。
根据本发明的技术方案,所述消息队列保存在消息状态表中,所述消息状态表以双向链表形式实现。并且,所述消息状态表还保存消息的回退消息。
回退模块24还可以用于从所述消息状态表中倒序读取所述消息队列中已执行消息对应的回退消息并根据所述回退消息执行回退,直至将所述消息队列回退至初始状态。
其中,回退消息根据当前消息的数据库操作类型包括以下情况:
若当前消息是做插入操作的,则根据当前消息待执行插入操作对象的标识符生成删除操作指令作为回退消息;
若当前消息是做更新操作的,则根据当前消息需要更新的对象及更新前的初始值生成更新操作指令作为回退消息;
若当前消息是做删除操作的,则根据当前消息待执行删除操作对象的标识符生成插入操作指令作为回退消息。
根据本发明的实施例,通过向zookeeper服务器的节点上写数据来实现分布式消息的生成,通过zookeeper的监听回调机制来通知注册在各节点上的业务服务器异步消费、处理消息,从而实现数据库分布式事务的处理。
图3是根据本发明实施例的实现数据库事务处理的系统的架构图。如图3所示,本发明将实现数据库分布式事务的装置封装成一个组件,与业务系统耦合部署于业务服务器中,可以基于软件项目管理工具maven来实现,且可支持mysql、sqlserver等数据库。该组件的分布式事务实现对上层的业务系统是透明的,业务系统无需关注其内部实现过程,因而具有高可复用性。业务系统通过调用本发明的实现数据库分布式事务的装置来完成同时对多个数据库进行操作。业务系统在对本发明的实现数据库分布式事务的装置进行调用时,仅需将要处理的消息的结构化查询语言SQL语句(包含该SQL语句的标识ID及需要处理的数据库标识ID)传入即可,调用简单、方便。以下为了表述简便,将业务系统和本发明的实现数据库分布式事务的装置作为一个整体,以业务系统代称。
在本发明的实施例中,Zookeeper服务器可以理解为消息的代理中心broker。业务系统将消息直接写到该业务服务器在Zookeeper服务器上注册的node节点上,然后zookeeper服务器通过在其对应节点或者上级节点监听的watcher,来回调对应的服务器消费和解析消息。所有发送或者消费的消息,在整个系统中,被定义为事务凭证。每个事务凭证都有一个唯一编码(transId),也就是说,每条消息都有一个唯一编码。此处,唯一编码一般是采用增量方式生成的。
图3中所示的DB-1、DB-2、DB-n等表示的是需要操作的数据库。消息状态数据库中保存有消息状态表,用来记录每条消息的状态,可以保证整个系统的高度可靠性,同时可以避免消息的重发,起到判定重复的功能。另外,由于消息量比较大,为了系统的性能,对消息状态也进行了分库分表的操作。根据每条消息需要操作的数据库对消息状态进行分类,可设置与数据库相对应的消息状态数据库,以保证每一类消息状态存储在一个消息状态数据库中。同时,在进行消息状态的读写操作时可根据消息的唯一编码来进行,从而可利用数据库的横向扩容来保证系统的性能。
下面将结合图3中的数据流向来介绍本发明的实施过程。
位于业务服务器中的业务系统接收用户发送的业务请求,此处的业务请求可看作是数据库访问请求,可以包括一个或多个数据库操作。可通过数据库查询(如SQL语句形式的查询)处理技术,产生有序的数据库操作序列。
在业务系统接收到用户发来的业务请求后,首先根据该数据库访问请求包含的数据库操作生成由一个或多个消息构成的消息队列,其中,消息队列中的消息对应数据库操作,例如,每个消息可以对应一个数据库操作,且消息队列中消息的顺序与数据库操作序列的顺序对应一致,从而形成有序的消息队列。另外,每条消息都分配有唯一性编码,例如可根据给定数值增量式生成每个消息的唯一性编码。每个消息还包括消息状态和重试次数两个参数,且消息状态初始设为“未完成”,重试次数初始设为0。
例如,假设业务系统是电商业务系统,用户是网购用户,业务请求是订单。用户通过网络向电商业务系统提交订单。业务系统在接收到用户提交的订单后,首先根据订单中包含的数据库操作SQL语句,获取该订单中包括的订购的商品名称及对应的订货数量。设定订单中每个商品及对应的订货数由一条SQL语句来表示,即可以对应产生一条消息,并为该消息分配唯一性编码,例如可根据给定数值增量式生成每个消息的唯一性编码。
这样,根据订单中的所有商品及对应的订货数生成一系列消息,以构成该订单对应的消息队列。之后,异步地对消息队列中的消息进行处理,并确定消息的状态和重试次数。消息的状态表示该消息对应的数据库操作是否已被成功处理、是否异常等。
消息及其当前状态和重试次数都被保存在消息状态表中,消息状态表位于相应的消息状态数据库中。根据业务请求生成的消息队列以双向链表的形式保存在消息状态数据库中,也就是说,消息队列中的每一条消息有一个指针指向其后一条消息,同时每一条消息也有一个指针指向其前一条消息。
根据本发明,在初始处理消息队列时,业务系统将该消息队列中的第一条状态为“未完成”的消息写到相应的zookeeper节点上。
理想情况是把消息写到接收业务请求的业务服务器对应的节点上,这样可以实现消息的生产者和消费者在同一台机器上,方便日志的定位和预防一些可能出现的权限问题。
当然,也可以把消息写到其他业务服务器对应的节点上,可根据zookeeper的均衡负载功能进行调节。
zookeeper服务器通过在各业务服务器对应节点或者上级节点监听的回调方法watcher,来回调对应的服务器来消费和处理消息。
各个业务服务器一启动就会对zookeeper服务器上该业务服务器对应的节点进行监控。当该节点的数据发生变化的时候,每个机器都会收到通知,并且在该业务服务器接收到zookeeper服务器的回调请求后,会实现回调方法watcher,从zookeeper服务器的节点上取下该消息的数据并进行处理。回调方法watcher会根据消息的SQL语句对数据库中的数据进行操作,并在操作结束后修改对应消息状态数据库中消息的状态。
由于业务系统是将消息队列以双向链表的形式保存在各个消息状态数据库中,也就是说前一条消息有一个指针指向后一条消息,同时后一条消息也有一个指针指向前一条消息,那么当一条消息执行完毕后,zookeeper就会自动生成下一条消息,直至全部处理完成。
在消息执行过程中,会因为各种异常情况出现消息执行失败的情况,这些消息被统称为异常消息,相应地这些消息的状态我们可设定为“异常”。为了更好地监控消息的执行情况,业务系统中设置了一个定时任务,用来专门监控消息状态数据库中的消息状态表,并查找与当前业务服务器相关的异常消息,然后进行重试,当重试次数达到设定的阈值后,意味着该消息存在系统无法处理的问题。此时,将根据双向链表结构的特点执行自动回退到初始状态,并且发出警报以提示人工进行处理,并写入错误日志。最后,将这条消息置为不可用状态,等待查找原因。
每个业务服务器启动后,业务系统中设置的定时任务会首先在消息状态表中查找是否有突然中断的、未处理完成的消息,或者异常消息。然后调用zookeeper服务器的setData功能函数来重新对积压或者中断的消息进行处理。
图4是根据本发明实施例的分布式事务实现流程图。如图4所示,假设一个消息队列中包含两条消息,需要对两个数据库中的数据进行操作。业务系统从zookeeper服务器的节点读取第一条消息后,开始处理第一条消息,修改相应数据库中的数据,如果修改失败,则说明发生了异常,需要执行自动回退流程,将于后续结合图5进行介绍。如果数据修改成功,则通知业务系统数据处理完成。业务系统首先是将该消息及其执行成功的状态标识进行封装,然后修改消息状态数据库中的消息状态信息为“已完成”,待修改完成后,消息状态数据库会返回该条消息的唯一编码。业务系统在收到该条消息的唯一编码后,准备发送消息给zookeeper服务器,以在该业务服务器对应的节点下添加该条消息的信息,从而使zookeeper服务器改变指定业务服务器的树节点信息,即:业务系统提交消息处理成功的信息。之后,根据消息数据保存的双向链表结构的特点,zookeeper服务器会异步触发监听该节点的业务服务器的回调程序,业务服务器便通过解析该节点下的唯一编码,从而获取并处理第二条消息。处理消息时,如前述第一条消息的处理过程,此处不再赘述。待第二条消息处理成功,修改消息状态为“已完成”后,会判断是否还有待执行消息,如果存在,则获取下一条消息并处理,如果没有,则该消息队列中所有消息处理完成,结束本次业务请求的处理。
图5是根据本发明实施例的分布式事务自动回退功能实现流程图。根据功能实现的需要,结合消息对了的异常重试功能,可以设置当消息处理失败时,会自动重试执行一定的次数,也就是重试次数阈值。当重试次数超过设定的阈值后,会执行消息自动回退,直到初始状态,从而保证数据的准确性。
回退消息是根据当前消息的操作情况来自动生成的,在业务系统根据数据库的访问请求生成消息队列时,每条消息对应的回退消息就已经自动生成,并和对应的参数封装在一起后保存在消息状态表中,并持久化保存在消息状态数据库里。根据当前消息的数据库操作类型,当前消息对应的回退消息可以包括以下情况:
1、若当前消息是做插入操作的,则根据当前消息待执行插入操作对象的标识符生成删除操作指令作为回退消息;
2、若当前消息是做更新操作的,则根据当前消息需要更新的对象及更新前的初始值生成更新操作指令作为回退消息。也就是说,若当前消息是做更新操作时,会查询出所有需要被更新的对象,并将相应程序语句中需要改变的字段的初始值与键值对的形式(其中,键名为该消息对应程序语句的标识符,键值为执行操作的更新语句)保存起来,然后生成相应的反向更新语句以作为回退消息;
3、若当前消息是做删除操作的,则根据当前消息待执行删除操作对象的标识符生成插入操作指令作为回退消息。
当需要执行消息自动回退时,首先需要修改消息状态为正在回退,之后获取回退消息和参数,待数据库中执行自动回退完成后,更改当前消息状态为回退完成。由于消息状态记录是以双向链表结构进行存储的,因此可向前获取顺序执行的前一条消息对应的回退消息来执行回退操作,如果存在前一条回退消息,则继续按照上述流程执行回退操作,否则说明消息队列已回退完成。
根据本发明实施例的技术方案,将接收到的数据库访问请求生成消息队列,并将消息数据写在zookeeper服务器的节点上,然后通过zookeeper的监听回调机制来通知注册在各节点上的业务服务器异步消费、处理消息,从而实现数据库分布式事务的处理。通过使用消息队列来处理数据库事务,可以对消息进行异步处理,当一条消息出现重试预定次数仍未能处理的异常时,将会执行消息回退直至初始状态,相应消息队列中未处理的消息便不再执行,从而节省了系统资源;且通过消息状态对消息的处理过程进行管理避免了上下级系统间的频繁通信,从而极大地提高了系统的性能。同时本发明的技术方案还具有较强的容错性,当一台业务服务器出现故障时,会有其他的业务服务器来接手处理未完成的任务,且可以部分重试,从而节约了系统资源,并且保证了数据处理的准确性。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (12)

1.一种基于消息队列实现数据库事务处理的方法,其特征在于,包括:
接收数据库访问请求,所述数据库访问请求包括一个或多个数据库操作;
根据所述数据库访问请求生成有序的消息队列,其中,所述消息队列中的消息对应数据库操作,每个消息包括消息状态和重试次数;
通过监控机构按顺序执行所述消息队列的处理,直到所述消息队列中所有消息被成功处理或者该消息队列中消息状态为“异常”的消息的重试次数超过预定阈值;
当所述消息队列中的消息状态为“异常”的消息的重试次数超过预定阈值,则回退所述消息队列中已执行的消息。
2.根据权利要求1所述的方法,其特征在于,所述消息队列的处理包括:
按顺序查找所述消息队列中消息状态为初始状态的第一个消息;
调用相应的数据库服务来处理该消息对应的数据库操作;
根据处理的结果更新该消息的消息状态和重试次数,其中,如果该消息对应的数据库操作成功完成,则修改该消息的消息状态,否则把该消息的消息状态设为“异常”并把该消息的重试次数递增1。
3.根据权利要求1所述的方法,其特征在于,
所述消息队列保存在消息状态表中,所述消息状态表以双向链表形式实现。
4.根据权利要求3所述的方法,其特征在于,
所述消息状态表还保存消息的回退消息。
5.根据权利要求4所述的方法,其特征在于,回退所述消息队列中已执行的消息包括:
从所述消息状态表中倒序读取所述消息队列中已执行消息对应的回退消息并根据所述回退消息执行回退,直至将所述消息队列回退至初始状态。
6.根据权利要求5所述的方法,其特征在于,所述回退消息根据当前消息的数据库操作类型包括以下情况:
若当前消息是做插入操作的,则根据当前消息待执行插入操作对象的标识符生成删除操作指令作为回退消息;
若当前消息是做更新操作的,则根据当前消息需要更新的对象及更新前的初始值生成更新操作指令作为回退消息;
若当前消息是做删除操作的,则根据当前消息待执行删除操作对象的标识符生成插入操作指令作为回退消息。
7.一种基于消息队列实现数据库事务处理的装置,其特征在于,包括:
访问请求接收模块,用于接收数据库访问请求,所述数据库访问请求包括一个或多个数据库操作;
消息队列生成模块,用于根据所述数据库访问请求生成有序的消息队列,其中,所述消息队列中的消息对应数据库操作,每个消息包括消息状态和重试次数;
监控机构,用于按顺序执行所述消息队列的处理,直到所述消息队列中所有消息被成功处理或者该消息队列中消息状态为“异常”的消息的重试次数超过预定阈值;
回退模块,用于当所述消息队列中的消息状态为“异常”的消息的重试次数超过预定阈值时回退所述消息队列中已执行的消息。
8.根据权利要求7所述的装置,其特征在于,所述监控机构还用于:
按顺序查找所述消息队列中消息状态为初始状态的第一个消息;
调用相应的数据库服务来处理该消息对应的数据库操作;
根据处理的结果更新该消息的消息状态和重试次数,其中,如果该消息对应的数据库操作成功完成,则修改该消息的消息状态,否则把该消息的消息状态设为“异常”并把该消息的重试次数递增1。
9.根据权利要求7所述的装置,其特征在于,
所述消息队列保存在消息状态表中,所述消息状态表以双向链表形式实现。
10.根据权利要求9所述的装置,其特征在于,
所述消息状态表还保存消息的回退消息。
11.根据权利要求10所述的装置,其特征在于,所述回退模块还用于:
从所述消息状态表中倒序读取所述消息队列中已执行消息对应的回退消息并根据所述回退消息执行回退,直至将所述消息队列回退至初始状态。
12.根据权利要求11所述的装置,其特征在于,所述回退消息根据当前消息的数据库操作类型包括以下情况:
若当前消息是做插入操作的,则根据当前消息待执行插入操作对象的标识符生成删除操作指令作为回退消息;
若当前消息是做更新操作的,则根据当前消息需要更新的对象及更新前的初始值生成更新操作指令作为回退消息;
若当前消息是做删除操作的,则根据当前消息待执行删除操作对象的标识符生成插入操作指令作为回退消息。
CN201510862134.9A 2015-11-30 2015-11-30 基于消息队列实现数据库事务处理的方法及装置 Active CN105512244B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510862134.9A CN105512244B (zh) 2015-11-30 2015-11-30 基于消息队列实现数据库事务处理的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510862134.9A CN105512244B (zh) 2015-11-30 2015-11-30 基于消息队列实现数据库事务处理的方法及装置

Publications (2)

Publication Number Publication Date
CN105512244A true CN105512244A (zh) 2016-04-20
CN105512244B CN105512244B (zh) 2019-03-01

Family

ID=55720226

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510862134.9A Active CN105512244B (zh) 2015-11-30 2015-11-30 基于消息队列实现数据库事务处理的方法及装置

Country Status (1)

Country Link
CN (1) CN105512244B (zh)

Cited By (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106201666A (zh) * 2016-06-24 2016-12-07 浪潮软件股份有限公司 一种分布式事务实现方法
CN106407021A (zh) * 2016-07-01 2017-02-15 厦门易名科技股份有限公司 一种基于队列的业务请求处理方法
CN106874076A (zh) * 2017-01-21 2017-06-20 浙江沛宏网络科技有限公司 分布式事务处理方法
CN106874122A (zh) * 2017-03-02 2017-06-20 上海携程国际旅行社有限公司 基于消息队列的事件分配方法及系统
CN107516277A (zh) * 2016-06-15 2017-12-26 平安科技(深圳)有限公司 控制投保出单的方法和装置
CN107688489A (zh) * 2016-08-03 2018-02-13 北京京东尚科信息技术有限公司 一种调度任务的方法和系统
CN107995242A (zh) * 2016-10-27 2018-05-04 北京京东尚科信息技术有限公司 一种业务处理方法及系统
CN108038767A (zh) * 2017-12-26 2018-05-15 广州供电局有限公司 基于消息队列的电商订单异步分发系统及方法
CN108093077A (zh) * 2017-12-29 2018-05-29 广东欧珀移动通信有限公司 异常处理方法、装置以及服务器
CN108154431A (zh) * 2018-01-17 2018-06-12 北京网信云服信息科技有限公司 一种标的募集状态处理方法及装置
CN108197126A (zh) * 2016-12-08 2018-06-22 阿里巴巴集团控股有限公司 一种数据展示的处理方法及系统、客户端及服务器
CN108243229A (zh) * 2016-12-26 2018-07-03 北京国双科技有限公司 请求处理方法及装置
CN108255620A (zh) * 2018-01-08 2018-07-06 北京奇艺世纪科技有限公司 一种业务逻辑处理方法、装置、业务服务器及系统
CN108304671A (zh) * 2018-02-12 2018-07-20 厦门海迈科技股份有限公司 建筑信息模型的数据管理方法及相关装置
CN108874513A (zh) * 2017-05-11 2018-11-23 北京京东尚科信息技术有限公司 处理定时任务的方法、系统、电子设备和计算机可读介质
CN109450691A (zh) * 2018-11-20 2019-03-08 深圳前海微众银行股份有限公司 服务网关监控方法、设备及计算机可读存储介质
CN109522361A (zh) * 2018-09-27 2019-03-26 中国经济信息社有限公司 一种利用消息总线进行数据库实时同步的方法及系统
CN109558303A (zh) * 2017-09-25 2019-04-02 阿里巴巴集团控股有限公司 一种应用行为分析方法、装置及电子设备
CN110224922A (zh) * 2019-05-21 2019-09-10 成都路行通信息技术有限公司 一种基于RabbitMQ的异步消息重试方法、系统及系统构建方法
CN110321232A (zh) * 2018-03-30 2019-10-11 阿里巴巴集团控股有限公司 消息的处理方法、装置及电子设备
CN110347533A (zh) * 2019-07-11 2019-10-18 中国工商银行股份有限公司 数据异常的处理方法、装置、计算设备及介质
CN110362587A (zh) * 2019-07-12 2019-10-22 上海瀚银信息技术有限公司 一种数据交换方法
CN110413384A (zh) * 2019-06-25 2019-11-05 腾讯科技(深圳)有限公司 延时任务处理方法及装置、存储介质、电子设备
CN110532263A (zh) * 2019-08-08 2019-12-03 杭州广立微电子有限公司 一种集成电路测试系统及其面向列的数据库管理系统
CN110674167A (zh) * 2019-08-20 2020-01-10 广州亚美信息科技有限公司 数据库操作方法、装置、计算机设备和存储介质
CN111090532A (zh) * 2019-12-13 2020-05-01 深圳前海环融联易信息科技服务有限公司 应用服务的调用方法、其装置、电子设备及计算机存储介质
CN111240891A (zh) * 2018-11-29 2020-06-05 中国移动通信集团内蒙古有限公司 基于数据库多表间数据一致性的数据恢复方法及装置
CN111314422A (zh) * 2020-01-17 2020-06-19 平安医疗健康管理股份有限公司 基于kafka的消息处理方法、系统、存储介质及计算机设备
CN111309746A (zh) * 2020-02-13 2020-06-19 贝壳技术有限公司 异步并行数据同步方法及装置
CN111597188A (zh) * 2020-05-13 2020-08-28 北京奇艺世纪科技有限公司 一种消费进度的重置方法、装置、设备及可读存储介质
CN111884769A (zh) * 2020-08-06 2020-11-03 中国银行股份有限公司 消息同步方法及装置
CN112181737A (zh) * 2020-09-25 2021-01-05 中国建设银行股份有限公司 消息处理方法、装置、电子设备及介质
CN112306701A (zh) * 2019-07-25 2021-02-02 中移动信息技术有限公司 服务熔断方法、装置、设备及存储介质
CN112732413A (zh) * 2019-10-28 2021-04-30 腾讯科技(深圳)有限公司 异常处理方法、装置、计算机设备和计算机可读存储介质
CN113094362A (zh) * 2021-04-30 2021-07-09 中国银行股份有限公司 一种异步消息可靠投递和处理的方法和装置
CN113296973A (zh) * 2020-07-20 2021-08-24 阿里巴巴集团控股有限公司 一种消息处理方法、消息读取方法、装置及可读介质
TWI744153B (zh) * 2020-03-02 2021-10-21 南韓商韓領有限公司 基於等候與服務反應相互連接網路元件之系統以及方法

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060136367A1 (en) * 2003-08-02 2006-06-22 Todd Stephen J Method, apparatus, and computer program for processing a queue of messages
CN101719149A (zh) * 2009-12-03 2010-06-02 联动优势科技有限公司 数据同步方法及装置
CN101916298A (zh) * 2010-08-31 2010-12-15 深圳市赫迪威信息技术有限公司 数据库操作方法、设备及系统
CN102073540A (zh) * 2010-12-15 2011-05-25 北京新媒传信科技有限公司 分布式事务提交方法和装置
CN102279855A (zh) * 2010-06-10 2011-12-14 三星电子(中国)研发中心 一种数据库处理事务的装置及方法
CN102629268A (zh) * 2012-03-09 2012-08-08 华为技术有限公司 数据同步方法、系统及数据访问装置
CN102915374A (zh) * 2012-11-07 2013-02-06 北京搜狐新媒体信息技术有限公司 一种控制数据库资源访问的方法、装置及系统
CN103209115A (zh) * 2013-04-07 2013-07-17 北京京东世纪贸易有限公司 一种消息发送系统
CN104793988A (zh) * 2014-01-20 2015-07-22 阿里巴巴集团控股有限公司 跨数据库分布式事务的实现方法和装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060136367A1 (en) * 2003-08-02 2006-06-22 Todd Stephen J Method, apparatus, and computer program for processing a queue of messages
CN101719149A (zh) * 2009-12-03 2010-06-02 联动优势科技有限公司 数据同步方法及装置
CN102279855A (zh) * 2010-06-10 2011-12-14 三星电子(中国)研发中心 一种数据库处理事务的装置及方法
CN101916298A (zh) * 2010-08-31 2010-12-15 深圳市赫迪威信息技术有限公司 数据库操作方法、设备及系统
CN102073540A (zh) * 2010-12-15 2011-05-25 北京新媒传信科技有限公司 分布式事务提交方法和装置
CN102629268A (zh) * 2012-03-09 2012-08-08 华为技术有限公司 数据同步方法、系统及数据访问装置
CN102915374A (zh) * 2012-11-07 2013-02-06 北京搜狐新媒体信息技术有限公司 一种控制数据库资源访问的方法、装置及系统
CN103209115A (zh) * 2013-04-07 2013-07-17 北京京东世纪贸易有限公司 一种消息发送系统
CN104793988A (zh) * 2014-01-20 2015-07-22 阿里巴巴集团控股有限公司 跨数据库分布式事务的实现方法和装置

Cited By (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107516277A (zh) * 2016-06-15 2017-12-26 平安科技(深圳)有限公司 控制投保出单的方法和装置
CN106201666A (zh) * 2016-06-24 2016-12-07 浪潮软件股份有限公司 一种分布式事务实现方法
CN106407021A (zh) * 2016-07-01 2017-02-15 厦门易名科技股份有限公司 一种基于队列的业务请求处理方法
CN107688489B (zh) * 2016-08-03 2021-01-26 北京京东尚科信息技术有限公司 一种调度任务的方法和系统
CN107688489A (zh) * 2016-08-03 2018-02-13 北京京东尚科信息技术有限公司 一种调度任务的方法和系统
CN107995242A (zh) * 2016-10-27 2018-05-04 北京京东尚科信息技术有限公司 一种业务处理方法及系统
CN108197126A (zh) * 2016-12-08 2018-06-22 阿里巴巴集团控股有限公司 一种数据展示的处理方法及系统、客户端及服务器
CN108243229B (zh) * 2016-12-26 2021-03-30 北京国双科技有限公司 请求处理方法及装置
CN108243229A (zh) * 2016-12-26 2018-07-03 北京国双科技有限公司 请求处理方法及装置
CN106874076B (zh) * 2017-01-21 2019-08-30 浙江沛宏网络科技有限公司 分布式事务处理方法
CN106874076A (zh) * 2017-01-21 2017-06-20 浙江沛宏网络科技有限公司 分布式事务处理方法
CN106874122A (zh) * 2017-03-02 2017-06-20 上海携程国际旅行社有限公司 基于消息队列的事件分配方法及系统
CN108874513A (zh) * 2017-05-11 2018-11-23 北京京东尚科信息技术有限公司 处理定时任务的方法、系统、电子设备和计算机可读介质
CN109558303A (zh) * 2017-09-25 2019-04-02 阿里巴巴集团控股有限公司 一种应用行为分析方法、装置及电子设备
CN108038767A (zh) * 2017-12-26 2018-05-15 广州供电局有限公司 基于消息队列的电商订单异步分发系统及方法
CN108038767B (zh) * 2017-12-26 2022-02-11 广州供电局有限公司 基于消息队列的电商订单异步分发系统及方法
CN108093077A (zh) * 2017-12-29 2018-05-29 广东欧珀移动通信有限公司 异常处理方法、装置以及服务器
CN108255620A (zh) * 2018-01-08 2018-07-06 北京奇艺世纪科技有限公司 一种业务逻辑处理方法、装置、业务服务器及系统
CN108154431A (zh) * 2018-01-17 2018-06-12 北京网信云服信息科技有限公司 一种标的募集状态处理方法及装置
CN108304671A (zh) * 2018-02-12 2018-07-20 厦门海迈科技股份有限公司 建筑信息模型的数据管理方法及相关装置
CN110321232A (zh) * 2018-03-30 2019-10-11 阿里巴巴集团控股有限公司 消息的处理方法、装置及电子设备
CN110321232B (zh) * 2018-03-30 2024-01-09 阿里巴巴集团控股有限公司 消息的处理方法、装置及电子设备
CN109522361A (zh) * 2018-09-27 2019-03-26 中国经济信息社有限公司 一种利用消息总线进行数据库实时同步的方法及系统
CN109450691B (zh) * 2018-11-20 2022-01-11 深圳前海微众银行股份有限公司 服务网关监控方法、设备及计算机可读存储介质
CN109450691A (zh) * 2018-11-20 2019-03-08 深圳前海微众银行股份有限公司 服务网关监控方法、设备及计算机可读存储介质
CN111240891A (zh) * 2018-11-29 2020-06-05 中国移动通信集团内蒙古有限公司 基于数据库多表间数据一致性的数据恢复方法及装置
CN110224922B (zh) * 2019-05-21 2022-04-19 成都路行通信息技术有限公司 一种基于RabbitMQ的异步消息重试方法、系统及系统构建方法
CN110224922A (zh) * 2019-05-21 2019-09-10 成都路行通信息技术有限公司 一种基于RabbitMQ的异步消息重试方法、系统及系统构建方法
CN110413384A (zh) * 2019-06-25 2019-11-05 腾讯科技(深圳)有限公司 延时任务处理方法及装置、存储介质、电子设备
CN110413384B (zh) * 2019-06-25 2024-03-01 腾讯科技(深圳)有限公司 延时任务处理方法及装置、存储介质、电子设备
CN110347533A (zh) * 2019-07-11 2019-10-18 中国工商银行股份有限公司 数据异常的处理方法、装置、计算设备及介质
CN110362587A (zh) * 2019-07-12 2019-10-22 上海瀚银信息技术有限公司 一种数据交换方法
CN112306701B (zh) * 2019-07-25 2024-05-03 中移动信息技术有限公司 服务熔断方法、装置、设备及存储介质
CN112306701A (zh) * 2019-07-25 2021-02-02 中移动信息技术有限公司 服务熔断方法、装置、设备及存储介质
CN110532263A (zh) * 2019-08-08 2019-12-03 杭州广立微电子有限公司 一种集成电路测试系统及其面向列的数据库管理系统
CN110674167A (zh) * 2019-08-20 2020-01-10 广州亚美信息科技有限公司 数据库操作方法、装置、计算机设备和存储介质
CN110674167B (zh) * 2019-08-20 2022-08-16 广州亚美信息科技有限公司 数据库操作方法、装置、计算机设备和存储介质
CN112732413A (zh) * 2019-10-28 2021-04-30 腾讯科技(深圳)有限公司 异常处理方法、装置、计算机设备和计算机可读存储介质
CN112732413B (zh) * 2019-10-28 2023-09-29 腾讯科技(深圳)有限公司 异常处理方法、装置、计算机设备和计算机可读存储介质
CN111090532A (zh) * 2019-12-13 2020-05-01 深圳前海环融联易信息科技服务有限公司 应用服务的调用方法、其装置、电子设备及计算机存储介质
CN111090532B (zh) * 2019-12-13 2023-06-20 深圳前海环融联易信息科技服务有限公司 应用服务的调用方法、其装置、电子设备及计算机存储介质
CN111314422A (zh) * 2020-01-17 2020-06-19 平安医疗健康管理股份有限公司 基于kafka的消息处理方法、系统、存储介质及计算机设备
CN111309746A (zh) * 2020-02-13 2020-06-19 贝壳技术有限公司 异步并行数据同步方法及装置
TWI764835B (zh) * 2020-03-02 2022-05-11 南韓商韓領有限公司 基於等候與服務反應相互連接網路元件之系統以及方法
TWI744153B (zh) * 2020-03-02 2021-10-21 南韓商韓領有限公司 基於等候與服務反應相互連接網路元件之系統以及方法
CN111597188A (zh) * 2020-05-13 2020-08-28 北京奇艺世纪科技有限公司 一种消费进度的重置方法、装置、设备及可读存储介质
CN113296973A (zh) * 2020-07-20 2021-08-24 阿里巴巴集团控股有限公司 一种消息处理方法、消息读取方法、装置及可读介质
CN111884769A (zh) * 2020-08-06 2020-11-03 中国银行股份有限公司 消息同步方法及装置
CN111884769B (zh) * 2020-08-06 2023-10-27 中国银行股份有限公司 消息同步方法及装置
CN112181737A (zh) * 2020-09-25 2021-01-05 中国建设银行股份有限公司 消息处理方法、装置、电子设备及介质
CN113094362B (zh) * 2021-04-30 2024-04-16 中国银行股份有限公司 一种异步消息可靠投递和处理的方法和装置
CN113094362A (zh) * 2021-04-30 2021-07-09 中国银行股份有限公司 一种异步消息可靠投递和处理的方法和装置

Also Published As

Publication number Publication date
CN105512244B (zh) 2019-03-01

Similar Documents

Publication Publication Date Title
CN105512244A (zh) 基于消息队列实现数据库事务处理的方法及装置
CN108228817B (zh) 数据处理方法、装置和系统
US8972934B2 (en) Support for temporally asynchronous interface extensions
CN108874558B (zh) 分布式事务的消息订阅方法、电子装置及可读存储介质
US9336291B2 (en) Message based synchronization for mobile business objects
CN107958010B (zh) 用于在线数据迁移的方法及系统
US20040083426A1 (en) System and method for generating pre-populated forms
CA2676589C (en) Dynamic order workflow template instantiator and decoupler
US9020949B2 (en) Method and system for centralized issue tracking
US10528627B1 (en) Universal search service for multi-region and multi-service cloud computing resources
JPH033258B2 (zh)
CA2676591C (en) Dynamic order workflow template instantiator tracking system
US20150301875A1 (en) Persisting and managing application messages
US10832309B2 (en) Inventory data model for large scale flash sales
WO2019226279A1 (en) Frequent pattern analysis for distributed systems
CN110597764B (zh) 一种文件下载、版本管理方法及装置
US20220207033A1 (en) Systems and methods for data retrieval
US20180293317A1 (en) Prefix matching using distributed tables for storage services compatibility
CN110688355A (zh) 变更容器状态的方法和装置
US20230179541A1 (en) Configuration management of cloud resources for multiple providers and frameworks
US20100332505A1 (en) Handling Data Access Requests in Computer Program Updates
US20160085600A1 (en) Packaging Application Data and Logic for Offline Support
CN108710665B (zh) 数据回流方法、装置、系统及设备
CN104462106A (zh) 数据更新方法及系统
CN113626007A (zh) 连接器模型的创建及应用方法、装置及服务器

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB03 Change of inventor or designer information

Inventor after: Wei Yawen

Inventor after: Sun Zheng

Inventor before: Wei Yawen

COR Change of bibliographic data
GR01 Patent grant
GR01 Patent grant