一种消息订阅处理装置、系统及方法与流程

文档序号:11156899阅读:317来源:国知局
一种消息订阅处理装置、系统及方法与制造工艺

本发明关于一种互联网消息交互技术领域,特别是涉及一种高可靠的消息订阅处理装置、系统及方法。



背景技术:

企业和政府部门的IT系统环境中拥有多种操作系统、数据库、异构的网络环境和多种应用。在当前信息数据大爆炸的背景下,各个系统应用之间存在非常多的数据共享和数据交换需求。如何把不同的平台的异构系统结合成一个有机的协同工作整体,真正实现跨平台分布式应用成为当务之急。消息中间件正是为解决多方应用系统之间信息互通、信息孤岛、应用数据丢失、网络环境差导致的数据传输不稳定、应用资源隔离、应用系统可扩展性等一系列问题而生的中间件产品。

Kafka是当前比较出色的一款高吞吐量的分布式发布订阅消息系统。Kafka的消息订阅者通常将从某个Partition(分区)读取的最后一条消息的offset(偏移量)存于ZooKeeper(或消息存储节点)中,当消费完消息后,再次将最后一条消息的offset信息更新到ZooKeeper(或消息存储节点)中,这样可以保证不断消费到新的消息而不重复消费。

可是,在实际应用中,常常会有如下复杂的消息消费需求:当一个消息订阅者读取了一批消息后还没有完全消费完毕就异常终止了,如果从原来的offset之后重新读取消息进行消费就会重复消费那些已经消费的消息;而如果从上一次异常时读取到的最后一条消息的offset之后读取新的消息就会因为有部分消息没有被消费而发生消息丢失的问题。在某些场景下,我们读取的一批消息,不希望一下子完全消费完再读取下一批消息,而是希望允许某些消息还没有消费完毕的情况下,继续读取下一批消息。有时,消息订阅者读取到一批消息后,希望根据自己的处理情况在指定的时间之后重新消费某些消息。如上这些情况下,如果采用现有的技术方案,包含Kafka系统,均无法解决“订阅者异常造成的消费消息丢失”、“跳跃消费消息”和“定时重投消息”等问题。



技术实现要素:

为克服上述现有技术存在的不足,本发明之目的在于提供一种消息订阅处理装置、系统及方法,以解决现有技术存在的订阅者异常造成的消费消息丢失、跳跃消费消息和定时重投消息等问题。

为达上述及其它目的,本发明提出一种消息订阅处理装置,应用于消息服务器,包括:

消息存储模块,用于存储具体的消息,并向其他模块提供消息存取服务;

消息配置管理模块,用于管理被订阅主题和订阅消息的消息订阅端的配置信息;

消费状态管理模块,用于存储消费状态为待消费或消费中的消息,并记录当前消息服务器上所有被订阅主题里面所属队列中的所有消息被某个订阅端的消费情况,根据订阅端对消息的消费和签收情况对被订阅主题中的消息的消费情况进行管理;

消费进度管理模块,用于管理某个订阅者消费某个主题的进度信息;

订阅请求接收模块,用于接收消息订阅端发送的订阅消息的请求;

消费进度查询模块,根据该请求中的主题和队列信息于所述消费进度管理模块中查询消费进度;

待消费消息获取模块,于该消息状态管理模块中获取消费进度对应偏移量之后的待消费的消息;

消息发送模块,用于将获取的消息发送给消息订阅端。

反馈处理模块,用于接收消息订阅端的反馈信息,并根据消息订阅端的反馈信息于修改消息的消费状态及消费进度。

进一步地,该消息订阅处理装置还包括判断处理模块,该判断处理模块用于判断该待消费消息获取模块获取的待消费消息个数是否小于订阅请求中指定的消息个数,若判断结果为获取的待消费消息个数小于订阅请求中指定的消息个数,则从该消息存储模块中继续获取消息后,再进入该消息发送模块。

进一步地,从该消息存储模块中继续获取消息的步骤如下:

从该消息状态管理模块中获取对应主题对应队列中缓存消息的最大偏移量;

从该消息存储模块中取出该偏移量之后的若干条消息,将该些消息缓存到消息状态管理模块中,并标记该些消息的消费状态为消费中。

进一步地,该反馈处理模块进一步包括:

重试请求处理模块,若接收到的消息订阅端的反馈信息为重试请求,则于该消费状态管理模块中将对应消息的消息状态由消费中改为待消费,处理结束;

签收请求处理模块,若接收到的消息订阅端的反馈信息为签收请求,则于该消费状态管理模块中删除对应消息,并于该消费状态管理模块中没有小于该消息对应偏移量的待消费或者消费中的消息时,设置消费进度为该消息对应的偏移量。

进一步地,该重试请求处理模块进一步执行如下步骤:

若接收到的消息重试请求中包括重投时间,于该消费状态管理模块中设置对应重试消息为待消费状态并记录重投时间;

接收消息订阅端再次发起的订阅消息请求;

如果重投消息重投时间已到,则从该消费状态管理模块获取状态为待消费的待重投消息,发送给消息订阅端,否则返回继续等待。

进一步地,该消息订阅处理装置还包括:

故障检测模块,用于检测到消息订阅端发生故障;

故障处理模块,用于将故障的消息订阅端中没有签收的消息的消费状态由消费中改为待消费。

为达到上述目的,本发明还提供一种消息订阅处理系统,包括:

消息订阅处理装置,应用于消息服务器端,用于接收消息订阅端发送的订阅消息的请求,根据请求中的主题和队列信息查询消费进度,于消息状态管理模块中获取消费进度对应偏移量之后的待消费的消息,并将获取的消息发送给消息订阅端,根据消息订阅端的反馈信息修改消息的消费状态及消费进度;

消息订阅端,用于从该消息订阅处理装置接收消息,对消息进行相关业务处理,并向消息订阅处理装置发送反馈信息。

为达到上述目的,本发明还提供一种消息订阅处理方法,包括如下步骤:

步骤一,接收消息订阅端发送的订阅消息的请求;

步骤二,根据请求中的主题和队列信息查询消费进度;

步骤三,于消息状态管理模块中获取消费进度对应偏移量之后的待消费的消息;

步骤四,将获取的消息发送给消息订阅端;

步骤五,接收消息订阅端的反馈信息,并根据消息订阅端的反馈信息修改消息的消费状态及消费进度。

进一步地,于步骤四之前,还包括如下步骤:

若获取的待消费消息个数小于订阅请求中指定的消息个数,则从消息存储模块中继续获取消息,否则直接进入步骤四。

进一步地,步骤五进一步包括:

若接收到的消息订阅端的反馈信息为重试请求,则于消费状态管理模块中将对应消息的消息状态由消费中改为待消费,处理结束;

若接收到的消息订阅端的反馈信息为签收请求,则在消费状态管理模块中删除对应消息;

若该消费状态管理模块中没有小于该消息对应偏移量的待消费或者消费中的消息,设置消费进度为该消息对应的偏移量,处理结束。

与现有技术相比,本发明一种消息订阅处理装置、系统及方法,通过利用消息存储模块存储具体的消息、消息配置管理模块管理被订阅主题和订阅消息的消息订阅端的配置信息、消费状态管理模块存储消费状态为待消费或消费中的消息以及消费进度管理模块管理订阅端消费订阅主题的进度信息,于接收订阅端发送的订阅消息的请求时,根据请求中的主题和队列信息查询消费进度,于消息状态管理模块中获取消费进度对应偏移量之后的待消费的消息,并将获取的消息发送给消息订阅端,根据消息订阅端的反馈信息修改消息的消费状态及消费进度,实现了高可靠的分布式消息订阅的目的,并解决了现有技术中订阅端异常造成的消费消息丢失、跳跃消费消息以及定时重投消息等问题。

附图说明

图1为本发明一种消息订阅处理装置的系统架构图;

图2为本发明一种消息订阅处理系统的系统架构图;

图3为本发明具体实施例中消息订阅端21的细部结构图;

图4为本发明一种消息订阅处理方法的步骤流程图;

图5为本发明实施例一的步骤流程图;

图6为本发明实施例二的步骤流程图;

图7为本发明实施例三的步骤流程图。

具体实施方式

以下通过特定的具体实例并结合附图说明本发明的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本发明的其它优点与功效。本发明亦可通过其它不同的具体实例加以施行或应用,本说明书中的各项细节亦可基于不同观点与应用,在不背离本发明的精神下进行各种修饰与变更。

图1为本发明一种消息订阅处理装置的系统架构图。如图1所示,本发明一种消息订阅处理装置,应用于消息服务器端,包括:消息存储模块101、消息配置管理模块102、消费状态管理模块103、消费进度管理模块104、订阅请求接收模块105、消费进度查询模块106、待消费消息获取模块107、消息发送模块108以及反馈处理模块109。

其中,消息存储模块101,用于存储具体的消息,并向其他模块提供消息存取服务。

消息配置管理模块102,用于管理被订阅主题和订阅消息的消息订阅端的配置信息。一个主题可以有多个队列(或分区),这些队列可以分布到多个不同的消息服务器上。

消费状态管理模块103,用于存储消费状态为待消费或消费中的消息,并记录当前消息服务器上所有被订阅主题里面所属队列中的所有消息被某个订阅者的消费情况,并根据消息订阅端对消息的消费和签收情况对被订阅者主题中的消息的消费情况进行管理。

消费进度管理模块104,用于管理某个订阅端消费某个主题的进度信息。主题队列中的消息从队头开始消费到队尾,中间允许跳跃消费,第一个跳跃点前面被消费过的消息的在队列中的偏移量称之为该主题的某个队列被订阅端消费的消费进度。

订阅请求接收模块105,用于接收消息订阅端发送的订阅消息的请求。具体地,该请求中包括订阅主题名称、主题队列编号和订阅消息的个数等信息。

消费进度查询模块106,根据该请求中的主题和队列信息于消费进度管理模块104中查询消费进度。具体地,消费进度管理模块管理着某个订阅端消费某个主题的进度信息,消费进度指的是某个订阅组消费某个主题中某个队列中消息的偏移量,在这个偏移量之前的消息(包括当前偏移量对应的消息)全部都被该订阅组消费过。

待消费消息获取模块107,于消息状态管理模块103中获取消费进度对应偏移量之后的待消费的消息。具体地,消息状态管理模块缓存那些正在被消费或即将被消费的消息,当消息被消费后会从消息状态管理模块中删除,所以通常情况下消息状态管理模块中的消息在队列中对应的偏移量都会大于当前的消费进度。

消息发送模块108,用于将获取的消息发送给消息订阅端。

反馈处理模块109,用于接收消息订阅端的反馈信息,并根据消息订阅端的反馈信息修改消息的消费状态及消费进度。

具体地,反馈处理模块109进一步包括:

重试请求处理模块,若接收到的消息订阅端的反馈信息为重试请求,则于消费状态管理模块103中将对应消息的消息状态由消费中改为待消费,处理结束。具体地,在消费状态管理模块中将需要重试消费的消息的消费状态由消费中改为待消费,保证了订阅组下一次拉取消息时可以重新获取到该消息。

签收请求处理模块,若接收到的消息订阅端的反馈信息为签收请求,则在消费状态管理模块103中删除对应消息,并于消费状态管理模块103中没有小于该消息对应偏移量的待消费或者消费中的消息时,设置消费进度为该消息对应的偏移量,处理结束。具体地说,签收的消息在队列中对应的偏移量之前可能还有其他消息没有被签收,这个时候不可以更新消费进度,只有当签收的消息对应的偏移量之前的所有消息都已经被签收了,才可以更新订阅组在当前主题当前队列中的消费进度。

较佳地,本发明之消息订阅处理装置还包括判断处理模块110,用于判断待消费消息获取模块107获取的待消费消息个数是否小于订阅请求中指定的消息个数,若判断结果为获取的待消费消息个数小于订阅请求中指定的消息个数,则从消息存储模块101中继续获取消息,再进入消息发送模块108。也就是说,若待消费消息获取模块107获取的待消费消息个数小于订阅请求中指定的消息个数,即,消息状态管理模块中缓存的待消费的消息不足够时,则需要从消息存储模块101中继续获取消息,从消息存储模块101中继续获取消息的步骤如下:

从消息状态管理模块103中获取对应主题对应队列中缓存消息的最大偏移量,具体地,消息状态管理模块103记录了需要从消息存储模块101中获取消息的起始偏移量信息,这个起始偏移量信息在消息状态管理模块103中对应所有缓存消息在队列中对应的最大偏移量;

从消息存储模块101中取出该偏移量之后的若干条消息,将该些消息的标识(包括主题名称、主题队列编号、消息在队列中对应的偏移量和订阅者的连接信息等)缓存到消息状态管理模块中,并标记这些消息的消费状态为消费中。

在本发明中,当消息订阅端进行消息业务处理后不签收消息进行消息重试并设定重投时间时,本发明可以实现定时重投,较佳地,重试请求处理模块还可执行如下步骤:

若接收到的消息重试请求中包括重投时间,于消费状态管理模块中设置对应重试消息为待消费状态并记录重投时间;

接收消息订阅端再次发起的订阅消息请求;

如果重投消息重投时间已到,则从消费状态管理模块获取状态为待消费的待重投消息,发送给消息订阅端,否则返回继续等待。

这里需说明的是,对于那些不需要进行重投的消息,于消费状态管理模块中将重投时间设置为消息生成的时间,表明不需要等待消息就可以被获取。

另外,由于消息订阅端在消费消息过程中有可能会产生故障,因此,较佳地,本发明之消息订阅处理装置还可包括:

故障检测模块,用于检测到消息订阅端发生故障;

在本发明具体实施例中,故障检测模块是通过接收消息订阅端发送的心跳信号检测消息订阅端是否发生故障的,也就是说或,消息订阅端故障后,消息服务器与消息订阅端的长连接会断开。消息订阅端每隔一段时间向消息服务器发送心跳,告诉消息服务器订阅端还活着,消息服务器上会保存消息订阅端的连接信息,如果超过一定时间未接收到消息订阅端发送的心跳信号,则消息服务器会认为消息订阅端故障。

故障处理模块,用于将故障的消息订阅端中没有签收的消息的消费状态由消费中改为待消费。这样新的消息订阅端会重新消费到上述未签收的消息。

具体地,新的消息订阅端将优先获取到消费状态管理模块中处于待消费状态的消息,并重新进行消费和签收。

图2为本发明一种消息订阅处理系统的系统架构图。如图2所示,本发明一种消息订阅处理系统,包括:

消息订阅处理装置20,应用于消息服务器端,用于接收消息订阅端发送的订阅消息的请求,根据请求中的主题和队列信息查询消费进度,于消息状态管理模块中获取消费进度对应偏移量之后的待消费的消息,并将获取的消息发送给消息订阅端,根据消息订阅端的反馈信息修改消息的消费状态及消费进度。由于消息订阅处理装置20已于装置项中予以详述,在此不予赘述;

消息订阅端21,用于从消息订阅处理装置接收消息,对消息进行相关业务处理,并向消息订阅处理装置发送反馈信息,该反馈信息包括签收请求以及消息重试请求。

图3为本发明具体实施例中消息订阅端21的细部结构图。如图3所示,该消息订阅端21包括包括消息接收模块210、消息处理模块211和消息签收模块212。

其中,消息接收模块210,用于从消息订阅处理装置20接收消息;消息处理模块211,用于对接收到的消息进行相关业务处理;消息签收模块212,用于用于消息业务处理完毕之后的消息确认或消息重试操作,向消息订阅处理装置20反馈签收请求或消息重试请求,如果消息被确认,则消息订阅处理装置20认为该条消息已经被订阅者消费过,消息订阅端不需要再获取该条消息;如果消息被重试,则消息订阅处理装置20认为该条消息还没有被消费过,消息订阅端需要重新获取该条消息,较佳地,为提升签收和重试性能,消息签收模块212可以批量发送签收或重试请求。

图4为本发明一种消息订阅处理方法的步骤流程图。如图4所示,本发明一种消息订阅处理方法,包括如下步骤:

步骤401,接收消息订阅端发送的订阅消息的请求;

具体地,该请求中包括订阅主题名称、主题队列编号和订阅消息的个数等信息。

步骤402,根据请求中的主题和队列信息查询消费进度。具体地,本发明中,消费进度管理模块管理着某个订阅者消费某个主题的进度信息,消费进度指的是某个订阅组消费某个主题中某个队列中消息的偏移量,在这个偏移量之前的消息(包括当前偏移量对应的消息)全部都被该订阅组消费过。

步骤403,于消息状态管理模块中获取消费进度对应偏移量之后的待消费的消息;

具体地,消息状态管理模块缓存那些正在被消费或即将被消费的消息,当消息被消费后会从消息状态管理模块中删除,所以通常情况下消息状态管理模块中的消息在队列中对应的偏移量都会大于当前的消费进度。

步骤404,将获取的消息发送给消息订阅端。

步骤405,接收消息订阅端的反馈信息,并根据消息订阅端的反馈信息修改消息的消费状态及消费进度。

具体地,步骤405进一步包括:

步骤5.1,若接收到的消息订阅端的反馈信息为重试请求,则于消费状态管理模块中将对应消息的消息状态由消费中改为待消费,处理结束。

具体地,于步骤5.1中,在消费状态管理模块中将需要重试消费的消息的消费状态由消费中改为待消费,保证了订阅组下一次拉取消息时可以重新获取到该消息。

步骤5.2,若接收到的消息订阅端的反馈信息为签收请求,则在消费状态管理模块中删除对应消息;

步骤5.3,若消费状态管理模块中没有小于该消息对应偏移量的待消费或者消费中的消息,设置消费进度为该消息对应的偏移量,处理结束。

具体地说,签收的消息在队列中对应的偏移量之前可能还有其他消息没有被签收,这个时候不可以更新消费进度,只有当签收的消息对应的偏移量之前的所有消息都已经被签收了,才可以更新订阅组在当前主题当前队列中的消费进度。

较佳地,于步骤404之前,本发明还包括如下步骤:

若获取的待消费消息个数小于订阅请求中指定的消息个数,则从消息存储模块中继续获取消息,否则直接进入步骤404。

具体地,若获取的待消费消息个数小于订阅请求中指定的消息个数,也就是说消息状态管理模块中缓存的待消费的消息不足够时,需要从消息存储模块中继续获取消息,从消息存储模块中继续获取消息的步骤进一步包括如下步骤:

步骤S11,从消息状态管理模块中获取对应主题对应队列中缓存消息的最大偏移量。

具体地,消息状态管理模块记录了需要从消息存储模块中获取消息的起始偏移量信息,这个起始偏移量信息在消息状态管理模块中对应所有缓存消息在队列中对应的最大偏移量。

步骤S12,从消息存储模块中取出该偏移量之后的若干条消息,缓存到消息状态管理模块中,并标记这些消息的消费状态为消费中。这里需说明的是,假如订阅请求中指定的消息个数为N,消息状态管理模块中缓存的待消费的消息个数为M,则从消息存储模块中取出该偏移量之后的N-M条消息。

在本发明中,当消息订阅端进行消息业务处理后不签收消息进行消息重试并设定重投时间时,本发明可以实现定时重投,较佳地,于步骤405中,还包括如下步骤:

步骤S21,若接收到的消息重试请求中包括重投时间,于消费状态管理模块中设置对应重试消息为待消费状态并记录重投时间;

步骤S22,接收消息订阅端再次发起的订阅消息请求;

步骤S23,如果重投消息重投时间已到,则从消费状态管理模块获取状态为待消费的待重投消息,发送给消息订阅端,否则返回步骤S23继续等待。

也就是说,这里当消息服务器从消费状态管理模块中获取待消费消息时,增加了判断重投时间是否已到的判断条件,如果对应的待消费消息没有达到重投时间,则该消息会一直处于待消费状态。

这里需说明的是,对于那些不需要进行重投的消息,消费状态管理模块中将重投时间设置为消息生成的时间,表明不需要等待消息就可以被获取。

由于消息订阅端在消费消息过程中有可能会产生故障,因此,较佳地,本发明之消息订阅处理方法还包括如下步骤:

步骤S31,检测到消息订阅端发生故障;

在本发明具体实施例中,是通过接收消息订阅端发送的心跳信号检测消息订阅端是否发生故障的,也就是说或,消息订阅端故障后,消息服务器与消息订阅端的长连接会断开。消息订阅端每隔一段时间向消息服务器发送心跳,告诉消息服务器订阅端还活着,消息服务器上会保存消息订阅端的连接信息,如果超过一定时间未接收到消息订阅端发送的心跳信号,则消息服务器会认为消息订阅端故障。

步骤S32,将故障的消息订阅端中没有签收的消息的消费状态由消费中改为待消费。这样新的消息订阅端会重新消费到上述未签收的消息。

具体地,新的消息订阅端将优先获取到消费状态管理模块中处于待消费状态的消息,并重新进行消费和签收。

以下将配合具体实施例进一步说明本发明之消息订阅处理方法,在以下各实施例中,消息订阅端也称之为消息订阅者,消息订阅处理装置也称之为消息服务器。

实施例一

参见图5,本实施例提供了一种消息订阅处理方法,在该实施例中,

501,消息订阅者(消息订阅端)向消息服务器(消息订阅处理装置)发送订阅消息的请求;

具体地,请求中包括订阅主题名称、主题队列编号和订阅消息的个数等信息。

502,消息服务器根据请求中的主题和队列信息查询消费进度;

具体地,消费进度指的是某个订阅组消费某个主题中某个队列中消息的偏移量。在这个偏移量之前的消息(包括当前偏移量对应的消息)全部都被该订阅组消费过。

503,消息服务器从消息状态管理模块中获取消费进度对应偏移量之后的待消费的消息;

具体地,消息状态管理模块缓存那些正在被消费或即将被消费的消息,当消息被消费后会从消息状态管理模块中删除,所以通常情况下消息状态管理模块中的消息在队列中对应的偏移量都会大于当前的消费进度。

504,判断待消费消息个数,如果获取的待消费消息个数小于订阅请求中指定的消息个数,进入下一步,否则直接进入507;

也就是说,消息状态管理模块中缓存的待消费的消息不足够,需要从消息存储模块中继续获取消息。

505,消息服务器从消息状态管理模块中获取对应主题对应队列中缓存消息的最大偏移量;

具体地,消息状态管理模块记录了需要从消息存储模块中获取消息的起始偏移量信息,这个起始偏移量信息在消息状态管理模块中对应所有缓存消息在队列中对应的最大偏移量。

506,消息服务器从消息存储模块中取出该偏移量之后的若干条消息,缓存到消息状态管理模块中,并标记这些消息的消费状态为消费中;

507,消息服务器将获取的消息发送给消息订阅者;

508,消息订阅者的消息处理模块对获取到的消息进行消息业务处理;

509,发送签收或重试消息请求给消息服务器;

510,消息服务器收到签收或重试请求;

511,如果是重试请求,消息服务器在消费状态管理模块中将对应消息的消息状态由消费中改为待消费,处理结束。

具体地,在消费状态管理模块中将需要重试消费的消息的消费状态由消费中改为了待消费,保证了订阅组下一次拉取消息时可以重新获取到该消息。

512,如果是签收请求,消息服务器在消费状态管理模块中删除对应消息;

513,如果消费状态管理模块中没有小于该消息对应偏移量的待消费或者消费中的消息,设置消费进度为该消息对应的偏移量,处理结束。

具体地,签收的消息在队列中对应的偏移量之前可能还有其他消息没有被签收,这个时候不可以更新消费进度,只有当签收的消息对应的偏移量之前的所有消息都已经被签收过了,才可以更新订阅组在当前主题当前队列中的消费进度。

实施例二

参见图6,本实施例提供了订阅者消费消息过程中产生故障后的消息订阅方法:

601,消息订阅者消费消息过程中故障;

602,消息服务器检测到订阅者发生故障;

具体地,订阅者故障后,消息服务器与订阅者的长连接会断开。订阅者每隔一段时间向消息服务器发送心跳,告诉消息服务器订阅者还活着。消息服务器上回保存订阅者的连接信息,如果订阅者超过一定时间没有发送心跳给消费服务器,则会认为订阅端故障。

603,消息服务器将故障订阅者中没有签收的消息的消费状态由消费中改为待消费;

604,新的订阅者重新消费到上述未签收的消息;

也就是说,按照实施例一中的方法,新的订阅端将优先获取到消息订阅处理装置的消费状态管理模块中处于待消费状态的消息,并重新进行消费和签收。

使用实施例一和实施例二的技术方案可以很好的解决订阅者故障造成的消费中消息丢失的问题。

实施例三

参见图7,本实施例提供了可以实现消息定时重投的消息订阅处理方法:

701,订阅者进行消息业务处理后不签收消息进行消息重试并设定重投时间;

702,消息服务器收到消息重试请求;

703,消息服务器在消费状态管理模块中设置对应重试消息为待消费状态并记录重投时间;

704,订阅者再次发起订阅消息请求;

705,如果重投消息重投时间已到,消息服务器从消费状态管理模块获取状态为待消费的待重投消息,发送给订阅者,否则进去704继续等待。

本实施例中,与实施例一方案不同的是当消息服务器从消费状态管理模块中获取待消费消息时,增加了判断重投时间是否已到。如果对应的待消费消息没有达到重投时间,则该消息会一直处于待消费状态。

特别的,对于那些不需要进行重投的消息,消费状态管理模块中将重投时间设置为消息生成的时间,表明不需要等待消息就可以被消息订阅处理装置获取。

综上所述,本发明一种消息订阅处理装置、系统及方法,通过利用消息存储模块存储具体的消息、消息配置管理模块管理被订阅主题和订阅消息的消息订阅端的配置信息、消费状态管理模块存储消费状态为待消费或消费中的消息以及消费进度管理模块管理订阅端消费订阅主题的进度信息,于接收订阅端发送的订阅消息的请求时,根据请求中的主题和队列信息查询消费进度,于消息状态管理模块中获取消费进度对应偏移量之后的待消费的消息,并将获取的消息发送给消息订阅端,根据消息订阅端的反馈信息修改消息的消费状态及消费进度,实现了高可靠的分布式消息订阅的目的,并解决了现有技术中订阅端异常造成的消费消息丢失、跳跃消费消息以及定时重投消息等问题。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何本领域技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰与改变。因此,本发明的权利保护范围,应如权利要求书所列。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1