CN107957910A - 消息处理方法以及消息处理装置 - Google Patents

消息处理方法以及消息处理装置 Download PDF

Info

Publication number
CN107957910A
CN107957910A CN201610903595.0A CN201610903595A CN107957910A CN 107957910 A CN107957910 A CN 107957910A CN 201610903595 A CN201610903595 A CN 201610903595A CN 107957910 A CN107957910 A CN 107957910A
Authority
CN
China
Prior art keywords
message
current message
type
current
derivative
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.)
Pending
Application number
CN201610903595.0A
Other languages
English (en)
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.)
Xi'an Jingxundi Supply Chain 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 CN201610903595.0A priority Critical patent/CN107957910A/zh
Publication of CN107957910A publication Critical patent/CN107957910A/zh
Pending legal-status Critical Current

Links

Classifications

    • 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/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/541Client-server

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种消息处理方法以及消息处理装置。本发明的消息处理方法包括:判断接收到的当前消息所属的类型,该类型包括更新类型、插入类型和删除类型;若判断当前消息属于更新类型,则在当前消息中加入时间限制条件以得到修饰后的当前消息,时间限制条件为数据库最近操作时间戳小于当前消息时间戳;执行修饰后的当前消息;若执行所述修饰后的当前消息失败,则生成与当前消息对应的插入类型的衍生消息;执行插入类型的衍生消息;若执行插入类型的衍生消息失败,则重新执行修饰后的当前消息。

Description

消息处理方法以及消息处理装置
技术领域
本发明涉及计算机及其软件技术领域,特别地涉及一种消息处理方法以及消息处理装置。
背景技术
在互联网和软件领域,数据库是非常重要的。现实场景中,经常需要进行数据迁移工作。通过消息队列技术来实现数据迁移,已经是业内较为常用的办法。
消息队列技术是一种异步的消息订阅/生产/消费的通讯方法。现有的消息队列技术比较多,如rocketMQ,kafka,zeroMQ等。
通过消息队列来进行数据迁移的具体过程是:服务端通过消息队列,把源库的插入(insert)操作、更新(update)操作或删除(delete)操作封装成特定格式的消息生产出来,客户端程序获取这些消息,然后消费消息,即把消息还原成对应的sql语句执行,以达到数据迁移的目的。
现有技术的缺点在于:由于消息队列的生产消息和客户端消费消息都是并行、多线程进行的,因此很多消息队列无法保证消息的严格时序性。比如说,同一条记录的update消息和insert消息,可能update消息比insert消息先到达客户端,这样给目标库和源库的一致性造成了极大的困扰。
发明内容
有鉴于此,本发明提供一种稳定可靠、时序性好的消息处理方法以及消息处理装置。
为实现上述目的,根据本发明的一个方面,提供了一种消息处理方法,包括:判断接收到的当前消息所属的类型,该类型包括更新类型、插入类型和删除类型;若判断所述当前消息属于更新类型,则在所述当前消息中加入时间限制条件以得到修饰后的当前消息,所述时间限制条件为数据库最近操作时间戳小于当前消息时间戳;执行所述修饰后的当前消息;若执行所述修饰后的当前消息失败,则生成与所述当前消息对应的插入类型的衍生消息;执行所述插入类型的衍生消息;若执行所述插入类型的衍生消息失败,则重新执行所述修饰后的当前消息。
可选地,所述生成与所述当前消息对应的插入类型的衍生消息的步骤包括:将所述当前消息中的java对象的操作属性重新赋值为插入属性,以得到所述插入类型的衍生消息。
可选地,在所述判断接收到的当前消息所属的类型的步骤之后,还包括:若判断所述当前消息属于插入类型,则执行所述当前消息。
可选地,在所述判断接收到的当前消息所属的类型的步骤之后,还包括:若判断所述当前消息属于删除类型,则执行所述当前消息。
根据本发明的另一方面,提供了一种消息处理装置,包括:判断模块,用于判断接收到的当前消息所属的类型,该类型包括更新类型、插入类型和删除类型;第一处理模块,用于在所述判断模块判断所述当前消息属于更新类型的情况下,在所述当前消息中加入时间限制条件以得到修饰后的当前消息,所述时间限制条件为数据库最近操作时间戳小于当前消息时间戳;第一执行模块,用于执行所述修饰后的当前消息;第二处理模块,用于在所述第一执行模块执行失败的情况下,生成与所述当前消息对应的插入类型的衍生消息;第二执行模块,用于执行所述插入类型的衍生消息;第三执行模块,用于在所述第二执行模块执行失败的情况下,重新执行所述修饰后的当前消息。
可选地,所述第二处理模块还用于,将所述当前消息中的java对象的操作属性重新赋值为插入属性,以得到所述插入类型的衍生消息。
可选地,还包括:第四执行模块,用于在所述判断模块判断所述当前消息属于插入类型的情况下,执行所述当前消息。
可选地,还包括:第五执行模块,用于在所述判断模块判断所述当前消息属于删除类型的情况下,执行所述当前消息。
根据本发明的技术方案,针对接收到的更新消息加上了“数据库最近操作时间戳小于当前消息时间戳”的限制条件,因此能够保证各条更新消息之间的执行顺序正确。同时,在更新消息首次执行失败后重新包装为插入消息,这样可以保证同一条记录的插入消息和更新消息的执行顺序正确。因此本发明的技术方案具有稳定可靠、时序性好等优点。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施方式的消息处理方法的主要步骤的示意图;
图2是根据本发明实施方式的消息处理装置的主要模块的示意图;
图3是根据本发明实施方式的消息处理方法的工作原理示意图。
具体实施方式
以下结合附图对本发明的示范性实施方式做出说明,其中包括本发明实施方式的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施方式做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施方式的消息处理方法的主要步骤的示意图。如图1所示,本发明实施方式的消息处理方法可以主要包括如下的步骤A至步骤F。
步骤A:判断接收到的当前消息所属的类型,该类型包括更新类型、插入类型和删除类型。
步骤B:若判断当前消息属于更新类型,则在当前消息中加入时间限制条件以得到修饰后的当前消息,时间限制条件为数据库最近操作时间戳小于当前消息时间戳。
步骤C:执行修饰后的当前消息。
步骤D:若执行修饰后的当前消息失败,则生成与当前消息对应的插入类型的衍生消息。其中,可以将当前消息中的java对象的操作属性重新赋值为插入属性,以得到插入类型的衍生消息。
步骤E:执行插入类型的衍生消息。
步骤F:若执行插入类型的衍生消息失败,则重新执行修饰后的当前消息。需要说明的是,如果重新执行修饰后的当前消息失败,则输出提示消息以提示当前消息是过时的消息。
在本发明的实施方式中,在步骤A之后,还可以包括如下步骤:若判断当前消息属于插入类型,则执行当前消息。
在本发明的实施方式中,在步骤A之后,还可以包括如下步骤:若判断当前消息属于删除类型,则执行当前消息。
图2是根据本发明实施方式的消息处理装置的主要模块的示意图。如图2所示,本发明实施方式的消息处理装置20包括:判断模块21、第一处理模块22、第一执行模块23、第二处理模块24、第二执行模块25以及第二处理模块26。
判断模块21用于判断接收到的当前消息所属的类型,该类型包括更新类型、插入类型和删除类型。
第一处理模块22用于在判断模块21判断当前消息属于更新类型的情况下,在当前消息中加入时间限制条件以得到修饰后的当前消息,时间限制条件为数据库最近操作时间戳小于当前消息时间戳。
第一执行模块23用于执行修饰后的当前消息。
第二处理模块24用于在第一执行模块23执行失败的情况下,生成与当前消息对应的插入类型的衍生消息。可选地,第二处理模块24还用于将当前消息中的java对象的操作属性重新赋值为插入属性,以得到插入类型的衍生消息。
第二执行模块25用于执行插入类型的衍生消息。
第三执行模块26用于在第二执行模块25执行失败的情况下,重新执行修饰后的当前消息。
根据本发明实施方式的消息处理装置还可以包括第四执行模块(图2中未示出)。第四执行模块用于在判断模块21判断当前消息属于插入类型的情况下,执行当前消息。
根据本发明实施方式的消息处理装置还可以包括第五执行模块(图2中未示出)。第五执行模块用于在判断模块判断当前消息属于删除类型的情况下,执行当前消息。
为使本领域技术人员更好地理解本发明的内容,下面结合具体实施例作详细描述。
首先判断接收到的当前消息所述的类型。如果当前消息是插入类型,直接执行数据插入操作即可(有可能插入失败,忽略)。如果当前消息是删除类型,直接执行数据删除操作即可(有可能删除失败,忽略)。如果当前消息是更新类型,则进入下一步。
将前一步接收到的更新类型的当前消息记为massage A。在该massage A的where条件上加上“数据库最近操作时间戳小于当前消息时间戳”的时间限制条件,得到了修饰后的当前消息,记为massage A’。
需要说明的是,在更新类型消息的sql语句的where条件里,不加分支与加上分支这两种情况的执行效果是完全不同的。例如:原来的massage A翻译成sql语句是:updatetableA set fieldA=“abc”where id=12345。加上时间戳限制条件后的massage A’翻译成sql语句变为:update tableA set fieldA=“abc”where id=12345and ts<T1。这种情况下,数据库的tableA表的id=12345的那条数据记录,如果按照原来的sql语句,就会更新fieldA字段;如果按照后面的sql语句,如果这条记录的ts时间戳字段的值比T1大,就不会更新fieldA字段。
执行修饰后的当前消息,即执行massage A’。若执行成功,表示无异常情形发生,则结束流程。若执行失败,则需要进入下一步作后续的判断处理。
这里先假设是因为时间顺序的问题才导致massage A对应记录的insert消息没有传输过来,进一步导致数据库无法更新。针对这种情况,需要将massage A重新包装成插入类型的衍生消息(记为massage B)。“包装”就是指把massage A的java对象里的operation重新赋值为“insert”,更具体细节的需要参考代码来讨论,此处不赘述。
执行插入类型的衍生消息massage B。若执行成功,则结束流程。如果massage B执行失败,这意味着massage A在包装为massage B的过程中,这条记录对应的insert消息已经插入了,需要进入下一步。
重新执行修饰后的当前消息,即重新执行massage A’。若执行成功,表示无异常情形发生,则结束流程。若执行失败,则意味着在前面两步的过程中,已经有更加新鲜的更新消息被执行过了,也就是说当前目标数据库中已经是最新记录,直接忽略掉过时的massageA即可。
图3是根据本发明实施方式的消息处理方法的工作原理示意图。本领域技术人员可以参考图3对本发明实施方式的消息处理方法以及装置有更好地理解。
根据本发明的技术方案,针对接收到的更新消息加上了“数据库最近操作时间戳小于当前消息时间戳”的限制条件,因此能够保证各条更新消息之间的执行顺序正确。同时,在更新消息首次执行失败后重新包装为插入消息,这样可以保证同一条记录的插入消息和更新消息的执行顺序正确。因此本发明的技术方案具有稳定可靠、时序性好等优点。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (8)

1.一种消息处理方法,其特征在于,包括:
判断接收到的当前消息所属的类型,该类型包括更新类型、插入类型和删除类型;
若判断所述当前消息属于更新类型,则在所述当前消息中加入时间限制条件以得到修饰后的当前消息,所述时间限制条件为数据库最近操作时间戳小于当前消息时间戳;
执行所述修饰后的当前消息;
若执行所述修饰后的当前消息失败,则生成与所述当前消息对应的插入类型的衍生消息;
执行所述插入类型的衍生消息;
若执行所述插入类型的衍生消息失败,则重新执行所述修饰后的当前消息。
2.根据权利要求1所述的消息处理方法,其特征在于,所述生成与所述当前消息对应的插入类型的衍生消息的步骤包括:
将所述当前消息中的java对象的操作属性重新赋值为插入属性,以得到所述插入类型的衍生消息。
3.根据权利要求1所述的消息处理方法,其特征在于,在所述判断接收到的当前消息所属的类型的步骤之后,还包括:
若判断所述当前消息属于插入类型,则执行所述当前消息。
4.根据权利要求1所述的消息处理方法,其特征在于,在所述判断接收到的当前消息所属的类型的步骤之后,还包括:
若判断所述当前消息属于删除类型,则执行所述当前消息。
5.一种消息处理装置,其特征在于,包括:
判断模块,用于判断接收到的当前消息所属的类型,该类型包括更新类型、插入类型和删除类型;
第一处理模块,用于在所述判断模块判断所述当前消息属于更新类型的情况下,在所述当前消息中加入时间限制条件以得到修饰后的当前消息,所述时间限制条件为数据库最近操作时间戳小于当前消息时间戳;
第一执行模块,用于执行所述修饰后的当前消息;
第二处理模块,用于在所述第一执行模块执行失败的情况下,生成与所述当前消息对应的插入类型的衍生消息;
第二执行模块,用于执行所述插入类型的衍生消息;
第三执行模块,用于在所述第二执行模块执行失败的情况下,重新执行所述修饰后的当前消息。
6.根据权利要求5所述的消息处理装置,其特征在于,所述第二处理模块还用于,将所述当前消息中的java对象的操作属性重新赋值为插入属性,以得到所述插入类型的衍生消息。
7.根据权利要求5所述的消息处理装置,其特征在于,还包括:第四执行模块,用于在所述判断模块判断所述当前消息属于插入类型的情况下,执行所述当前消息。
8.根据权利要求5所述的消息处理装置,其特征在于,还包括:第五执行模块,用于在所述判断模块判断所述当前消息属于删除类型的情况下,执行所述当前消息。
CN201610903595.0A 2016-10-18 2016-10-18 消息处理方法以及消息处理装置 Pending CN107957910A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610903595.0A CN107957910A (zh) 2016-10-18 2016-10-18 消息处理方法以及消息处理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610903595.0A CN107957910A (zh) 2016-10-18 2016-10-18 消息处理方法以及消息处理装置

Publications (1)

Publication Number Publication Date
CN107957910A true CN107957910A (zh) 2018-04-24

Family

ID=61953275

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610903595.0A Pending CN107957910A (zh) 2016-10-18 2016-10-18 消息处理方法以及消息处理装置

Country Status (1)

Country Link
CN (1) CN107957910A (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101882089A (zh) * 2009-05-07 2010-11-10 中兴通讯股份有限公司 一种采用多线程处理业务会话应用的方法及装置
US7991745B2 (en) * 2003-08-27 2011-08-02 International Business Machines Corporation Database log capture that publishes transactions to multiple targets to handle unavailable targets by separating the publishing of subscriptions and subsequently recombining the publishing
CN102801543A (zh) * 2011-05-24 2012-11-28 中国银联股份有限公司 一种双活系统间动态数据同步的方法
CN104615759A (zh) * 2015-02-13 2015-05-13 厦门雅迅网络股份有限公司 一种不同业务系统平台间的数据同步方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7991745B2 (en) * 2003-08-27 2011-08-02 International Business Machines Corporation Database log capture that publishes transactions to multiple targets to handle unavailable targets by separating the publishing of subscriptions and subsequently recombining the publishing
CN101882089A (zh) * 2009-05-07 2010-11-10 中兴通讯股份有限公司 一种采用多线程处理业务会话应用的方法及装置
CN102801543A (zh) * 2011-05-24 2012-11-28 中国银联股份有限公司 一种双活系统间动态数据同步的方法
CN104615759A (zh) * 2015-02-13 2015-05-13 厦门雅迅网络股份有限公司 一种不同业务系统平台间的数据同步方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李丹: "基于MRB消息队列的分布式数据库同步的研究与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Similar Documents

Publication Publication Date Title
CN106570086B (zh) 数据迁移系统及数据迁移方法
CN107368503B (zh) 基于Kettle的数据同步方法和系统
US20190197068A1 (en) Page rendering method, device, and data storage medium
CN104866599B (zh) 可视化报表的生产方法和系统
CN107609188B (zh) 基于GoldenGate的数据同步校验方法
CN109376196B (zh) 一种redo日志批量同步方法及装置
CN104461743A (zh) 资源和配置的自动生成装置和方法
CN102541829B (zh) 一种多用户并发的电子文档生成装置及方法
CN110321383A (zh) 大数据平台数据同步方法、装置、计算机设备及存储介质
CN107832383B (zh) 一种跨机房数据库的数据一致性校验方法
CN110647531A (zh) 数据同步方法、装置、设备及计算机可读存储介质
CN102291453B (zh) 一种数据同步的方法及装置
CN104317957A (zh) 一种报表处理的开放平台、系统及报表处理方法
CN109189798A (zh) 一种基于spark同步更新数据的方法
CN110737432B (zh) 一种基于词根表的脚本辅助设计方法及装置
CN104915390A (zh) 一种etl数据血统查询系统及查询方法
CN112486532B (zh) 配置文件的管理方法、装置、电子设备及存储介质
CN112199443B (zh) 数据同步方法、装置、计算机设备和存储介质
CN107957910A (zh) 消息处理方法以及消息处理装置
CN111143463B (zh) 一种基于主题模型的银行数据仓库的构建方法及装置
CN110825756B (zh) 数据同步方法、装置、存储介质及设备
Omori et al. A study on repetitiveness of code completion operations
CN108959309B (zh) 数据分析的方法和装置
CN105068793A (zh) 生成业务逻辑关系图以及实现业务应用的方法和装置
CN112256978B (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
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20200519

Address after: 710100 Building 5, center square, aerospace city, No. 666, East Chang'an Street, national civil aerospace industry base, Xi'an City, Shaanxi Province

Applicant after: Xi'an jingxundi Supply Chain Technology Co.,Ltd.

Address before: 100195 floor 1-4, west section 1-4, building 11, zone 4, Xishan Creative Park, No. 65, xingshikou Road, Haidian District, Beijing

Applicant before: BEIJING JINGDONG SHANGKE INFORMATION TECHNOLOGY Co.,Ltd.

Applicant before: BEIJING JINGDONG CENTURY TRADING Co.,Ltd.

RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20180424