CN106657349A - 一种消息订阅处理装置、系统及方法 - Google Patents

一种消息订阅处理装置、系统及方法 Download PDF

Info

Publication number
CN106657349A
CN106657349A CN201611241723.6A CN201611241723A CN106657349A CN 106657349 A CN106657349 A CN 106657349A CN 201611241723 A CN201611241723 A CN 201611241723A CN 106657349 A CN106657349 A CN 106657349A
Authority
CN
China
Prior art keywords
message
consumption
subscribing
module
consumed
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
CN201611241723.6A
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.)
Shanghai Ideal Information Industry Group Co Ltd
Original Assignee
Shanghai Ideal Information Industry Group 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 Shanghai Ideal Information Industry Group Co Ltd filed Critical Shanghai Ideal Information Industry Group Co Ltd
Priority to CN201611241723.6A priority Critical patent/CN106657349A/zh
Publication of CN106657349A publication Critical patent/CN106657349A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/55Push-based network services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/566Grouping or aggregating service requests, e.g. for unified processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了一种消息订阅处理装置、系统及方法,该方法包括如下步骤:接收消息订阅端发送的订阅消息的请求;根据请求中的主题和队列信息查询消费进度;于消息状态管理模块中获取消费进度对应偏移量之后的待消费的消息;将获取的消息发送给消息订阅端;接收消息订阅端的反馈信息,并根据消息订阅端的反馈信息修改消息的消费状态及消费进度,通过本发明,可解决现有技术存在的订阅者异常造成的消费消息丢失、跳跃消费消息和定时重投消息等问题。

Description

一种消息订阅处理装置、系统及方法
技术领域
本发明关于一种互联网消息交互技术领域,特别是涉及一种高可靠的消息订阅处理装置、系统及方法。
背景技术
企业和政府部门的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继续等待。
本实施例中,与实施例一方案不同的是当消息服务器从消费状态管理模块中获取待消费消息时,增加了判断重投时间是否已到。如果对应的待消费消息没有达到重投时间,则该消息会一直处于待消费状态。
特别的,对于那些不需要进行重投的消息,消费状态管理模块中将重投时间设置为消息生成的时间,表明不需要等待消息就可以被消息订阅处理装置获取。
综上所述,本发明一种消息订阅处理装置、系统及方法,通过利用消息存储模块存储具体的消息、消息配置管理模块管理被订阅主题和订阅消息的消息订阅端的配置信息、消费状态管理模块存储消费状态为待消费或消费中的消息以及消费进度管理模块管理订阅端消费订阅主题的进度信息,于接收订阅端发送的订阅消息的请求时,根据请求中的主题和队列信息查询消费进度,于消息状态管理模块中获取消费进度对应偏移量之后的待消费的消息,并将获取的消息发送给消息订阅端,根据消息订阅端的反馈信息修改消息的消费状态及消费进度,实现了高可靠的分布式消息订阅的目的,并解决了现有技术中订阅端异常造成的消费消息丢失、跳跃消费消息以及定时重投消息等问题。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何本领域技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰与改变。因此,本发明的权利保护范围,应如权利要求书所列。

Claims (10)

1.一种消息订阅处理装置,应用于消息服务器,包括:
消息存储模块,用于存储具体的消息,并向其他模块提供消息存取服务;
消息配置管理模块,用于管理被订阅主题和订阅消息的消息订阅端的配置信息;
消费状态管理模块,用于存储消费状态为待消费或消费中的消息,并记录当前消息服务器上所有被订阅主题里面所属队列中的所有消息被某个订阅端的消费情况,根据订阅端对消息的消费和签收情况对被订阅主题中的消息的消费情况进行管理;
消费进度管理模块,用于管理某个订阅端消费某个主题的进度信息;
订阅请求接收模块,用于接收消息订阅端发送的订阅消息的请求;
消费进度查询模块,根据该请求中的主题和队列信息于所述消费进度管理模块中查询消费进度;
待消费消息获取模块,于该消息状态管理模块中获取消费进度对应偏移量之后的待消费的消息;
消息发送模块,用于将获取的消息发送给消息订阅端。
反馈处理模块,用于接收消息订阅端的反馈信息,并根据消息订阅端的反馈信息于修改消息的消费状态及消费进度。
2.如权利要求1所述的一种消息订阅处理装置,其特征在于:该消息订阅处理装置还包括判断处理模块,该判断处理模块用于判断该待消费消息获取模块获取的待消费消息个数是否小于订阅请求中指定的消息个数,若判断结果为获取的待消费消息个数小于订阅请求中指定的消息个数,则从该消息存储模块中继续获取消息后,再启动该消息发送模块。
3.如权利要求2所述的一种消息订阅处理装置,其特征在于,从该消息存储模块中继续获取消息的步骤如下:
从该消息状态管理模块中获取对应主题对应队列中缓存消息的最大偏移量;
从该消息存储模块中取出该偏移量之后的若干条消息,将该些消息缓存到消息状态管理模块中,并标记该些消息的消费状态为消费中。
4.如权利要求2所述的一种消息订阅处理装置,其特征在于,该反馈处理模块进一步包括:
重试请求处理模块,若接收到的消息订阅端的反馈信息为重试请求,则于该消费状态管理模块中将对应消息的消息状态由消费中改为待消费,处理结束;
签收请求处理模块,若接收到的消息订阅端的反馈信息为签收请求,则于该消费状态管理模块中删除对应消息,并于判断该消费状态管理模块中没有小于该消息对应偏移量的待消费或者消费中的消息时,设置消费进度为该消息对应的偏移量。
5.如权利要求4所述的一种消息订阅处理装置,其特征在于,该重试请求处理模块进一步执行如下步骤:
若接收到的消息重试请求中包括重投时间,于该消费状态管理模块中设置对应重试消息为待消费状态并记录重投时间;
接收消息订阅端再次发起的订阅消息请求;
如果重投时间已到,则从该消费状态管理模块获取状态为待消费的待重投消息,发送给消息订阅端,否则返回继续等待。
6.如权利要求2所述的一种消息订阅处理装置,其特征在于,该消息订阅处理装置还包括:
故障检测模块,用于检测到消息订阅端发生故障;
故障处理模块,用于将故障的消息订阅端中没有签收的消息的消费状态由消费中改为待消费。
7.一种消息订阅处理系统,包括:
消息订阅处理装置,应用于消息服务器端,用于接收消息订阅端发送的订阅消息的请求,根据请求中的主题和队列信息查询消费进度,于消息状态管理模块中获取消费进度对应偏移量之后的待消费的消息,并将获取的消息发送给消息订阅端,根据消息订阅端的反馈信息修改消息的消费状态及消费进度;
消息订阅端,用于从该消息订阅处理装置接收消息,对消息进行相关业务处理,并向消息订阅处理装置发送反馈信息。
8.一种消息订阅处理方法,包括如下步骤:
步骤一,接收消息订阅端发送的订阅消息的请求;
步骤二,根据请求中的主题和队列信息查询消费进度;
步骤三,于消息状态管理模块中获取消费进度对应偏移量之后的待消费的消息;
步骤四,将获取的消息发送给消息订阅端;
步骤五,接收消息订阅端的反馈信息,并根据消息订阅端的反馈信息修改消息的消费状态及消费进度。
9.如权利要求8所述的一种消息订阅处理方法,其特征在于,于步骤四之前,还包括如下步骤:
若获取的待消费消息个数小于订阅请求中指定的消息个数,则从消息存储模块中继续获取消息,否则直接进入步骤四。
10.如权利要求8所述的一种消息订阅处理方法,其特征在于,步骤五进一步包括:
若接收到的消息订阅端的反馈信息为重试请求,则于消费状态管理模块中将对应消息的消息状态由消费中改为待消费,处理结束;
若接收到的消息订阅端的反馈信息为签收请求,则在消费状态管理模块中删除对应消息;
若该消费状态管理模块中没有小于该消息对应偏移量的待消费或者消费中的消息,设置消费进度为该消息对应的偏移量,处理结束。
CN201611241723.6A 2016-12-29 2016-12-29 一种消息订阅处理装置、系统及方法 Pending CN106657349A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611241723.6A CN106657349A (zh) 2016-12-29 2016-12-29 一种消息订阅处理装置、系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611241723.6A CN106657349A (zh) 2016-12-29 2016-12-29 一种消息订阅处理装置、系统及方法

Publications (1)

Publication Number Publication Date
CN106657349A true CN106657349A (zh) 2017-05-10

Family

ID=58835403

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611241723.6A Pending CN106657349A (zh) 2016-12-29 2016-12-29 一种消息订阅处理装置、系统及方法

Country Status (1)

Country Link
CN (1) CN106657349A (zh)

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108509299A (zh) * 2018-03-29 2018-09-07 努比亚技术有限公司 消息处理方法、设备及计算机可读存储介质
CN108595483A (zh) * 2018-03-13 2018-09-28 腾讯科技(深圳)有限公司 数据处理方法及相关装置
CN108683612A (zh) * 2018-05-22 2018-10-19 阿里巴巴集团控股有限公司 一种消息获取方法和装置
CN109255091A (zh) * 2018-08-23 2019-01-22 北京城市网邻信息技术有限公司 共享主题消息的方法、装置、设备及计算机可读存储介质
CN109412821A (zh) * 2017-08-16 2019-03-01 阿里巴巴集团控股有限公司 消息处理方法和装置以及电子设备
CN109582470A (zh) * 2017-09-28 2019-04-05 北京国双科技有限公司 一种数据处理方法及数据处理装置
CN109976919A (zh) * 2017-12-28 2019-07-05 北京京东尚科信息技术有限公司 一种消息请求的传输方法和装置
CN110300067A (zh) * 2019-06-26 2019-10-01 深圳前海微众银行股份有限公司 队列调整方法、装置、设备及计算机可读存储介质
CN110535787A (zh) * 2019-07-25 2019-12-03 北京奇艺世纪科技有限公司 消息消费方法、装置及可读存储介质
CN110875935A (zh) * 2018-08-30 2020-03-10 阿里巴巴集团控股有限公司 消息发布、处理、订阅方法、装置及系统
CN110912949A (zh) * 2018-09-14 2020-03-24 北京京东尚科信息技术有限公司 位点提交方法和装置
CN111949418A (zh) * 2020-07-10 2020-11-17 北京思特奇信息技术股份有限公司 一种订阅消息处理方法和装置
CN112000489A (zh) * 2020-07-29 2020-11-27 新华三大数据技术有限公司 一种Kafka数据处理的方法和服务器
CN112954007A (zh) * 2021-01-26 2021-06-11 深圳前海微众银行股份有限公司 消息传输方法、装置、设备及存储介质
CN113452603A (zh) * 2021-06-28 2021-09-28 青岛海尔科技有限公司 一种数据传输方法及相关装置
CN113641515A (zh) * 2021-08-02 2021-11-12 北京达佳互联信息技术有限公司 一种消息处理方法、装置、系统、电子设备和存储介质
CN115150471A (zh) * 2022-06-27 2022-10-04 北京百度网讯科技有限公司 数据处理方法、装置、设备、存储介质及程序产品

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104092767A (zh) * 2014-07-21 2014-10-08 北京邮电大学 一种增加消息队列模型的发布/订阅系统及其工作方法
CN104243611A (zh) * 2014-09-30 2014-12-24 浪潮软件股份有限公司 一种基于分发思想的消息服务中间件系统
CN104754036A (zh) * 2015-03-06 2015-07-01 合一信息技术(北京)有限公司 一种基于kafka的消息处理系统及处理方法
CN104811459A (zh) * 2014-01-23 2015-07-29 阿里巴巴集团控股有限公司 用于消息服务的处理方法、装置及系统、消息服务系统
CN104899277A (zh) * 2015-05-29 2015-09-09 北京京东尚科信息技术有限公司 一种消息分发方法和装置
CN105141687A (zh) * 2015-08-19 2015-12-09 焦点科技股份有限公司 一种生产消息的方法
CN105471722A (zh) * 2015-12-31 2016-04-06 深圳前海微众银行股份有限公司 消息处理方法和装置
CN106202324A (zh) * 2016-06-30 2016-12-07 北京奇虎科技有限公司 一种实时计算平台的数据处理方法和装置
US20160357778A1 (en) * 2015-06-02 2016-12-08 David MacKenzie System for handling event messages for file collaboration
CN106230922A (zh) * 2016-07-28 2016-12-14 上海斐讯数据通信技术有限公司 一种消息订阅方法、消息生产单元及消息接收单元

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104811459A (zh) * 2014-01-23 2015-07-29 阿里巴巴集团控股有限公司 用于消息服务的处理方法、装置及系统、消息服务系统
CN104092767A (zh) * 2014-07-21 2014-10-08 北京邮电大学 一种增加消息队列模型的发布/订阅系统及其工作方法
CN104243611A (zh) * 2014-09-30 2014-12-24 浪潮软件股份有限公司 一种基于分发思想的消息服务中间件系统
CN104754036A (zh) * 2015-03-06 2015-07-01 合一信息技术(北京)有限公司 一种基于kafka的消息处理系统及处理方法
CN104899277A (zh) * 2015-05-29 2015-09-09 北京京东尚科信息技术有限公司 一种消息分发方法和装置
US20160357778A1 (en) * 2015-06-02 2016-12-08 David MacKenzie System for handling event messages for file collaboration
CN105141687A (zh) * 2015-08-19 2015-12-09 焦点科技股份有限公司 一种生产消息的方法
CN105471722A (zh) * 2015-12-31 2016-04-06 深圳前海微众银行股份有限公司 消息处理方法和装置
CN106202324A (zh) * 2016-06-30 2016-12-07 北京奇虎科技有限公司 一种实时计算平台的数据处理方法和装置
CN106230922A (zh) * 2016-07-28 2016-12-14 上海斐讯数据通信技术有限公司 一种消息订阅方法、消息生产单元及消息接收单元

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
百度账号651825884: "《百度文库》", 5 December 2016 *

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109412821A (zh) * 2017-08-16 2019-03-01 阿里巴巴集团控股有限公司 消息处理方法和装置以及电子设备
CN109412821B (zh) * 2017-08-16 2021-09-10 阿里巴巴集团控股有限公司 消息处理方法和装置以及电子设备
CN109582470A (zh) * 2017-09-28 2019-04-05 北京国双科技有限公司 一种数据处理方法及数据处理装置
CN109976919A (zh) * 2017-12-28 2019-07-05 北京京东尚科信息技术有限公司 一种消息请求的传输方法和装置
CN108595483B (zh) * 2018-03-13 2020-11-24 腾讯科技(深圳)有限公司 数据处理方法及相关装置
CN108595483A (zh) * 2018-03-13 2018-09-28 腾讯科技(深圳)有限公司 数据处理方法及相关装置
CN108509299A (zh) * 2018-03-29 2018-09-07 努比亚技术有限公司 消息处理方法、设备及计算机可读存储介质
CN108509299B (zh) * 2018-03-29 2022-08-12 广西电网有限责任公司 消息处理方法、设备及计算机可读存储介质
CN108683612A (zh) * 2018-05-22 2018-10-19 阿里巴巴集团控股有限公司 一种消息获取方法和装置
CN109255091A (zh) * 2018-08-23 2019-01-22 北京城市网邻信息技术有限公司 共享主题消息的方法、装置、设备及计算机可读存储介质
CN110875935A (zh) * 2018-08-30 2020-03-10 阿里巴巴集团控股有限公司 消息发布、处理、订阅方法、装置及系统
CN110912949B (zh) * 2018-09-14 2022-11-08 北京京东尚科信息技术有限公司 位点提交方法和装置
CN110912949A (zh) * 2018-09-14 2020-03-24 北京京东尚科信息技术有限公司 位点提交方法和装置
CN110300067A (zh) * 2019-06-26 2019-10-01 深圳前海微众银行股份有限公司 队列调整方法、装置、设备及计算机可读存储介质
CN110300067B (zh) * 2019-06-26 2022-02-08 深圳前海微众银行股份有限公司 队列调整方法、装置、设备及计算机可读存储介质
CN110535787A (zh) * 2019-07-25 2019-12-03 北京奇艺世纪科技有限公司 消息消费方法、装置及可读存储介质
CN111949418A (zh) * 2020-07-10 2020-11-17 北京思特奇信息技术股份有限公司 一种订阅消息处理方法和装置
CN111949418B (zh) * 2020-07-10 2023-10-24 北京思特奇信息技术股份有限公司 一种订阅消息处理方法和装置
CN112000489A (zh) * 2020-07-29 2020-11-27 新华三大数据技术有限公司 一种Kafka数据处理的方法和服务器
CN112954007A (zh) * 2021-01-26 2021-06-11 深圳前海微众银行股份有限公司 消息传输方法、装置、设备及存储介质
CN113452603A (zh) * 2021-06-28 2021-09-28 青岛海尔科技有限公司 一种数据传输方法及相关装置
CN113641515A (zh) * 2021-08-02 2021-11-12 北京达佳互联信息技术有限公司 一种消息处理方法、装置、系统、电子设备和存储介质
CN115150471A (zh) * 2022-06-27 2022-10-04 北京百度网讯科技有限公司 数据处理方法、装置、设备、存储介质及程序产品
CN115150471B (zh) * 2022-06-27 2024-03-29 北京百度网讯科技有限公司 数据处理方法、装置、设备、存储介质及程序产品

Similar Documents

Publication Publication Date Title
CN106657349A (zh) 一种消息订阅处理装置、系统及方法
EP2321908B1 (en) Method and system for message processing
CN104618221B (zh) 一种去中心化的消息服务系统
CN106533845A (zh) 一种长连接状态监控方法和装置
CN103747091A (zh) 一种嵌入式设备的分布式数据同步系统及方法
CN104796326A (zh) 一种企业im的群组创建方法、数据加载方法及装置
CN103780679A (zh) 基于http协议的长延时远程调用方法
CN106506490A (zh) 一种分布式计算控制方法以及分布式计算系统
CN107707370B (zh) 群组通信方法、服务器、终端及计算机存储介质
CN103562890A (zh) 在发布/订阅消息系统中管理消息订阅
CN101090371A (zh) 一种即时通讯系统中用户信息管理的方法及系统
CN103516918B (zh) 资源故障恢复方法及装置
CN106294386B (zh) 任务分配执行方法及系统
CN104426968B (zh) 数据管理方法和装置
CN104301990B (zh) 一种数据同步的方法及装置
CN108055199A (zh) 支持离线消息保存的移动推送方法及系统
CN103701653B (zh) 一种接口热插拔配置数据的处理方法及网络配置服务器
CN108880885A (zh) 一种报文处理方法及装置
CN111460038A (zh) 一种数据准实时同步方法及装置
CN107835095A (zh) 一种日志的处理方法及装置
US6745225B2 (en) Method and a device for enabling intercommunication among user processes in a communication management system regardless of the availability of the user processes
US20080008305A1 (en) Call Distribution in a Direct-Communication Network
CN106790647A (zh) 一种自适应服务管理的方法和系统
JPH10301870A (ja) 通信回線制御システム
CN105335362B (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
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20170510

WD01 Invention patent application deemed withdrawn after publication