CN117931484A - 基于滑动窗口的消息消费方法、装置、设备及存储介质 - Google Patents
基于滑动窗口的消息消费方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN117931484A CN117931484A CN202410331041.2A CN202410331041A CN117931484A CN 117931484 A CN117931484 A CN 117931484A CN 202410331041 A CN202410331041 A CN 202410331041A CN 117931484 A CN117931484 A CN 117931484A
- Authority
- CN
- China
- Prior art keywords
- message
- sliding window
- consumption
- middleware
- consumer
- 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
- 238000000034 method Methods 0.000 title claims abstract description 44
- 238000006073 displacement reaction Methods 0.000 claims abstract description 34
- 230000015654 memory Effects 0.000 claims abstract description 29
- 238000012545 processing Methods 0.000 claims abstract description 12
- 238000004590 computer program Methods 0.000 claims description 14
- 230000005540 biological transmission Effects 0.000 claims description 11
- 238000012546 transfer Methods 0.000 claims description 9
- 238000010276 construction Methods 0.000 claims description 6
- 230000008569 process Effects 0.000 abstract description 8
- 230000007246 mechanism Effects 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 14
- 230000001360 synchronised effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种基于滑动窗口的消息消费方法、装置、设备及存储介质。所述方法包括:在消息生产者和消息消费者之间部署消息中间件,构建第一滑动窗口和第二滑动窗口记录消息中间件中的待发送消息、发送中消息和消息中间件是否接收到已确认消费消息,并分别构建第一位图表和第二位图表存储滑动窗口记录的信息,在消息中间件上同步滑动第一滑动窗口与第二滑动窗口,并当第二滑动窗口记录到消息中间件接收到已确认消费消息时,将已确认消费消息的最小位移存储至本地磁盘中,直至消息中间件发布的所有消息消费完成。本方法通过采用位图与滑动窗口结合的机制,大幅降低消息消费所需的内存,加快消息消费进度,满足海量消息的处理需求。
Description
技术领域
本申请涉及消息消费技术领域,特别是涉及一种基于滑动窗口的消息消费方法、装置、设备及存储介质。
背景技术
消息中间件主要用于分布式环境下扩展进程间的通信,消息中间件的消费能力受限于消息中间件本身的架构与设计。通常消息中间件采用消息队列技术,消息队列是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。在进行消息消费时,生产者只管把消息发布到消息队列中而不用管谁来取,消费者只管从消息队列中获取消息而不管是谁发布的,这样生产者和消费者都不用知道对方的存在。
在实际应用中,消息中间件面临着海量消息的处理需求,在处理大量消息时,消息队列会出现性能瓶颈,导致出现系统响应延迟和吞吐量下降的问题,消息队列实时记录消费者消费的历史记录偏移位置极大地约束了消费者性能,导致消费者的消费能力较差。尤其当系统遇到高并发请求时,由于消费者消费能力没有跟上生产者的生产能力,导致消息队列中的消息堆积甚至消息丢失。
发明内容
基于此,有必要针对上述技术问题,提供一种能够满足海量消息的处理需求、加快消息消费进度的基于滑动窗口的消息消费方法、装置、设备及存储介质。
一种基于滑动窗口的消息消费方法,所述方法包括:
在消息生产者和消息消费者之间部署消息中间件,消息中间件用于实现消息生产者与消息消费者之间的消息传递;
通过消息中间件将消息生产者生成的消息发送至消息消费者进行消费时,构建第一滑动窗口记录消息中间件中的待发送消息和发送中消息,并构建第一位图表存储第一滑动窗口记录的信息;
通过消息中间件接收消息消费者在消费完成后回复的已确认消费消息时,构建第二滑动窗口记录消息中间件是否接收到已确认消费消息,并构建第二位图表存储第二滑动窗口记录的信息;
在消息中间件上同步滑动第一滑动窗口与第二滑动窗口,并当第二滑动窗口记录到消息中间件接收到已确认消费消息时,将已确认消费消息的最小位移存储至本地磁盘中,直至消息中间件发布的所有消息消费完成。
在其中一个实施例中,所述方法还包括:根据消息消费者所需消息的主题将设定数量的消息消费者汇集为消费者组,所述消费者组中的所有消息消费者共享消费同一主题内的消息,且一个主题内的消息至少由一个消费者组进行消费。
在其中一个实施例中,消息消费者在消费完成后回复的已确认消费消息为ACK(确认报文);
通过消息中间件接收消息消费者在消费完成后回复的已确认消费消息,包括:
消息消费者在接收到消息中间件发送的消息后,将消息移交至上层应用进行业务处理,并在业务处理完成后,手动发送ACK至消息中间件。
在其中一个实施例中,第一滑动窗口与第二滑动窗口的大小一致,且二者在消息中间件上的起始位移与结束位移一致。
在其中一个实施例中,所述方法还包括:
第一位图表将第一滑动窗口记录的待发送消息标记为0,将第一滑动窗口记录的发送中消息标记为1;
第二位图表在第二滑动窗口记录到消息中间件接收到已确认消费消息时,将已确认消费消息标记为1,第二位图表在第二滑动窗口记录到消息中间件未接收到已确认消费消息时,将已确认消费消息标记为0。
在其中一个实施例中,所述方法还包括:
当发送中消息被消息消费者进行消费,但消息消费者未回复已确认消费消息时,第一位图表将第一滑动窗口记录的发送中消息的标记复位为0;
当发送中消息被消息消费者进行消费,且消息消费者回复已确认消费消息时,第一位图表将第一滑动窗口记录的发送中消息的标记维持为1。
在其中一个实施例中,在当第二滑动窗口记录到消息中间件接收到已确认消费消息时,将已确认消费消息的最小位移存储至本地磁盘中之后,还包括:
当消息生产者与消息消费者之间的消息消费重启时,将本地磁盘中存储的最小位移加载至消息中间件中,消息中间件继续将最小位移对应位置的消息发送至消息消费者进行消费。
一种基于滑动窗口的消息消费装置,所述装置包括:
预部署模块,用于在消息生产者和消息消费者之间部署消息中间件,消息中间件用于实现消息生产者与消息消费者之间的消息传递;
第一滑动窗口构建模块,用于通过消息中间件将消息生产者生成的消息发送至消息消费者进行消费时,构建第一滑动窗口记录消息中间件中的待发送消息和发送中消息,并构建第一位图表存储第一滑动窗口记录的信息;
第二滑动窗口构建模块,用于通过消息中间件接收消息消费者在消费完成后回复的已确认消费消息时,构建第二滑动窗口记录消息中间件是否接收到已确认消费消息,并构建第二位图表存储第二滑动窗口记录的信息;
窗口滑动模块,用于在消息中间件上同步滑动第一滑动窗口与第二滑动窗口,并当第二滑动窗口记录到消息中间件接收到已确认消费消息时,将已确认消费消息的最小位移存储至本地磁盘中,直至消息中间件发布的所有消息消费完成。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
在消息生产者和消息消费者之间部署消息中间件,消息中间件用于实现消息生产者与消息消费者之间的消息传递;
通过消息中间件将消息生产者生成的消息发送至消息消费者进行消费时,构建第一滑动窗口记录消息中间件中的待发送消息和发送中消息,并构建第一位图表存储第一滑动窗口记录的信息;
通过消息中间件接收消息消费者在消费完成后回复的已确认消费消息时,构建第二滑动窗口记录消息中间件是否接收到已确认消费消息,并构建第二位图表存储第二滑动窗口记录的信息;
在消息中间件上同步滑动第一滑动窗口与第二滑动窗口,并当第二滑动窗口记录到消息中间件接收到已确认消费消息时,将已确认消费消息的最小位移存储至本地磁盘中,直至消息中间件发布的所有消息消费完成。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
在消息生产者和消息消费者之间部署消息中间件,消息中间件用于实现消息生产者与消息消费者之间的消息传递;
通过消息中间件将消息生产者生成的消息发送至消息消费者进行消费时,构建第一滑动窗口记录消息中间件中的待发送消息和发送中消息,并构建第一位图表存储第一滑动窗口记录的信息;
通过消息中间件接收消息消费者在消费完成后回复的已确认消费消息时,构建第二滑动窗口记录消息中间件是否接收到已确认消费消息,并构建第二位图表存储第二滑动窗口记录的信息;
在消息中间件上同步滑动第一滑动窗口与第二滑动窗口,并当第二滑动窗口记录到消息中间件接收到已确认消费消息时,将已确认消费消息的最小位移存储至本地磁盘中,直至消息中间件发布的所有消息消费完成。
上述基于滑动窗口的消息消费方法、装置、设备及存储介质,在消息生产者和消息消费者之间部署消息中间件,并构建第一滑动窗口和第二滑动窗口记录消息中间件中的待发送消息、发送中消息和消息中间件是否接收到已确认消费消息,由于滑动窗口动态滑动的机制,滑动窗口不一定在消费者确认消息后就移动,降低了消费过程中的抖动情况,加快了消费进度。进一步的,本申请还分别构建第一位图表存储第一滑动窗口记录的信息,构建第二位图表存储第二滑动窗口记录的信息,通过将位图与滑动窗口进行结合,减少了消息消费时资源占用的情况,大幅降低了消息消费所需的内存,能够满足海量消息的处理需求。
附图说明
图1为一个实施例中基于滑动窗口的消息消费方法的流程示意图;
图2为一个实施例中消息消费者手动发送ACK的逻辑处理的流程示意图;
图3为一个实施例中第一滑动窗口与第二滑动窗口在消息中间件上进行同步滑动的示意图;
图4为一个实施例中第一位图表和第二位图表的初始化状态示意图;
图5为一个实施例中,在消息消费者A从消息中间件中拉取一条消息后,第一位图表和第二位图表的状态示意图;
图6为一个实施例中,在消息消费者A从消息中间件中拉取一条消息,且另一个消息消费者B从消息中间件中拉取两条消息后,第一位图表和第二位图表的状态示意图;
图7为一个实施例中,在消息消费者A从消息中间件中拉取一条消息,且另一个消息消费者B从消息中间件中拉取两条消息后,消息消费者A回复了ACK时,第一位图表和第二位图表的状态示意图;
图8为一个实施例中,在消息消费者A从消息中间件中拉取一条消息,且另一个消息消费者B从消息中间件中拉取两条消息后,消息消费者A回复了ACK但消息消费者B掉线未回复ACK时,第一位图表和第二位图表的状态示意图;
图9为一个实施例中,在消息消费者A从消息中间件中拉取一条消息,且消息消费者A回复了ACK后,消息消费者C又从消息中间件中拉取三条消息,消息消费者A又从消息中间件中拉取一条消息时,第一位图表和第二位图表的状态示意图;
图10 为一个实施例中,在消息消费者A和消息消费者C都回复了ACK时,第一位图表和第二位图表的状态示意图;
图11为一个实施例中,在消息消费者A和消息消费者C都回复了ACK后,第一滑动窗口与第二滑动窗口在消息中间件上同步向后滑动时,第一位图表和第二位图表的状态示意图;
图12为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种基于滑动窗口的消息消费方法,包括以下步骤:
步骤S1,在消息生产者和消息消费者之间部署消息中间件,消息中间件用于实现消息生产者与消息消费者之间的消息传递。
步骤S2,通过消息中间件将消息生产者生成的消息发送至消息消费者进行消费时,构建第一滑动窗口记录消息中间件中的待发送消息和发送中消息,并构建第一位图表存储第一滑动窗口记录的信息。
步骤S3,通过消息中间件接收消息消费者在消费完成后回复的已确认消费消息时,构建第二滑动窗口记录消息中间件是否接收到已确认消费消息,并构建第二位图表存储第二滑动窗口记录的信息。
步骤S4,在消息中间件上同步滑动第一滑动窗口与第二滑动窗口,并当第二滑动窗口记录到消息中间件接收到已确认消费消息时,将已确认消费消息的最小位移存储至本地磁盘中,直至消息中间件发布的所有消息消费完成。
在其中一个实施例中,所述方法还包括:根据消息消费者所需消息的主题将设定数量的消息消费者汇集为消费者组,所述消费者组中的所有消息消费者共享消费同一主题内的消息,且一个主题内的消息至少由一个消费者组进行消费。
在其中一个实施例中,消息消费者在消费完成后回复的已确认消费消息为ACK;
通过消息中间件接收消息消费者在消费完成后回复的已确认消费消息,包括:
消息消费者在接收到消息中间件发送的消息后,将消息移交至上层应用进行业务处理,并在业务处理完成后,手动发送ACK至消息中间件。具体地,消息消费者手动发送ACK至消息中间件的逻辑处理流程如图2所示,消息消费者即为图2中的客户端,消息中间件即为图2中的工作节点,客户端与应用之间通过API(Application Programming Interface,应用程序编程接口)进行数据交互。客户端根据上层应用的拉取请求向工作节点拉取消息,工作节点收到拉取请求后,从历史记录中获取消息位移并读取消息返回至客户端,客户端进一步推送消息给上层应用,上层应用收到消息后进行业务处理,并在业务处理完成后手动发送ACK至工作节点,进行消费位移更新。
可以理解,通过手动发送ACK,提高了ACK传递的可靠性,避免消息丢失。
在其中一个实施例中,第一滑动窗口与第二滑动窗口的大小一致,且二者在消息中间件上的起始位移与结束位移一致。
可以理解,滑动窗口的大小是指需等待确认应答而可以继续发送数据的最大值,窗口越大,则消息消费者并发消费性能就越高,在实际应用时,滑动窗口大小可以设置到十万级。
进一步地,第一滑动窗口和第二滑动窗口在窗口滑动使用动态同步滑动,不必等待一个窗口内的所有消息都消费完毕,即可同步向后滑动,降低了消费过程中的抖动情况。具体地,第一滑动窗口与第二滑动窗口在消息中间件上进行同步滑动的示意图如图3所示,消息中间件发送前四个段的消息时,不需要等待回复任何ACK,直接发送,当第二滑动窗口记录到消息中间件收到第一个ACK后,第一滑动窗口与第二滑动窗口同步向后滑动,继续发送第五个段的数据;依次类推。并且,操作系统为维护第一滑动窗口和第二滑动窗口,还开辟有发送缓冲区来记录当前还有哪些消息没有应答,只有确认应答过的消息,才能从发送缓冲区删掉,并持久化存储在本地磁盘中。
在其中一个实施例中,所述方法还包括:第一位图表将第一滑动窗口记录的待发送消息标记为0,将第一滑动窗口记录的发送中消息标记为1;第二位图表在第二滑动窗口记录到消息中间件接收到已确认消费消息时,将已确认消费消息标记为1,第二位图表在第二滑动窗口记录到消息中间件未接收到已确认消费消息时,将已确认消费消息标记为0。
进一步地,当发送中消息被消息消费者进行消费,但消息消费者未回复已确认消费消息时,第一位图表将第一滑动窗口记录的发送中消息的标记复位为0;当发送中消息被消息消费者进行消费,且消息消费者回复已确认消费消息时,第一位图表将第一滑动窗口记录的发送中消息的标记维持为1。
可以理解,在消息中间件上使用第一滑动窗口和第二滑动窗口可以大大提高消息消费者的性能,但是因此会带来另一个问题,由于每个消息都会申请一个结构体对象,占用字节数是28字节(4字节对齐的情况下,如果加上消费者信息,则占用的会更多),现假设有10000个主题,每个主题下有一个消费者组在消费消息,每个主题包含10万条消息,滑动窗口大小是8192,则总共需要申请的内存至少是8192*10000*28字节(至少2187M),而且这些内存是在初始化就申请了,直到进程停止,才会被释放掉,非常耗费系统资源。
因此,本申请为了充分利用和管理系统内存资源,采用位图和滑动窗口结合的机制来大幅度降低内存的使用。具体地,使用位图能大幅降低保存消息Id(标识)的内存占用,1KB能记录8192个消息是否被确认。由于位图保存的内容都是0和1,因此可以很方便地保存在堆外。同样,当同样存在10000个主题,每个主题下有一个消费者组在消费消息,每个主题有10万条消息,滑动窗口大小是8192的情况下,采用位图和滑动窗口结合的机制则总共需要申请的内存至少是1024*10000字节(9.8M),第一位图表和第二位图表所占用的总内存空间大小为19.6M,内存使用大幅度降低。
在一个具体的实施例中,假设存在10条消息,第一滑动窗口和第二滑动窗口的大小是6,起始位移start_offset=0,结束位移end_offset=10,存储到历史记录中的位移min_ack_offset=0,此时,第一位图表和第二位图表的初始化状态如图4所示,位图表中全部标记为0。
当消息消费者A从消息中间件中拉取一条消息后,第一位图表和第二位图表的状态更新为图5所示,此时,位于第一位图表中第一位的发送中消息标记为1。
然后,另一个消息消费者B又过来拉取两条消息后,第一位图表和第二位图表的状态更新为如图6所示,此时,位于第一位图表中第二位和第三位的发送中消息都标记为1。
此时,消息消费者A回复了ACK,存储到历史记录中的位移更新为min_ack_offset=1,第一位图表和第二位图表的状态更新为如图7所示。
然后,消息消费者B掉线,其拉取的消息未对应回复ACK,此时,需要将第一位图表中第二位和第三位的消息复位成待发送消息,并重新标记为0,第一位图表和第二位图表的状态更新为如图8所示。
进一步地,消息消费者C又从消息中间件中拉取三条消息,消息消费者A又从消息中间件中拉取一条消息时,第一位图表和第二位图表的状态更新为如图9所示。
当消息消费者A和消息消费者C都回复了ACK时,存储到历史记录中的位移为min_ack_offset=1,第一位图表和第二位图表的状态更新为如图10所示。此时,可选择将第一滑动窗口和第二滑动窗口同步向后滑动,min_ack_offset=1,此时,起始位移为start_offset=5,结束位移为end_offset=10,第一位图表和第二位图表的状态更新为如图11所示。
具体地,C语言的位图表是以数组实现的位图,当窗口需要移动时,一般是需要至少消费8条消息之后才可以移动,按照8位(亿字节)的倍数来移动,但是不能频繁的移动,避免拷贝耗费过多的性能。
在其中一个实施例中,在当第二滑动窗口记录到消息中间件接收到已确认消费消息时,将已确认消费消息的最小位移存储至本地磁盘中之后,还包括:
当消息生产者与消息消费者之间的消息消费重启时,将本地磁盘中存储的最小位移加载至消息中间件中,消息中间件继续将最小位移对应位置的消息发送至消息消费者进行消费。
可以理解,通过存储已确认消费消息的最小位移,避免消费重启后,消息消费者要从头开始消费的问题,防止消息消费者接收重复的消息。
应该理解的是,虽然图1和图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1和图2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,提供了一种基于滑动窗口的消息消费装置,包括:
预部署模块,用于在消息生产者和消息消费者之间部署消息中间件,消息中间件用于实现消息生产者与消息消费者之间的消息传递;
第一滑动窗口构建模块,用于通过消息中间件将消息生产者生成的消息发送至消息消费者进行消费时,构建第一滑动窗口记录消息中间件中的待发送消息和发送中消息,并构建第一位图表存储第一滑动窗口记录的信息;
第二滑动窗口构建模块,用于通过消息中间件接收消息消费者在消费完成后回复的已确认消费消息时,构建第二滑动窗口记录消息中间件是否接收到已确认消费消息,并构建第二位图表存储第二滑动窗口记录的信息;
窗口滑动模块,用于在消息中间件上同步滑动第一滑动窗口与第二滑动窗口,并当第二滑动窗口记录到消息中间件接收到已确认消费消息时,将已确认消费消息的最小位移存储至本地磁盘中,直至消息中间件发布的所有消息消费完成。
关于基于滑动窗口的消息消费装置的具体限定可以参见上文中对于基于滑动窗口的消息消费方法的限定,在此不再赘述。上述基于滑动窗口的消息消费装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图12所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储消息消费数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于滑动窗口的消息消费方法。
本领域技术人员可以理解,图12中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
在消息生产者和消息消费者之间部署消息中间件,消息中间件用于实现消息生产者与消息消费者之间的消息传递;
通过消息中间件将消息生产者生成的消息发送至消息消费者进行消费时,构建第一滑动窗口记录消息中间件中的待发送消息和发送中消息,并构建第一位图表存储第一滑动窗口记录的信息;
通过消息中间件接收消息消费者在消费完成后回复的已确认消费消息时,构建第二滑动窗口记录消息中间件是否接收到已确认消费消息,并构建第二位图表存储第二滑动窗口记录的信息;
在消息中间件上同步滑动第一滑动窗口与第二滑动窗口,并当第二滑动窗口记录到消息中间件接收到已确认消费消息时,将已确认消费消息的最小位移存储至本地磁盘中,直至消息中间件发布的所有消息消费完成。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
在消息生产者和消息消费者之间部署消息中间件,消息中间件用于实现消息生产者与消息消费者之间的消息传递;
通过消息中间件将消息生产者生成的消息发送至消息消费者进行消费时,构建第一滑动窗口记录消息中间件中的待发送消息和发送中消息,并构建第一位图表存储第一滑动窗口记录的信息;
通过消息中间件接收消息消费者在消费完成后回复的已确认消费消息时,构建第二滑动窗口记录消息中间件是否接收到已确认消费消息,并构建第二位图表存储第二滑动窗口记录的信息;
在消息中间件上同步滑动第一滑动窗口与第二滑动窗口,并当第二滑动窗口记录到消息中间件接收到已确认消费消息时,将已确认消费消息的最小位移存储至本地磁盘中,直至消息中间件发布的所有消息消费完成。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (10)
1.一种基于滑动窗口的消息消费方法,其特征在于,所述方法包括:
在消息生产者和消息消费者之间部署消息中间件,所述消息中间件用于实现所述消息生产者与消息消费者之间的消息传递;
通过所述消息中间件将所述消息生产者生成的消息发送至消息消费者进行消费时,构建第一滑动窗口记录所述消息中间件中的待发送消息和发送中消息,并构建第一位图表存储所述第一滑动窗口记录的信息;
通过所述消息中间件接收所述消息消费者在消费完成后回复的已确认消费消息时,构建第二滑动窗口记录所述消息中间件是否接收到已确认消费消息,并构建第二位图表存储所述第二滑动窗口记录的信息;
在所述消息中间件上同步滑动所述第一滑动窗口与第二滑动窗口,并当所述第二滑动窗口记录到所述消息中间件接收到已确认消费消息时,将所述已确认消费消息的最小位移存储至本地磁盘中,直至所述消息中间件发布的所有消息消费完成。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:根据消息消费者所需消息的主题将设定数量的消息消费者汇集为消费者组,所述消费者组中的所有消息消费者共享消费同一主题内的消息,且一个主题内的消息至少由一个消费者组进行消费。
3.根据权利要求1所述的方法,其特征在于,所述消息消费者在消费完成后回复的已确认消费消息为ACK;
通过所述消息中间件接收所述消息消费者在消费完成后回复的已确认消费消息,包括:
所述消息消费者在接收到所述消息中间件发送的消息后,将消息移交至上层应用进行业务处理,并在业务处理完成后,手动发送ACK至消息中间件。
4.根据权利要求1所述的方法,其特征在于,所述第一滑动窗口与所述第二滑动窗口的大小一致,且二者在消息中间件上的起始位移与结束位移一致。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述第一位图表将所述第一滑动窗口记录的待发送消息标记为0,将所述第一滑动窗口记录的发送中消息标记为1;
所述第二位图表在所述第二滑动窗口记录到所述消息中间件接收到已确认消费消息时,将所述已确认消费消息标记为1,所述第二位图表在所述第二滑动窗口记录到所述消息中间件未接收到已确认消费消息时,将所述已确认消费消息标记为0。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
当发送中消息被消息消费者进行消费,但消息消费者未回复已确认消费消息时,所述第一位图表将所述第一滑动窗口记录的发送中消息的标记复位为0;
当发送中消息被消息消费者进行消费,且消息消费者回复已确认消费消息时,所述第一位图表将所述第一滑动窗口记录的发送中消息的标记维持为1。
7.根据权利要求1所述的方法,其特征在于,在当所述第二滑动窗口记录到所述消息中间件接收到已确认消费消息时,将所述已确认消费消息的最小位移存储至本地磁盘中之后,还包括:
当消息生产者与消息消费者之间的消息消费重启时,将所述本地磁盘中存储的最小位移加载至消息中间件中,所述消息中间件继续将所述最小位移对应位置的消息发送至消息消费者进行消费。
8.一种基于滑动窗口的消息消费装置,其特征在于,所述装置包括:
预部署模块,用于在消息生产者和消息消费者之间部署消息中间件,所述消息中间件用于实现所述消息生产者与消息消费者之间的消息传递;
第一滑动窗口构建模块,用于通过所述消息中间件将所述消息生产者生成的消息发送至消息消费者进行消费时,构建第一滑动窗口记录所述消息中间件中的待发送消息和发送中消息,并构建第一位图表存储所述第一滑动窗口记录的信息;
第二滑动窗口构建模块,用于通过所述消息中间件接收所述消息消费者在消费完成后回复的已确认消费消息时,构建第二滑动窗口记录所述消息中间件是否接收到已确认消费消息,并构建第二位图表存储所述第二滑动窗口记录的信息;
窗口滑动模块,用于在所述消息中间件上同步滑动所述第一滑动窗口与第二滑动窗口,并当所述第二滑动窗口记录到所述消息中间件接收到已确认消费消息时,将所述已确认消费消息的最小位移存储至本地磁盘中,直至所述消息中间件发布的所有消息消费完成。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410331041.2A CN117931484A (zh) | 2024-03-22 | 2024-03-22 | 基于滑动窗口的消息消费方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410331041.2A CN117931484A (zh) | 2024-03-22 | 2024-03-22 | 基于滑动窗口的消息消费方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117931484A true CN117931484A (zh) | 2024-04-26 |
Family
ID=90751119
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410331041.2A Pending CN117931484A (zh) | 2024-03-22 | 2024-03-22 | 基于滑动窗口的消息消费方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117931484A (zh) |
Citations (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6658619B1 (en) * | 2000-10-06 | 2003-12-02 | Ericsson Inc. | Systems and methods for implementing hierarchical acknowledgement bitmaps in an ARQ protocol |
US20050111452A1 (en) * | 2003-11-25 | 2005-05-26 | Cisco Technology, Inc., A California Corporation | Reliable multicast communication |
US7185099B1 (en) * | 2000-11-22 | 2007-02-27 | International Business Machines Corporation | Apparatus and method for communicating between computer systems using a sliding send window for ordered messages in a clustered computing environment |
CN107006030A (zh) * | 2014-12-12 | 2017-08-01 | 高通股份有限公司 | 邻居感知网络(nan)数据路径中的业务通告 |
CN107038162A (zh) * | 2016-02-03 | 2017-08-11 | 滴滴(中国)科技有限公司 | 基于数据库日志的实时数据查询方法和系统 |
US20170310628A1 (en) * | 2016-04-21 | 2017-10-26 | Confluent, Inc. | Distributed message queue stream verification |
CN111984433A (zh) * | 2020-07-31 | 2020-11-24 | 五八有限公司 | 业务数据处理方法、展示方法、装置、电子设备及介质 |
WO2020233461A1 (zh) * | 2019-05-21 | 2020-11-26 | 阿里巴巴集团控股有限公司 | 基于消息队列的通信方法及装置 |
CN112579148A (zh) * | 2020-12-17 | 2021-03-30 | 广州虎牙科技有限公司 | 基于业务代理的业务消息处理方法、装置及电子设备 |
CN112882842A (zh) * | 2021-02-03 | 2021-06-01 | 厦门投融汇网络有限公司 | 一种基于redis存储作为消息中间件的数据传输方法 |
CN112965839A (zh) * | 2021-03-29 | 2021-06-15 | 远景智能国际私人投资有限公司 | 消息传输方法、装置、设备及存储介质 |
CN113452774A (zh) * | 2021-06-25 | 2021-09-28 | 睿视(苏州)视频科技有限公司 | 消息推送方法、装置、设备及存储介质 |
WO2021217986A1 (zh) * | 2020-04-30 | 2021-11-04 | 平安科技(深圳)有限公司 | 分布式消息传输方法、装置、计算机设备及存储介质 |
CN113660066A (zh) * | 2020-05-12 | 2021-11-16 | 阿里巴巴集团控股有限公司 | 一种基于滑动窗口的数据传输方法、网卡设备以及存储介质 |
CN114567664A (zh) * | 2022-03-04 | 2022-05-31 | 苏州浪潮智能科技有限公司 | 消息处理结果监控方法、装置、计算机设备和存储介质 |
CN114860473A (zh) * | 2022-04-08 | 2022-08-05 | 天工信创(广州)信息科技有限公司 | 一种消息处理方法、处理器和存储介质 |
CN115640359A (zh) * | 2022-10-31 | 2023-01-24 | 中国农业银行股份有限公司 | 一种消息同步的控制方法、装置、电子设备及存储介质 |
CN115657960A (zh) * | 2022-11-11 | 2023-01-31 | 苏州浪潮智能科技有限公司 | 一种磁盘阵列初始化方法、装置、设备及可读存储介质 |
CN116302599A (zh) * | 2023-02-27 | 2023-06-23 | 中国人民财产保险股份有限公司 | 基于消息中间件的消息处理方法、装置及系统 |
CN116467091A (zh) * | 2023-03-08 | 2023-07-21 | 平安壹钱包电子商务有限公司 | 基于消息中间件的消息处理方法、装置、设备及介质 |
CN116760899A (zh) * | 2023-06-12 | 2023-09-15 | 众安在线财产保险股份有限公司 | 基于Kafka的并发消费方法、装置、设备和介质 |
US20230396633A1 (en) * | 2022-06-06 | 2023-12-07 | Hangzhou Dbappsecurity Co., Ltd. | Method and Apparatus for Detecting Security Event, and Computer-Readable Storage Medium |
-
2024
- 2024-03-22 CN CN202410331041.2A patent/CN117931484A/zh active Pending
Patent Citations (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6658619B1 (en) * | 2000-10-06 | 2003-12-02 | Ericsson Inc. | Systems and methods for implementing hierarchical acknowledgement bitmaps in an ARQ protocol |
US7185099B1 (en) * | 2000-11-22 | 2007-02-27 | International Business Machines Corporation | Apparatus and method for communicating between computer systems using a sliding send window for ordered messages in a clustered computing environment |
US20050111452A1 (en) * | 2003-11-25 | 2005-05-26 | Cisco Technology, Inc., A California Corporation | Reliable multicast communication |
CN1886667A (zh) * | 2003-11-25 | 2006-12-27 | 思科技术公司 | 可靠多播通信 |
CN107006030A (zh) * | 2014-12-12 | 2017-08-01 | 高通股份有限公司 | 邻居感知网络(nan)数据路径中的业务通告 |
CN107038162A (zh) * | 2016-02-03 | 2017-08-11 | 滴滴(中国)科技有限公司 | 基于数据库日志的实时数据查询方法和系统 |
US20170310628A1 (en) * | 2016-04-21 | 2017-10-26 | Confluent, Inc. | Distributed message queue stream verification |
WO2020233461A1 (zh) * | 2019-05-21 | 2020-11-26 | 阿里巴巴集团控股有限公司 | 基于消息队列的通信方法及装置 |
WO2021217986A1 (zh) * | 2020-04-30 | 2021-11-04 | 平安科技(深圳)有限公司 | 分布式消息传输方法、装置、计算机设备及存储介质 |
CN113660066A (zh) * | 2020-05-12 | 2021-11-16 | 阿里巴巴集团控股有限公司 | 一种基于滑动窗口的数据传输方法、网卡设备以及存储介质 |
CN111984433A (zh) * | 2020-07-31 | 2020-11-24 | 五八有限公司 | 业务数据处理方法、展示方法、装置、电子设备及介质 |
CN112579148A (zh) * | 2020-12-17 | 2021-03-30 | 广州虎牙科技有限公司 | 基于业务代理的业务消息处理方法、装置及电子设备 |
CN112882842A (zh) * | 2021-02-03 | 2021-06-01 | 厦门投融汇网络有限公司 | 一种基于redis存储作为消息中间件的数据传输方法 |
CN112965839A (zh) * | 2021-03-29 | 2021-06-15 | 远景智能国际私人投资有限公司 | 消息传输方法、装置、设备及存储介质 |
CN113452774A (zh) * | 2021-06-25 | 2021-09-28 | 睿视(苏州)视频科技有限公司 | 消息推送方法、装置、设备及存储介质 |
CN114567664A (zh) * | 2022-03-04 | 2022-05-31 | 苏州浪潮智能科技有限公司 | 消息处理结果监控方法、装置、计算机设备和存储介质 |
CN114860473A (zh) * | 2022-04-08 | 2022-08-05 | 天工信创(广州)信息科技有限公司 | 一种消息处理方法、处理器和存储介质 |
US20230396633A1 (en) * | 2022-06-06 | 2023-12-07 | Hangzhou Dbappsecurity Co., Ltd. | Method and Apparatus for Detecting Security Event, and Computer-Readable Storage Medium |
CN115640359A (zh) * | 2022-10-31 | 2023-01-24 | 中国农业银行股份有限公司 | 一种消息同步的控制方法、装置、电子设备及存储介质 |
CN115657960A (zh) * | 2022-11-11 | 2023-01-31 | 苏州浪潮智能科技有限公司 | 一种磁盘阵列初始化方法、装置、设备及可读存储介质 |
CN116302599A (zh) * | 2023-02-27 | 2023-06-23 | 中国人民财产保险股份有限公司 | 基于消息中间件的消息处理方法、装置及系统 |
CN116467091A (zh) * | 2023-03-08 | 2023-07-21 | 平安壹钱包电子商务有限公司 | 基于消息中间件的消息处理方法、装置、设备及介质 |
CN116760899A (zh) * | 2023-06-12 | 2023-09-15 | 众安在线财产保险股份有限公司 | 基于Kafka的并发消费方法、装置、设备和介质 |
Non-Patent Citations (4)
Title |
---|
DELI ZHANG: "A Lock-Free Priority Queue Design Based on Multi-Dimensional Linked Lists", IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS, 1 March 2016 (2016-03-01) * |
刘耀;金跃辉;崔毅东;: "发布订阅系统中高效消息投递机制的研究", 网络新媒体技术, no. 01, 15 January 2015 (2015-01-15) * |
徐震;焦文彬;: "RabbitMQ小消息确认机制优化", 计算机系统应用, no. 03, 15 March 2018 (2018-03-15) * |
李仁发, 何彦: "基于虚拟实验方法的滑动窗口协议分析", 系统仿真学报, no. 08, 20 August 2002 (2002-08-20) * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111881116A (zh) | 数据迁移方法、数据迁移系统、计算机系统和存储介质 | |
CN111225012A (zh) | 事务处理方法、装置和设备 | |
US9298765B2 (en) | Apparatus and method for handling partially inconsistent states among members of a cluster in an erratic storage network | |
CN114968102B (zh) | 一种数据缓存方法、装置、系统、计算机设备及存储介质 | |
CN108268218B (zh) | 一种基于网络编码的变长数据段的写入方法及读取方法 | |
CN109460438A (zh) | 消息数据存储方法、装置、计算机设备和存储介质 | |
CN115470156A (zh) | 基于rdma的内存使用方法、系统、电子设备和存储介质 | |
CN113411363A (zh) | 一种镜像文件的上传方法、相关设备及计算机存储介质 | |
CN108132759B (zh) | 一种文件系统中管理数据的方法和装置 | |
CN111400213B (zh) | 传输数据的方法、装置及系统 | |
CN117931484A (zh) | 基于滑动窗口的消息消费方法、装置、设备及存储介质 | |
US8140638B2 (en) | Multistage online transaction system, server, multistage online transaction processing method and program | |
CN116225314A (zh) | 数据写入方法、装置、计算机设备和存储介质 | |
CN109445966B (zh) | 事件处理方法、装置、介质和计算设备 | |
CN114490540B (zh) | 数据存储方法、介质、装置和计算设备 | |
CN109634875A (zh) | 命令数据缓存处理方法、装置、计算机设备和存储介质 | |
CN113704027B (zh) | 文件聚合兼容方法、装置、计算机设备和存储介质 | |
US20230281187A1 (en) | Method for keeping data consistent across different storage systems, computing device, and storage medium | |
CN115695326A (zh) | 数据帧传输方法、装置、计算机设备和存储介质 | |
CN111274176B (zh) | 一种信息处理方法、电子设备、系统及存储介质 | |
CN112395245B (zh) | 处理器的访问装置、方法及计算机设备 | |
CN112114757A (zh) | 对象存储系统中的存储方法及系统、计算设备和介质 | |
JP2022552150A (ja) | データ構造、メモリ手段、および装置 | |
CN115334000B (zh) | 基于多控存储系统的数据传输方法、装置、设备及介质 | |
CN111488324A (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 |