CN112698969A - 一种基于消息落库的mq消息可靠性投递解决方法 - Google Patents
一种基于消息落库的mq消息可靠性投递解决方法 Download PDFInfo
- Publication number
- CN112698969A CN112698969A CN202011623035.2A CN202011623035A CN112698969A CN 112698969 A CN112698969 A CN 112698969A CN 202011623035 A CN202011623035 A CN 202011623035A CN 112698969 A CN112698969 A CN 112698969A
- Authority
- CN
- China
- Prior art keywords
- message
- retry
- data storage
- data
- server
- 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
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/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- 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/547—Remote procedure calls [RPC]; Web services
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据消息处理方法领域,具体公开了一种基于消息落库的MQ消息可靠性投递解决方法,包括业务系统和消息服务器,通过消息信息落库,对消息信息状态进行打标,当使用本方案基于消息落库的方案时,业务数据在步骤1时已完成持久化,当执行步骤2发送消息时出现调用方请求超时的情况,该方案的分布式定时任务会检测到消息数据入库状态为未成功的消息数据,进行消息重发,本方案解决了现有技术中业务处理和消息发送一致性无法保证的问题。
Description
技术领域
本公开涉及数据消息处理方法领域,具体涉及一种基于消息落库的MQ消息可靠性投递解决方法。
背景技术
随着分布式服务架构的流行与普及,原来在单体应用中执行的多个逻辑操作,现在被拆分成了多个服务之间的远程调用。虽然服务化为我们的系统带来了水平伸缩的能力,然而随之而来挑战就是分布式事务问题,多个服务之间使用自己单独维护的数据库,它们彼此之间不在同一个事务中,假如A执行成功了,B执行却失败了,而A的事务此时已经提交,无法回滚,那么最终就会导致两边数据不一致性的问题。
使用普通消息的处理流程,是无法保证业务处理与消息发送的一致性,根本原因在于:远程调用,其最终结果可能为成功、失败、超时。而对于超时的情况,处理方最终的结果可能是成功,也可能是失败,调用方是无法知晓的。为了保证两边数据的一致性,我们只能从其他地方寻找新的突破口。
发明内容
本发明的目的在于解决现有的业务处理和消息发送一致性无法保证的问题。
为了达到上述目的,本发明的基础方案提供一种基于消息落库的MQ消息可靠性投递解决方法,包括业务系统和消息服务器,通过消息信息落库,对消息信息状态进行打标,具体步骤如下:
步骤1:业务系统在事务内,进行业务数据入库和消息数据入库,此时消息数据入库的状态为:未成功;
步骤2:在步骤1中业务数据入库成功的前提下,消息发送者向消息服务器发送消息并完成消息持久化;
步骤3:消息服务器收到消息后,发送确认收到消息通知;
步骤4:生产者收到消息服务器发送的确认收到消息通知后,修改消息数据库中消息数据入库状态为:成功;
步骤5:布置分布式定时任务,查询数据库中消息数据入库状态为未成功且允许进行重试的数据;
步骤6:重新发送上一步中检索出来的队列消息给消息发送者;
步骤7:通过分布式定时任务,查询当前重试次数大于N的数据,修改该消息数据入库的状态为:发送失败。
进一步,还包括消息补偿表,消息补偿表包括流水号、消息主题、消息标签、业务key值、异常信息、消息投递状态0∶未成功;1∶成功;2∶失败、重试次数、允许进行重试的开始时间、创建时间和更新时间,步骤5中,通过消息补偿表中的允许进行重试的开始时间的记录值来判断是否允许进行重试。
进一步,步骤7中,通过消息补偿表的重试次数的记录值来查找当前重试次数大于N的数据。
进一步,步骤2中,消息发送者向消息服务器发送消息后,消息服务器将消息发送给消息消费者,消息消费者执行业务处理,然后将信息反馈给消息服务器。
本发明的原理及效果:
本方案在执行业务操作的时候,记录一条消息数据到数据库,并且消息数据的记录与业务数据的记录必须在同一个事务内完成,基于消息落库与普通消息处理流程相比,使用普通消息方式在调用方请求超时时,调用方回滚业务处理操作,假如处理方实际的处理状态为成功,那么将会出现业务处理未成功而消息处理成功不一致的情况。
当使用本方案基于消息落库的方案时,业务数据在步骤1时已完成持久化,当执行步骤2发送消息时出现调用方请求超时的情况,该方案的分布式定时任务会检测到消息数据入库状态为未成功的消息数据,进行消息重发,本方案解决了现有技术中业务处理和消息发送一致性无法保证的问题。
附图说明:
图1为本发明实施例一种基于消息落库的MQ消息可靠性投递解决方法的流程图。
具体实施方式
下面通过具体实施方式进一步详细的说明:
实施例:
一种基于消息落库的MQ消息可靠性投递解决方法,
如图1所示,本方案主要采用了消息信息落库,对消息信息状态进行打标,提供了一种简单的消息补偿机制,本方案的最核心做法就是在执行业务操作的时候,记录一条消息数据到数据库,并且消息数据的记录与业务数据的记录必须在同一个事务内完成,这是本方案的前提核心保障。
包括业务系统和消息服务器,通过消息信息落库,对消息信息状态进行打标,还包括消息补偿表,消息补偿表包括流水号、消息主题、消息标签、业务key值、异常信息、消息投递状态0∶未成功;1∶成功;2∶失败、重试次数、允许进行重试的开始时间、创建时间、更新时间,具体步骤如下:
步骤1:业务系统在事务内,进行业务数据入库和消息数据入库,此时消息数据入库的状态为:未成功;
步骤2:在步骤1中业务数据入库成功的前提下,消息发送者向消息服务器发送消息并完成消息持久化,消息发送者向消息服务器发送消息后,消息服务器将消息发送给消息消费者,消息消费者执行业务处理,然后将信息反馈给消息服务器;
步骤3:消息服务器收到消息后,发送确认收到消息通知;
步骤4:生产者收到消息服务器发送的确认收到消息通知后,修改消息数据库中消息数据入库状态为:成功;
步骤5:布置分布式定时任务,查询数据库中消息数据入库状态为未成功且允许进行重试的数据,其中,通过消息补偿表中的允许进行重试的开始时间的记录值来判断是否允许进行重试;
步骤6:重新发送上一步中检索出来的队列消息给消息发送者;
步骤7:通过分布式定时任务,查询当前重试次数大于N的数据,其中,通过消息补偿表的重试次数的记录值来查找当前重试次数大于N的数据,修改该消息数据入库的状态为:发送失败。
当使用本方案基于消息落库的方案时,业务数据在步骤1时已完成持久化,当执行步骤2发送消息时出现调用方请求超时的情况,该方案的分布式定时任务会检测到消息数据入库状态为未成功的消息数据,进行消息重发,本方案解决了现有技术中业务处理和消息发送一致性无法保证的问题。
以上所述的仅是本发明的实施例,方案中公知的具体结构及特性等常识在此未作过多描述。应当指出,对于本领域的技术人员来说,在不脱离本发明结构的前提下,还可以作出若干变形和改进,这些也应该视为本发明的保护范围,这些都不会影响本发明实施的效果和专利的实用性。本申请要求的保护范围应当以其权利要求的内容为准,说明书中的具体实施方式等记载可以用于解释权利要求的内容。
Claims (4)
1.一种基于消息落库的MQ消息可靠性投递解决方法,其特征在于,包括业务系统和消息服务器,通过消息信息落库,对消息信息状态进行打标,具体步骤如下:
步骤1:业务系统在事务内,进行业务数据入库和消息数据入库,此时消息数据入库的状态为:未成功;
步骤2:在步骤1中业务数据入库成功的前提下,消息发送者向消息服务器发送消息并完成消息持久化;
步骤3:消息服务器收到消息后,发送确认收到消息通知;
步骤4:生产者收到消息服务器发送的确认收到消息通知后,修改消息数据库中消息数据入库状态为:成功;
步骤5:布置分布式定时任务,查询数据库中消息数据入库状态为未成功且允许进行重试的数据;
步骤6:重新发送上一步中检索出来的队列消息给消息发送者;
步骤7:通过分布式定时任务,查询当前重试次数大于N的数据,修改该消息数据入库的状态为:发送失败。
2.根据权利要求1所述的一种基于消息落库的MQ消息可靠性投递解决方法,其特征在于:还包括消息补偿表,消息补偿表包括流水号、消息主题、消息标签、业务key值、异常信息、消息投递状态0∶未成功;1∶成功;2∶失败、重试次数、允许进行重试的开始时间、创建时间和更新时间,步骤5中,通过消息补偿表中的允许进行重试的开始时间的记录值来判断是否允许进行重试。
3.根据权利要求2所述的一种基于消息落库的MQ消息可靠性投递解决方法,其特征在于:步骤7中,通过消息补偿表的重试次数的记录值来查找当前重试次数大于N的数据。
4.根据权利要求3所述的一种基于消息落库的MQ消息可靠性投递解决方法,其特征在于:步骤2中,消息发送者向消息服务器发送消息后,消息服务器将消息发送给消息消费者,消息消费者执行业务处理,然后将信息反馈给消息服务器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011623035.2A CN112698969A (zh) | 2020-12-30 | 2020-12-30 | 一种基于消息落库的mq消息可靠性投递解决方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011623035.2A CN112698969A (zh) | 2020-12-30 | 2020-12-30 | 一种基于消息落库的mq消息可靠性投递解决方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112698969A true CN112698969A (zh) | 2021-04-23 |
Family
ID=75512938
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011623035.2A Pending CN112698969A (zh) | 2020-12-30 | 2020-12-30 | 一种基于消息落库的mq消息可靠性投递解决方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112698969A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113342546A (zh) * | 2021-06-04 | 2021-09-03 | 湖南快乐阳光互动娱乐传媒有限公司 | 基于数据库保证消息可靠性的方法、装置和计算机系统 |
CN113760470A (zh) * | 2021-09-09 | 2021-12-07 | 福建天晴数码有限公司 | 一种基于事务消息及反查实现分布式事务的方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040043363A1 (en) * | 2002-09-03 | 2004-03-04 | Elmar Dorner | Tutor interface with content based messaging |
CN103856393A (zh) * | 2013-07-09 | 2014-06-11 | 携程计算机技术(上海)有限公司 | 基于数据库的分布式消息中间件系统及其运行方法 |
CN111124717A (zh) * | 2019-12-27 | 2020-05-08 | 紫光云(南京)数字技术有限公司 | 消息投递方法、系统及计算机存储介质 |
-
2020
- 2020-12-30 CN CN202011623035.2A patent/CN112698969A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040043363A1 (en) * | 2002-09-03 | 2004-03-04 | Elmar Dorner | Tutor interface with content based messaging |
CN103856393A (zh) * | 2013-07-09 | 2014-06-11 | 携程计算机技术(上海)有限公司 | 基于数据库的分布式消息中间件系统及其运行方法 |
CN111124717A (zh) * | 2019-12-27 | 2020-05-08 | 紫光云(南京)数字技术有限公司 | 消息投递方法、系统及计算机存储介质 |
Non-Patent Citations (1)
Title |
---|
JAVASHUO: "MQ消息的可靠性投递", 《JAVASHUO》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113342546A (zh) * | 2021-06-04 | 2021-09-03 | 湖南快乐阳光互动娱乐传媒有限公司 | 基于数据库保证消息可靠性的方法、装置和计算机系统 |
CN113760470A (zh) * | 2021-09-09 | 2021-12-07 | 福建天晴数码有限公司 | 一种基于事务消息及反查实现分布式事务的方法及系统 |
CN113760470B (zh) * | 2021-09-09 | 2023-11-03 | 福建天晴数码有限公司 | 一种基于事务消息及反查实现分布式事务的方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7895602B2 (en) | System and article of manufacture for duplicate message elimination during recovery when multiple threads are delivering messages from a message store to a destination queue | |
EP2007055A9 (en) | Message reliable informing method and apparatus between systems | |
US8171088B2 (en) | Facilitating correction of incorrect identities in propagated electronic communications | |
EP0467546A2 (en) | Distributed data processing systems | |
US20040205770A1 (en) | Duplicate message elimination system for a message broker | |
CN112698969A (zh) | 一种基于消息落库的mq消息可靠性投递解决方法 | |
KR100905353B1 (ko) | 거래 시스템 | |
US20060146848A1 (en) | Server queuing system and method | |
CN106055424A (zh) | 一种信息数据库的异常处理方法和装置 | |
CN110442461B (zh) | 一种消息投递方法、存储介质 | |
CN111464621B (zh) | 分布式系统异步通信中消息发送与接收的数量检测方法 | |
US6535119B1 (en) | System and method of managing failure of an electronic shelf label to respond to a message | |
CN112437001B (zh) | 保证消息可靠性投递与消费方法、装置 | |
CN101001213B (zh) | 一种短消息传输系统及方法 | |
US8234338B1 (en) | System and method for reliable message delivery | |
KR100692954B1 (ko) | 모바일 금융 단말기의 핀 블록 시스템 및 방법 | |
US20090320049A1 (en) | Third tier transactional commit for asynchronous replication | |
US10318518B2 (en) | Event notification tool | |
CN111652681A (zh) | 一种单据处理方法、服务器及计算机可读存储介质 | |
CN116662035A (zh) | 消息队列事务消息的处理方法和装置 | |
US7363322B2 (en) | Methods and systems for performing reliable asynchronous notification of high-level document operations | |
JPH05298215A (ja) | 欠落データ検出再送方法 | |
CN115544034A (zh) | 一种数据一致性方法及业务系统 | |
CN111049938B (zh) | 消息通知方法、装置、电子设备及可读存储介质 | |
CN110647298B (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210423 |
|
RJ01 | Rejection of invention patent application after publication |