CN111049730A - RabbitMQ消息重传及消费方幂等性解决方法 - Google Patents

RabbitMQ消息重传及消费方幂等性解决方法 Download PDF

Info

Publication number
CN111049730A
CN111049730A CN201911235321.9A CN201911235321A CN111049730A CN 111049730 A CN111049730 A CN 111049730A CN 201911235321 A CN201911235321 A CN 201911235321A CN 111049730 A CN111049730 A CN 111049730A
Authority
CN
China
Prior art keywords
message
queue
deadlock
messages
rabbitmq
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
CN201911235321.9A
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.)
Unicloud Nanjing Digital Technology Co Ltd
Original Assignee
Unicloud Nanjing Digital 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 Unicloud Nanjing Digital Technology Co Ltd filed Critical Unicloud Nanjing Digital Technology Co Ltd
Priority to CN201911235321.9A priority Critical patent/CN111049730A/zh
Publication of CN111049730A publication Critical patent/CN111049730A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/07User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail characterised by the inclusion of specific contents
    • H04L51/18Commands or executable codes
    • 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/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Retry When Errors Occur (AREA)

Abstract

本发明公开了一种RabbitMQ消息重传及消费方幂等性解决方法,涉及软件开发技术领域。本发明包括以下步骤:步骤一,系统中建立统一的死信交换机、死信队列;步骤二,声明消息队列,将消息队列都绑定到统一的死信交换机上,并设置好死信队列的消费者;步骤三,消息会通过绑定好的死信交换机进入死信队列中;步骤四,消费者监听死信队列;步骤五,消息管理模块定时去重发这些消息,从而实现死信的重发。本发明提供了一个新的服务消息管理模块,解决了RabbitMQ功能不全面的问题;在消息队列的发送方,将所有的消息队列都绑定到统一的死信交换机上,消费者随时监听死信队列,消息管理模块定时去重发这些消息,避免了因RabbitMQ缺少重发功能导致业务异常。

Description

RabbitMQ消息重传及消费方幂等性解决方法
技术领域
本发明属于软件开发技术领域,特别是涉及一种RabbitMQ消息重传及消费方幂等性解决方法。
背景技术
随着分布式架构的发展,更好的实现系统各模块功能解耦成为了需要考虑的问题之一。因此引入了RabbitMQ,RabbitMQ的使用可以很好的帮助进行各功能模块的解耦,实现不同模块独立开发,独立部署。对于系统存在业务量激增的情况,需要进行削峰处理,已避免系统瞬时压力过大而崩溃,这时,也可以使用RabbitMQ来减少突发访问压力,维持系统的稳定。当系统中存在异步调用的场景,比如购买云主机后,通知主机侧创建云主机,不需要等待主机创建的结果,直接返回订单支付成功。也能够使用RabbitMQ来进行异步调用,将消息发送到RabbitMQ中,然后去继续业务,让消息慢慢消费。但是RabbitMQ本身不提供消息重传和消费方幂等性保证,因此当的消息过期或队列超长导致消息丢失时,会对业务造成极大影响。
现有的RabbitMQ队列中的消息过期或者未消费消息数量大于队列长度时,消息会变为死信,因为RabbitMQ本身不支持消息重传,导致消息丢失。
另外,RabbitMQ的消费方也没有幂等性保证,当同一条消息多次传给消费者时,消费者没有判断机制,直接会消费重复的消息。
发明内容
本发明的目的在于提供一种RabbitMQ消息重传及消费方幂等性解决方法,通过消息管理模块对外提供两个功能,一个保证因消息过期和消息数量大于消息队列长度导致的死信消息的重传,另一个保证RabbitMQ消费方消费消息的幂等性,解决了现有的消息过期或队列超长导致消息丢失的问题。
为解决上述技术问题,本发明是通过以下技术方案实现的:
本发明为一种RabbitMQ消息重传及消费方幂等性解决方法,包括以下步骤:
步骤一,系统中建立统一的死信交换机、死信队列;
步骤二,声明消息队列,将消息队列都绑定到统一的死信交换机上,并设置好死信队列的消费者;
步骤三,当队列中消息过期或者消息数量大于队列长度时,消息会通过绑定好的死信交换机进入死信队列中;
步骤四,消费者监听死信队列,会将死信消息以及消息的message属性保存在消息管理模块;
步骤五,消息管理模块定时去重发这些消息,从而实现死信的重发。
优选地,所述步骤二中声明消息列队时,添加死信交换机的参数,将所有消息队列都绑定这个死信交换机上。
优选地,所述步骤二中消息队列的属性message中添加全局唯一的messageId。
优选地,所述步骤二中消息队列中消息过期或者消息数量大于队列长度时,消息变为死信。
优选地,所述步骤四中消息管理模块会从消息属性中取出messageId和消息所投递的交换机以及路由键信息存入数据库。
优选地,所述步骤四中消息管理模块会定时扫描数据库中未发送状态的死信。
本发明具有以下有益效果:
本发明提供了一个新的服务消息管理模块,解决了RabbitMQ功能不全面的问题;在消息队列的发送方,将所有的消息队列都绑定到统一的死信交换机上,消费者随时监听死信队列,并会将死信消息以及消息的message属性保存在消息管理模块;消息管理模块定时去重发这些消息,从而实现死信的重发;避免了因RabbitMQ缺少重发功能导致业务异常。
当然,实施本发明的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的RabbitMQ消息重传及消费方幂等性解决方法示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1所示,本发明为一种RabbitMQ消息重传及消费方幂等性解决方法,包括以下步骤:
步骤一,系统中建立统一的死信交换机、死信队列;
步骤二,声明消息队列,将消息队列都绑定到统一的死信交换机上,并设置好死信队列的消费者;
步骤三,当队列中消息过期或者消息数量大于队列长度时,消息会通过绑定好的死信交换机进入死信队列中;
步骤四,消费者监听死信队列,会将死信消息以及消息的message属性保存在消息管理模块;
步骤五,消息管理模块定时去重发这些消息,从而实现死信的重发。
实施例:
在系统中创建一个消息管理模块,为所有的系统提供服务。消息管理模块对外提供两个功能,一个保证因消息过期和消息数量大于消息队列长度导致的死信消息的重传,另一个保证RabbitMQ消费方消费消息的幂等性。
首先要在的系统中建立统一的死信交换机、死信队列。
接下来,在声明消息队列的时候,添加死信交换机的参数,将所有消息队列都绑定这个死信交换机上。
同时要对发送方法进行改造,在发送队列消息的时候,在消息属性message中,要添加全局唯一的messageId,并将该消息所投递的交换机以及路由键也保存在消息属性中一并投递。
当队列中消息过期或者消息数量大于队列长度时,消息变为死信,这时消息会通过绑定好的死信交换机进入死信队列。
在系统中,提供一个唯一的死信消费者,监听死信队列,然后调用消息管理模块中提供的重传接口,消息管理模块会从消息属性中取出messageId和消息所投递的交换机以及路由键等信息存入数据库。
每半个小时,消息管理模块会扫描数据库中未发送状态的死信,根据数据库中所存的交换机和路由键,将死信重新投递到指定的队列中,并更新数据库中消息状态为已发送,从而实现死信的重传。
如果一条消息重传后又称为死信,仍会转发进入消息管理模块,这时更新消息状态为未发送,以确保下个周期此消息仍会被重新投递。
当消息被投递次数大于3次后,不会再被投递,将由人工进行处理。这一功能可为RabbitMQ提供消息重传的功能,更好的改进系统对消息队列的使用。
消息管理模块提供了一个保证RabbitMQ消费方幂等性的一个功能。消息管理模块维护一张表,保存消息全局唯一的messageId,当业务队列消费方接受到消息时,先去调用消息管理模块确保消息幂等性的接口,确定该消息是否已经被消费过。如果表中没有此messageId,说明消息没被消费过,消息可以消费。如果表中已存在此messageId,说明消息已经被消费,因此消费方停止执行相应业务逻辑,保证消费方的幂等性。
值得注意的是,上述系统实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
另外,本领域普通技术人员可以理解实现上述各实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,相应的程序可以存储于一计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘或光盘等。
以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。

Claims (6)

1.一种RabbitMQ消息重传及消费方幂等性解决方法,其特征在于,包括以下步骤:
步骤一,系统中建立统一的死信交换机、死信队列;
步骤二,声明消息队列,将消息队列都绑定到统一的死信交换机上,并设置好死信队列的消费者;
步骤三,当队列中消息过期或者消息数量大于队列长度时,消息会通过绑定好的死信交换机进入死信队列中;
步骤四,消费者监听死信队列,会将死信消息以及消息的message属性保存在消息管理模块;
步骤五,消息管理模块定时去重发这些消息,从而实现死信的重发。
2.根据权利要求1所述的一种RabbitMQ消息重传及消费方幂等性解决方法,其特征在于,所述步骤二中声明消息列队时,添加死信交换机的参数,将所有消息队列都绑定这个死信交换机上。
3.根据权利要求1所述的一种RabbitMQ消息重传及消费方幂等性解决方法,其特征在于,所述步骤二中消息队列的属性message中添加全局唯一的messageId。
4.根据权利要求1所述的一种RabbitMQ消息重传及消费方幂等性解决方法,其特征在于,所述步骤二中消息队列中消息过期或者消息数量大于队列长度时,消息变为死信。
5.根据权利要求1所述的一种RabbitMQ消息重传及消费方幂等性解决方法,其特征在于,所述步骤四中消息管理模块会从消息属性中取出messageId和消息所投递的交换机以及路由键信息存入数据库。
6.根据权利要求1所述的一种RabbitMQ消息重传及消费方幂等性解决方法,其特征在于,所述步骤四中消息管理模块会定时扫描数据库中未发送状态的死信。
CN201911235321.9A 2019-12-05 2019-12-05 RabbitMQ消息重传及消费方幂等性解决方法 Pending CN111049730A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911235321.9A CN111049730A (zh) 2019-12-05 2019-12-05 RabbitMQ消息重传及消费方幂等性解决方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911235321.9A CN111049730A (zh) 2019-12-05 2019-12-05 RabbitMQ消息重传及消费方幂等性解决方法

Publications (1)

Publication Number Publication Date
CN111049730A true CN111049730A (zh) 2020-04-21

Family

ID=70234695

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911235321.9A Pending CN111049730A (zh) 2019-12-05 2019-12-05 RabbitMQ消息重传及消费方幂等性解决方法

Country Status (1)

Country Link
CN (1) CN111049730A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113542406A (zh) * 2021-07-14 2021-10-22 上海浦东发展银行股份有限公司 一种系统间消息的异步处理系统
CN113656200A (zh) * 2021-08-24 2021-11-16 福建天晴数码有限公司 一种利用延时队列实现发货通知的方法及其系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107222530A (zh) * 2017-05-23 2017-09-29 努比亚技术有限公司 服务异步交互方法、设备、系统和可读介质
CN110224922A (zh) * 2019-05-21 2019-09-10 成都路行通信息技术有限公司 一种基于RabbitMQ的异步消息重试方法、系统及系统构建方法
CN110287206A (zh) * 2019-07-01 2019-09-27 四川新网银行股份有限公司 构建用于Redis数据库的分布式锁的方法
CN110417913A (zh) * 2019-08-09 2019-11-05 浪潮云信息技术有限公司 一种基于Rabbit MQ的云服务器异步创建方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107222530A (zh) * 2017-05-23 2017-09-29 努比亚技术有限公司 服务异步交互方法、设备、系统和可读介质
CN110224922A (zh) * 2019-05-21 2019-09-10 成都路行通信息技术有限公司 一种基于RabbitMQ的异步消息重试方法、系统及系统构建方法
CN110287206A (zh) * 2019-07-01 2019-09-27 四川新网银行股份有限公司 构建用于Redis数据库的分布式锁的方法
CN110417913A (zh) * 2019-08-09 2019-11-05 浪潮云信息技术有限公司 一种基于Rabbit MQ的云服务器异步创建方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113542406A (zh) * 2021-07-14 2021-10-22 上海浦东发展银行股份有限公司 一种系统间消息的异步处理系统
CN113656200A (zh) * 2021-08-24 2021-11-16 福建天晴数码有限公司 一种利用延时队列实现发货通知的方法及其系统

Similar Documents

Publication Publication Date Title
CN111371892A (zh) 高并发分布式消息推送系统及方法
CN111030784A (zh) 一种信息同步方法和装置
CN108631955A (zh) 一种确保消息发送可达的方法、系统和装置
CN110413425B (zh) 第三方消息回调方法、装置、服务器和存储介质
CN111049730A (zh) RabbitMQ消息重传及消费方幂等性解决方法
CN108390919B (zh) 一种用于高可靠双机热备的消息同步系统及方法
CN111045837B (zh) 跨服务消费的方法、存储介质
CN104901865A (zh) 一种基于全局单调序列号的移动端即时通讯信号同步方法
CN111522672B (zh) 一种用于熔断数据重复消费的方法及系统
CN113064740A (zh) 一种消息处理方法和装置
CN103347253B (zh) 大规模离线短信息分布式发送系统及方法
CN112751743B (zh) 消息发送异常的处理方法、消息发送装置和电子设备
CN112910987A (zh) 消息推送方法、系统、装置、设备及存储介质
CN112039835A (zh) 自适应轮询时间估算方法、装置、设备及存储介质
CN112256454B (zh) 消息延时处理方法和系统
CN111401819B (zh) 系统间数据推送方法及系统
CN111225117B (zh) 一种提醒消息的下发方法及装置
CN108989467B (zh) 集中式寻址方法
CN101378538B (zh) 一种群发消息处理方法及系统
CN115550303B (zh) 一种通知消息发送方法、装置、设备及介质
CN114979056B (zh) 一种电子邮件处理方法、装置、存储介质及电子设备
CN115834507A (zh) 基于RabbitMQ死信队列的任务处理方法和系统
KR100447394B1 (ko) 통신시스템의 메시지처리방법
JPS58175341A (ja) メツセ−ジ再送方式
CN117632261A (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
RJ01 Rejection of invention patent application after publication

Application publication date: 20200421