CN112698969A - 一种基于消息落库的mq消息可靠性投递解决方法 - Google Patents

一种基于消息落库的mq消息可靠性投递解决方法 Download PDF

Info

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
Application number
CN202011623035.2A
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.)
Bainian Yitang Medical Technology Co ltd
Original Assignee
Bainian Yitang Medical 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 Bainian Yitang Medical Technology Co ltd filed Critical Bainian Yitang Medical Technology Co ltd
Priority to CN202011623035.2A priority Critical patent/CN112698969A/zh
Publication of CN112698969A publication Critical patent/CN112698969A/zh
Pending legal-status Critical Current

Links

Images

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/466Transaction processing
    • 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
    • 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/547Remote 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消息可靠性投递解决方法
技术领域
本公开涉及数据消息处理方法领域,具体涉及一种基于消息落库的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中,消息发送者向消息服务器发送消息后,消息服务器将消息发送给消息消费者,消息消费者执行业务处理,然后将信息反馈给消息服务器。
CN202011623035.2A 2020-12-30 2020-12-30 一种基于消息落库的mq消息可靠性投递解决方法 Pending CN112698969A (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 紫光云(南京)数字技术有限公司 消息投递方法、系统及计算机存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
JAVASHUO: "MQ消息的可靠性投递", 《JAVASHUO》 *

Cited By (3)

* Cited by examiner, † Cited by third party
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