CN110740145A - 消息消费方法、装置、存储介质及电子设备 - Google Patents
消息消费方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN110740145A CN110740145A CN201810790242.3A CN201810790242A CN110740145A CN 110740145 A CN110740145 A CN 110740145A CN 201810790242 A CN201810790242 A CN 201810790242A CN 110740145 A CN110740145 A CN 110740145A
- Authority
- CN
- China
- Prior art keywords
- consumption
- message
- thread
- location
- latest
- 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.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/52—Network services specially adapted for the location of the user terminal
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/53—Network services using third party service providers
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
本公开涉及一种消息消费方法、消息消费装置、计算机可读存储介质及电子设备。本公开实施例提供的消息消费方法包括:从服务器获取消费主题的存储位置信息;根据所述存储位置信息向所述消费主题的存储位置注册消费线程;从所述存储位置获取所述消费主题的最新消费位置;通过所述消费线程从所述最新消费位置获取并消费消息。本公开实施例提供的消息消费方法具有消费受限少、网络环境适应性强的优点。
Description
技术领域
本公开涉及互联网技术领域,具体涉及一种消息消费方法、消息消费装置、计算机可读存储介质及电子设备。
背景技术
随着互联网技术的发展,分布式系统规模的壮大,越来越多的系统需要可靠的数据交换。目前较为常见的分布式消息系统包括kafka、rocketmq等。现有的分布式消息系统可以解决机房内服务器的数据交换问题、具有高性能、高效率等特点。
但是由于机房外部与机房内部往往隔着防火墙,受到端口限制以及多层代理限制,相关技术中的分布式消息系统无法方便地解决外部系统和机房内部系统直接通信的问题。
由此可见,如何摆脱消息消费过程中存在的防火墙、端口以及多层代理限制是目前亟待解决的问题。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种消息消费方法、消息消费装置、计算机可读存储介质及电子设备,进而至少在一定程度上克服由于相关技术的限制和缺陷而导致的消息消费受限的技术问题。
根据本公开的一个方面,提供一种消息消费方法,其特殊之处在于,包括:
从服务器获取消费主题的存储位置信息;
根据所述存储位置信息向所述消费主题的存储位置注册消费线程;
从所述存储位置获取所述消费主题的最新消费位置;
通过所述消费线程从所述最新消费位置获取并消费消息。
在本公开的一种示例性实施方式中,所述存储位置信息包括中间服务器的地址信息;
所述从服务器获取消费主题的存储位置信息包括:
从服务器获取存储消费主题的中间服务器的地址信息。
在本公开的一种示例性实施方式中,所述通过所述消费线程从所述最新消费位置获取并消费消息包括:
通过所述消费线程从所述最新消费位置获取消息;
将获取到的所述消息保存至本地消息队列;
按照存储顺序依次消费所述本地消息队列中存储的消息。
在本公开的一种示例性实施方式中,所述通过所述消费线程从所述最新消费位置获取消息包括:
启动所述消费线程中的拉取消息线程;
通过所述拉取消息线程从所述最新消费位置拉取消息。
在本公开的一种示例性实施方式中,在通过所述消费线程从所述最新消费位置获取并消费消息之后,所述方法还包括:
判断所述消息是否消费成功;
若判断所述消息消费成功,则向所述存储位置发出针对最新消费位置的更新请求。
在本公开的一种示例性实施方式中,所述向所述存储位置发出针对最新消费位置的更新请求,包括:
更新本地内存中存储的消费位置记录;
根据所述消费位置记录向所述存储位置发出针对最新消费位置的更新请求。
在本公开的一种示例性实施方式中,在判断所述消息是否消费成功之后,所述方法还包括:
若判断所述消息消费失败,则将所述消息保存至重试队列;
在保存成功后继续消费下一条消息,并向所述存储位置发出针对最新消费位置的更新请求。
在本公开的一种示例性实施方式中,所述方法还包括:
向所述存储位置发送针对消费线程心跳记录的更新请求。
根据本公开的一个方面,提供一种消息消费装置,其特殊之处在于,包括:
通信模块,被配置为从服务器获取消费主题的存储位置信息;
注册模块,被配置为根据所述存储位置信息向所述消费主题的存储位置注册消费线程;
获取模块,被配置为从所述存储位置获取所述消费主题的最新消费位置;
消费模块,被配置为通过所述消费线程从所述最新消费位置获取并消费消息。
根据本公开的一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,其特殊之处在于,所述计算机程序被处理器执行时实现以上任一所述的消息消费方法。
根据本公开的一个方面,提供一种电子设备,其特殊之处在于,包括处理器和存储器;其中,存储器用于存储所述处理器的可执行指令,所述处理器被配置为经由执行所述可执行指令来执行以上任一所述的消息消费方法。
在本公开实施例所提供的消息消费方法中,消费者通过与服务器进行通信以获得消费主题的存储位置以及最新消费位置等信息,从而完成数据交换并顺利进行消息消费,在局域网或者广域网中均能够进行可靠数据交换,可以摆脱防火墙、端口以及代理等限制,对网络环境具有较强的适应性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示意性示出本公开一种示例性实施方式中消息消费方法的步骤流程图。
图2示意性示出本公开另一种示例性实施方式中消息消费方法的部分步骤流程图。
图3示意性示出本公开另一种示例性实施方式中消息消费方法的部分步骤流程图。
图4示意性示出本公开另一种示例性实施方式中消息消费方法的部分步骤流程图。
图5示意性示出本公开另一种示例性实施方式中消息消费方法的部分步骤流程图。
图6示意性示出本公开另一种示例性实施方式中消息消费方法的部分步骤流程图。
图7示意性示出本公开一种示例性实施方式中消息消费方法在一种应用场景下的消息消费流程框图。
图8示意性示出本公开一种示例性实施方式中消息消费方法在一种应用场景下的消息生产和消费流程框图。
图9示意性示出本公开一种示例性实施方式中消息消费方法在一种应用场景下的消息消费流程框图。
图10示意性示出本公开示例性实施方式中消息消费装置的组成框图。
图11示意性示出本公开示例性实施方式中一种程序产品的示意图。
图12示意性示出本公开示例性实施方式中一种电子设备的模块示意图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施例使得本公开将更加全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
本公开的示例性实施方式中首先提供一种消息消费方法,主要可以应用于机房外部消费者通过与机房内部服务器进行数据交换从而完成消息获取和消费的过程。其中,机房外部消费者可以是用于消费消息的外部应用程序;机房内部服务器可以是一个服务器,也可以是多个服务器组成的服务器集群。
参考图1所示,本示例性实施方式提供的消息消费方法主要可以包括以下步骤:
步骤S110.从服务器获取消费主题的存储位置信息。
消费主题是消息发送和接收的逻辑通道,一个消费主题在物理上可以包括多个分区,每个分区都可以由一系列有序排列的、不可变的消息组成,即每个分区都可以视作一个有序的消息队列,新产生的消息将被连续追加到对应的消息队列中。对于包括多个消息队列的消费主题,每个队列均可以使用0、1、2、3……n等数字进行区分标识。不同的消费主题通常可以存储在一个服务器的不同位置上,或者可以存储在不同的服务器上。当消费者需要消费消息时,可以首先向服务器发送针对消费主题存储位置信息的获取请求,然后服务器根据该获取请求确认消费主题的存储位置并将相应的存储位置信息返回给外部消费者。其中,存储位置信息可以是消费主题存储位置的物理地址信息,另外也可以是其他任意的与消费主题存储位置相关的指向性信息,本示例性实施方式对此不做特殊限定。消费者与服务器之间可以利用网络通信协议进行数据交换,例如可以通过超文本传输协议(HyperText Transfer Protocol,简称HTTP)进行网络通信以完成数据交换,另外消费者与服务器之间也可以采用其他任意的能够实现可靠数据交换的通信方式,本示例性实施方式对此亦不做特殊限定。
步骤S120.根据存储位置信息向消费主题的存储位置注册消费线程。
由步骤S110获取到消费主题的存储位置信息后,本步骤将根据获取到的存储位置信息找到对应的消费主题的存储位置,然后向消费主题的存储位置注册针对该消费主题的消费线程。例如:Thread1=[0,1],可以表示消费线程Thread1用于消费主题中标识为0和1的消息队列。随着消费线程数量的变化,服务器可以动态调整消费线程被分配的消息队列。对于一个消费主题的消费线程可以包括并发执行的多条线程,每条线程执行不同的任务,例如,一条线程用于从服务器获取消息,另一条线程用于向服务器更新消费位置等等。另外,一个消费主题的消费线程也可以是能够执行多个任务的单条线程,本示例性实施方式对此不做特殊限定。
步骤S130.从存储位置获取消费主题的最新消费位置。
在消费主题的存储位置,各个消费主题或者消费主题内的各个消息队列可以通过偏移量(Offset)来记录其中消息被消费的最新位置,亦即消费主题的最新消费位置。消费主题中的每个消息都具有一个数字类型的唯一编码,即消息ID。各个消息的消息ID可以按照在消费主题中的排列顺序依次递增。偏移量即可表示为最后一次被消费的消息ID,该消息ID对应的消息也将作为下一批消息消费的起始位置。准确获取消费主题的最新消费位置可以避免消息被漏掉或者消息被重复消费等问题。
步骤S140.通过消费线程从最新消费位置获取并消费消息。
由步骤S130获取到消费主题的最新消费位置后,本步骤将利用步骤S120注册的消费线程从最新消费位置获取消息并消费获取到的消息。举例而言,步骤S130中获取到的最新消费位置是1598,即最后一次消费的消息ID为1598。那么本步骤便可以从1598开始按照从小到大的顺序依次获取消息ID为1599、1560、1561……的消息并依次对其进行消费。
在本示例性实施方式提供的消息消费方法中,消费者通过与服务器进行通信以获得消费主题的存储位置以及最新消费位置等信息,从而完成数据交换并顺利进行消息消费,在局域网或者广域网中均能够进行可靠数据交换,可以摆脱防火墙、端口以及代理等限制,对网络环境适应性强。
在以上示例性实施方式的基础上,存储位置信息可以包括中间服务器的地址信息。相应地,步骤S130.从存储位置获取消费主题的最新消费位置可以包括:从服务器获取存储消费主题的中间服务器的地址信息。
在本实施例中,与消费者进行通信的服务器可以包括主服务器和多个中间服务器。其中,中间服务器是用于存储消息的服务器,主要可以由应用程序和数据库组成,多个中间服务器分别用于存储各个消费主题。主服务器上存储有各个消费主题的主题名称、和消费主题相关的配置信息以及存储消费主题的中间服务器的地址信息。如果增加中间服务器,那么为新增加的服务器分配的地址信息都将记录在主服务器上。
当主服务器接收到消费者发来的针对消费主题存储位置的获取请求后,主服务器将把存储相应消费主题的中间服务器的地址信息返回给消费者,然后消费者可以通过向中间服务器注册消费线程而完成后续的消息消费进程。通过设置主服务器和多个中间服务器可以对任务进行合理分流,从而提高消息生产和消费的效率。
参考图2所示,在本公开的另一示例性实施方式中,以上述任一实施例为基础,步骤S140.通过消费线程从最新消费位置获取并消费消息可以包括以下步骤:
步骤S241.通过消费线程从最新消费位置获取消息。
本步骤首先利用步骤S120建立的消费线程以消费主题的最新消费位置为起始点开始获取消息。
步骤S242.将获取到的消息保存至本地消息队列。
由步骤S241获取到的消息将在本步骤中保存至本地消息队列,其中本地消息队列是消费者所在的处于服务器网络系统之外的消费侧消息队列,所有消息可以根据获取到的先后顺序在本地消息队列中有序存储排列。
步骤S243.按照存储顺序依次消费本地消息队列中存储的消息。
按照消息的存储顺序,本步骤将对本地消息队列中存储的消息依次进行消费。
通过设置本地消息队列可以异步处理消息的获取和消费,从而为消息的获取和消费提供一定的缓冲余量,避免出现消息阻塞的问题,提高消息消费处理效率。
参考图3所示,在本公开的另一示例性实施方式中,步骤S241可以进一步包括以下步骤:
步骤S3411.启动消费线程中的拉取消息线程。
根据消费者的消费需求,本步骤启动消费线程中的拉取消息线程。
步骤S3412.通过拉取消息线程从最新消费位置拉取消息。
通过拉取消息线程的循环执行可以不断地从消费主题的最新消费位置拉取消息。然后便可以将拉取到的消息按照拉取顺序依次存储在本地消息队列中。除了本实施例中拉取消息的模式之外,消费者获取消息的方式也可以是建立推送消息线程,然后通过推送消息线程接收由服务器推送的消息。另外,在其他一些实施例中,也可以采用其他任意的获取消息的方式,本公开对此不做特殊限定。
参考图4所示,在本公开的另一示例性实施方式中,以上述任一实施例为基础,在步骤S140.通过消费线程从最新消费位置获取并消费消息之后,本实施例提供的消息消费方法还可以包括以下步骤:
步骤S450.判断消息是否消费成功。
本步骤对当前消息的消费结果做出判断,判断结果可能是消费成功也可能是消费失败。
步骤S460.若判断消息消费成功,则向存储位置发出针对最新消费位置的更新请求。
根据步骤S450的判断结果,如果判断消息消费成功,则可以向当前消费主题的存储位置发出针对最新消费位置的更新请求,然后相应的存储位置(例如中间服务器)便可以根据该更新请求将当前消费主题的最新消费位置更新至下一条消息。
在本实施例中,通过对消息消费结果做出判断可以准确地对消费主题的最新消费位置做出更新。如此一来,当外部消费者因故障重启或更换其他外部消费者时,在外部消费者一侧可以随时从消费主题的存储位置获取最新消费位置继续进行消费。
参考图5所示,在本公开的另一示例性实施方式中,以上一实施例为基础,步骤S460中涉及的向存储位置发出针对最新消费位置的更新请求可以包括以下步骤:
步骤S561.更新本地内存中存储的消费位置记录。
当判断消息消费成功时,本步骤首先更新在消费者一侧本地内存中存储的消费位置记录。例如,在标识为1的消息队列中,消息ID为128的消息被成功消费,那么可以在本地内存中记录1->128;而当消息ID为129的消息被成功消费后,可以继续在本地内存中记录1->129。
步骤S562.根据消费位置记录向存储位置发出针对最新消费位置的更新请求。
在消费者一侧可以设置消费位置定时同步程序,然后由定时同步程序按照预设的时间节点获取本地内存中存储的消费位置记录,然后根据该消费位置记录向服务器一侧消费主题的存储位置发出针对最新消费位置的更新请求。
在本实施例中,通过在消费者一侧本地内存中存储消费位置记录可以实现对消费主题最新消费位置的异步更新,避免因频繁更新而导致的资源浪费。
参考图6所示,在本公开的另一示例性实施方式中,由步骤S450.判断消息是否消费成功之后,本实施例中的消息消费方法还可以包括以下步骤:
步骤S660.若判断消息消费失败,则将消息保存至重试队列。
如果步骤S450中的判断结果是消息消费失败,那么本步骤将把消费失败的消息保存至消费者一侧的重试队列中。
步骤S670.在保存成功后继续消费下一条消息,并向存储位置发出针对最新消费位置的更新请求。
在将消费失败的消息成本保存在重试队列中以后,消费者可以继续消费下一条消息,同时可以向当前消费主题的存储位置发出针对最新消费位置的更新请求,而重试队列中保存的消息也将可以在合适的时机被重新进行消费。
本实施例通过设置重试队列,可以在一定程度上缓解因个别消息消费失败而导致的消息阻塞问题,在不遗漏任何消息的基础上提高消息消费效率。
在以上示例性实施方式的基础上,消费者在进行消息获取和消费的同时还可以向当前消费主题的存储位置发送针对消费线程心跳记录的更新请求,从而实时监控消费线程的有效状态。
需要说明的是,虽然以上示例性实施方式以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或者必须执行全部的步骤才能实现期望的结果。附加地或者备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
下面结合图7至图9对以上示例性实施方式中消息消费方法的具体应用场景做出说明。
参考图7和图8所示,在本应用场景中,服务器包括位于机房内部网络中的主服务器和多个中间服务器。当外部消费者启动时,可以通过HTTP调用获得所要消费主题的中间服务器地址。根据所获得的中间服务器地址,外部消费者可以分别向对应的中间服务器注册自己的消费线程,同时从对应的中间服务器上获得消费主题的最新消费位置。然后外部消费者启动拉取消息线程循环,按顺序从最新消费位置拉取消息。当外部消费者每成功消费一条消息,都向前推进一步消费位置,并异步地把最新消费位置更新到对应的中间服务器上。与此同时,还可以向对应的中间服务器更新消费线程心跳记录。
参考图9所示,外部消费者的拉取消息线程不断从中间服务器中拉取消息,并放入本地消息队列中。消息处理器用于对消息进行消费,如果消费成功则向前更新消费位置,具体可以是先更新至本地内存中的消费位置记录器。如果消息消费失败则进入重试队列,进重试队列成功后,同样可以更新消费位置。而如果某一条消费失败的消息进重试队列失败,那么针对该消息可以反复执行重试消费和进重试队列,直至该消息消费成功或者进重试队列成功,然后便可以进行下一条消息的消费。消息位置同步程序可以定时从消息位置记录器中获取最新消费位置并将最新消费位置更新至对应的中间服务器上。
在本公开的示例性实施方式中,还提供一种消息消费装置。参考图10所示,消息消费装置1000主要可以包括:通信模块1010、注册模块1020、获取模块1030和消费模块1040。其中,通信模块1010被配置为从服务器获取消费主题的存储位置信息;注册模块1020被配置为根据所述存储位置信息向所述消费主题的存储位置注册消费线程;获取模块1030被配置为从所述存储位置获取所述消费主题的最新消费位置;消费模块1040被配置为通过所述消费线程从所述最新消费位置获取并消费消息。
其中通信模块1010被配置为从服务器获取消费主题的存储位置信息。消费主题是消息发送和接收的逻辑通道,一个消费主题在物理上可以包括多个分区,每个分区都可以由一系列有序排列的、不可变的消息组成,即每个分区都可以视作一个有序的消息队列,新产生的消息将被连续追加到对应的消息队列中。对于包括多个消息队列的消费主题,每个队列均可以使用0、1、2、3……n等数字进行区分标识。不同的消费主题通常可以存储在一个服务器的不同位置上,或者可以存储在不同的服务器上。当消费者需要消费消息时,可以首先向服务器发送针对消费主题存储位置信息的获取请求,然后服务器根据该获取请求确认消费主题的存储位置并将相应的存储位置信息返回给外部消费者。其中,存储位置信息可以是消费主题存储位置的物理地址信息,另外也可以是其他任意的与消费主题存储位置相关的指向性信息,本示例性实施方式对此不做特殊限定。消费者与服务器之间可以利用网络通信协议进行数据交换,例如可以通过超文本传输协议(HyperText TransferProtocol,简称HTTP)进行网络通信以完成数据交换,另外消费者与服务器之间也可以采用其他任意的能够实现可靠数据交换的通信方式,本示例性实施方式对此亦不做特殊限定。
注册模块1020将根据获取到的存储位置信息找到对应的消费主题的存储位置,然后向消费主题的存储位置注册针对该消费主题的消费线程。例如:Thread1=[0,1],可以表示消费线程Thread1用于消费主题中标识为0和1的消息队列。随着消费线程数量的变化,服务器可以动态调整消费线程被分配的消息队列。对于一个消费主题的消费线程可以包括并发执行的多条线程,每条线程执行不同的任务,例如,一条线程用于从服务器获取消息,另一条线程用于向服务器更新消费位置等等。另外,一个消费主题的消费线程也可以是能够执行多个任务的单条线程,本示例性实施方式对此不做特殊限定。
其中获取模块1030被配置为从所述存储位置获取所述消费主题的最新消费位置。在消费主题的存储位置,各个消费主题或者消费主题内的各个消息队列可以通过偏移量(Offset)来记录其中消息被消费的最新位置,亦即消费主题的最新消费位置。消费主题中的每个消息都具有一个数字类型的唯一编码,即消息ID。各个消息的消息ID可以按照在消费主题中的排列顺序依次递增。偏移量即可表示为最后一次被消费的消息ID,该消息ID对应的消息也将作为下一批消息消费的起始位置。准确获取消费主题的最新消费位置可以避免消息被漏掉或者消息被重复消费等问题。
消费模块1040被配置为通过所述消费线程从所述最新消费位置获取并消费消息。获取模块1030获取到消费主题的最新消费位置后,消费模块1040利用注册模块1020注册的消费线程从最新消费位置获取消息并消费获取到的消息。举例而言,步骤S130中获取到的最新消费位置是1598,即最后一次消费的消息ID为1598。那么本步骤便可以从1598开始按照从小到大的顺序依次获取消息ID为1599、1560、1561……的消息并依次对其进行消费。
在本示例性实施方式提供的消息消费方法中,消费者通过与服务器进行通信以获得消费主题的存储位置以及最新消费位置等信息,从而完成数据交换并顺利进行消息消费,在局域网或者广域网中均能够进行可靠数据交换,可以摆脱防火墙、端口以及代理等限制,对网络环境适应性强。
在以上示例性实施方式的基础上,存储位置信息可以包括中间服务器的地址信息。相应地,步骤S130.从存储位置获取消费主题的最新消费位置可以包括:从服务器获取存储消费主题的中间服务器的地址信息。
在本实施例中,与消费者进行通信的服务器可以包括主服务器和多个中间服务器。其中,中间服务器是用于存储消息的服务器,主要可以由应用程序和数据库组成,多个中间服务器分别用于存储各个消费主题。主服务器上存储有各个消费主题的主题名称、和消费主题相关的配置信息以及存储消费主题的中间服务器的地址信息。如果增加中间服务器,那么为新增加的服务器分配的地址信息都将记录在主服务器上。
当主服务器接收到消费者发来的针对消费主题存储位置的获取请求后,主服务器将把存储相应消费主题的中间服务器的地址信息返回给消费者,然后消费者可以通过向中间服务器注册消费线程而完成后续的消息消费进程。通过设置主服务器和多个中间服务器可以对任务进行合理分流,从而提高消息生产和消费的效率。
消费模块1040通过消费线程从最新消费位置获取并消费消息的具体步骤如图4所示,可以包括以下步骤:
步骤S241.通过消费线程从最新消费位置获取消息。
本步骤首先利用步骤S120建立的消费线程以消费主题的最新消费位置为起始点开始获取消息。
步骤S242.将获取到的消息保存至本地消息队列。
由步骤S241获取到的消息将在本步骤中保存至本地消息队列,其中本地消息队列是消费者所在的处于服务器网络系统之外的消费侧消息队列,所有消息可以根据获取到的先后顺序在本地消息队列中有序存储排列。
步骤S243.按照存储顺序依次消费本地消息队列中存储的消息。
按照消息的存储顺序,本步骤将对本地消息队列中存储的消息依次进行消费。
通过设置本地消息队列可以异步处理消息的获取和消费,从而为消息的获取和消费提供一定的缓冲余量,避免出现消息阻塞的问题,提高消息消费处理效率。
参考图3所示,步骤S241可以进一步包括以下步骤:
步骤S3411.启动消费线程中的拉取消息线程。
根据消费者的消费需求,本步骤启动消费线程中的拉取消息线程。
步骤S3412.通过拉取消息线程从最新消费位置拉取消息。
通过拉取消息线程的循环执行可以不断地从消费主题的最新消费位置拉取消息。然后便可以将拉取到的消息按照拉取顺序依次存储在本地消息队列中。除了本实施例中拉取消息的模式之外,消费者获取消息的方式也可以是建立推送消息线程,然后通过推送消息线程接收由服务器推送的消息。另外,在其他一些实施例中,也可以采用其他任意的获取消息的方式,本公开对此不做特殊限定。
参考图4所示,消费模块1040通过消费线程从最新消费位置获取并消费消息之后,本实施例提供的消息消费方法还可以包括以下步骤:
步骤S450.判断消息是否消费成功。
本步骤对当前消息的消费结果做出判断,判断结果可能是消费成功也可能是消费失败。
步骤S460.若判断消息消费成功,则向存储位置发出针对最新消费位置的更新请求。
根据步骤S450的判断结果,如果判断消息消费成功,则可以向当前消费主题的存储位置发出针对最新消费位置的更新请求,然后相应的存储位置(例如中间服务器)便可以根据该更新请求将当前消费主题的最新消费位置更新至下一条消息。
在本实施例中,通过对消息消费结果做出判断可以准确地对消费主题的最新消费位置做出更新。如此一来,当外部消费者因故障重启或更换其他外部消费者时,在外部消费者一侧可以随时从消费主题的存储位置获取最新消费位置继续进行消费。
参考图5所示,步骤S460中涉及的向存储位置发出针对最新消费位置的更新请求可以包括以下步骤:
步骤S561.更新本地内存中存储的消费位置记录。
当判断消息消费成功时,本步骤首先更新在消费者一侧本地内存中存储的消费位置记录。例如,在标识为1的消息队列中,消息ID为128的消息被成功消费,那么可以在本地内存中记录1->128;而当消息ID为129的消息被成功消费后,可以继续在本地内存中记录1->129。
步骤S562.根据消费位置记录向存储位置发出针对最新消费位置的更新请求。
在消费者一侧可以设置消费位置定时同步程序,然后由定时同步程序按照预设的时间节点获取本地内存中存储的消费位置记录,然后根据该消费位置记录向服务器一侧消费主题的存储位置发出针对最新消费位置的更新请求。
在本实施例中,通过在消费者一侧本地内存中存储消费位置记录可以实现对消费主题最新消费位置的异步更新,避免因频繁更新而导致的资源浪费。
参考图6所示,由步骤S450.判断消息是否消费成功之后,本实施例中的消息消费方法还可以包括以下步骤:
步骤S660.若判断消息消费失败,则将消息保存至重试队列。
如果步骤S450中的判断结果是消息消费失败,那么本步骤将把消费失败的消息保存至消费者一侧的重试队列中。
步骤S670.在保存成功后继续消费下一条消息,并向存储位置发出针对最新消费位置的更新请求。
在将消费失败的消息成本保存在重试队列中以后,消费者可以继续消费下一条消息,同时可以向当前消费主题的存储位置发出针对最新消费位置的更新请求,而重试队列中保存的消息也将可以在合适的时机被重新进行消费。
本实施例通过设置重试队列,可以在一定程度上缓解因个别消息消费失败而导致的消息阻塞问题,在不遗漏任何消息的基础上提高消息消费效率。
在以上示例性实施方式的基础上,消费者在进行消息获取和消费的同时还可以向当前消费主题的存储位置发送针对消费线程心跳记录的更新请求,从而实时监控消费线程的有效状态。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
在本公开的示例性实施方式中,还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时可实现本公开的上述的消息消费方法。在一些可能的实施方式中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码;该程序产品可以存储在一个非易失性存储介质(可以是CD-ROM、U盘或者移动硬盘等)中或网络上;当所述程序产品在一台计算设备(可以是个人计算机、服务器、终端装置或者网络设备等)上运行时,所述程序代码用于使所述计算设备执行本公开中上述各示例性实施例中的方法步骤。
参见图11所示,根据本公开的实施方式的用于实现上述方法的程序产品1100,其可以采用便携式紧凑磁盘只读存储器(CD-ROM)并包括程序代码,并可以在计算设备(例如个人计算机、服务器、终端装置或者网络设备等)上运行。然而,本公开的程序产品不限于此。在本示例性实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或者多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。
可读存储介质例如可以为但不限于电、磁、光、电磁、红外线或半导体的系统、装置或器件、或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件或者上述的任意合适的组合。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任意可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如C语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户计算设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络(包括局域网(LAN)或广域网(WAN)等)连接到用户计算设备;或者,可以连接到外部计算设备,例如利用因特网服务提供商来通过因特网连接。
在本公开的示例性实施方式中,还提供一种电子设备,所述电子设备包括至少一个处理器以及至少一个用于存储所述处理器的可执行指令的存储器;其中,所述处理器被配置为经由执行所述可执行指令来执行本公开中上述各示例性实施例中的方法步骤。
下面结合图12对本示例性实施方式中的电子设备1200进行描述。电子设备1200仅仅为一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
参见图12所示,电子设备1200以通用计算设备的形式表现。电子设备1200的组件可以包括但不限于:至少一个处理单元1210、至少一个存储单元1220、连接不同系统组件(包括处理单元1210和存储单元1220)的总线1230、显示单元1240。
其中,存储单元1220存储有程序代码,所述程序代码可以被处理单元1210执行,使得处理单元1210执行本公开中上述各示例性实施例中的方法步骤。
存储单元1220可以包括易失性存储单元形式的可读介质,例如随机存取存储单元1221(RAM)和/或高速缓存存储单元1222,还可以进一步包括只读存储单元1223(ROM)。
存储单元1220还可以包括具有一组(至少一个)程序模块1225的程序/实用工具1224,这样的程序模块包括但不限于:操作系统、一个或者多个应用程序、其他程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线1230可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用各种总线结构中的任意总线结构的局域总线。
电子设备1200也可以与一个或多个外部设备1300(例如键盘、指向设备、蓝牙设备等)通信,还可以与一个或者多个使得用户可以与该电子设备1200交互的设备通信,和/或与使得该电子设备1200能与一个或多个其他计算设备进行通信的任何设备(例如路由器、调制解调器等)通信。这种通信可以通过输入/输出(I/O)接口1250进行。并且,电子设备1200还可以通过网络适配器1260与一个或者多个网络(例如局域网(LAN)、广域网(WAN)和/或公共网络,例如因特网)通信。如图12所示,网络适配器1260可以通过总线1230与电子设备1200的其他模块通信。应当明白,尽管图中未示出,可以结合电子设备1200使用其他硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
本领域技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由所附的权利要求指出。
上述所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中,如有可能,各实施例中所讨论的特征是可互换的。在上面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组件、材料等。在其它情况下,不详细示出或描述公知结构、材料或者操作以避免模糊本公开的各方面。
Claims (11)
1.一种消息消费方法,其特征在于,包括:
从服务器获取消费主题的存储位置信息;
根据所述存储位置信息向所述消费主题的存储位置注册消费线程;
从所述存储位置获取所述消费主题的最新消费位置;
通过所述消费线程从所述最新消费位置获取并消费消息。
2.根据权利要求1所述的消息消费方法,其特征在于,所述存储位置信息包括中间服务器的地址信息;
所述从服务器获取消费主题的存储位置信息包括:
从服务器获取存储消费主题的中间服务器的地址信息。
3.根据权利要求1所述的消息消费方法,其特征在于,所述通过所述消费线程从所述最新消费位置获取并消费消息包括:
通过所述消费线程从所述最新消费位置获取消息;
将获取到的所述消息保存至本地消息队列;
按照存储顺序依次消费所述本地消息队列中存储的消息。
4.根据权利要求3所述的消息消费方法,其特征在于,所述通过所述消费线程从所述最新消费位置获取消息包括:
启动所述消费线程中的拉取消息线程;
通过所述拉取消息线程从所述最新消费位置拉取消息。
5.根据权利要求1所述的消息消费方法,其特征在于,在通过所述消费线程从所述最新消费位置获取并消费消息之后,所述方法还包括:
判断所述消息是否消费成功;
若判断所述消息消费成功,则向所述存储位置发出针对最新消费位置的更新请求。
6.根据权利要求5所述的消息消费方法,其特征在于,所述向所述存储位置发出针对最新消费位置的更新请求,包括:
更新本地内存中存储的消费位置记录;
根据所述消费位置记录向所述存储位置发出针对最新消费位置的更新请求。
7.根据权利要求6所述的消息消费方法,其特征在于,在判断所述消息是否消费成功之后,所述方法还包括:
若判断所述消息消费失败,则将所述消息保存至重试队列;
在保存成功后继续消费下一条消息,并向所述存储位置发出针对最新消费位置的更新请求。
8.根据权利要求1所述的消息消费方法,其特征在于,所述方法还包括:
向所述存储位置发送针对消费线程心跳记录的更新请求。
9.一种消息消费装置,其特征在于,包括:
通信模块,被配置为从服务器获取消费主题的存储位置信息;
注册模块,被配置为根据所述存储位置信息向所述消费主题的存储位置注册消费线程;
获取模块,被配置为从所述存储位置获取所述消费主题的最新消费位置;
消费模块,被配置为通过所述消费线程从所述最新消费位置获取并消费消息。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-8中任意一项所述的消息消费方法。
11.一种电子设备,其特征在于,包括:
处理器;
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器被配置为经由执行所述可执行指令来执行权利要求1-8中任意一项所述的消息消费方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810790242.3A CN110740145B (zh) | 2018-07-18 | 2018-07-18 | 消息消费方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810790242.3A CN110740145B (zh) | 2018-07-18 | 2018-07-18 | 消息消费方法、装置、存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110740145A true CN110740145A (zh) | 2020-01-31 |
CN110740145B CN110740145B (zh) | 2023-08-08 |
Family
ID=69235135
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810790242.3A Active CN110740145B (zh) | 2018-07-18 | 2018-07-18 | 消息消费方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110740145B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111787107A (zh) * | 2020-06-30 | 2020-10-16 | 北京字节跳动网络技术有限公司 | 消息处理方法、装置、可读介质和电子设备 |
CN111988391A (zh) * | 2020-08-14 | 2020-11-24 | 网联清算有限公司 | 一种消息发送方法及装置 |
CN112052104A (zh) * | 2020-09-01 | 2020-12-08 | 掌阅科技股份有限公司 | 基于多机房实现的消息队列的管理方法及电子设备 |
CN112068972A (zh) * | 2020-09-01 | 2020-12-11 | 掌阅科技股份有限公司 | 基于多机房实现的消息队列的消费方法及电子设备 |
CN113064736A (zh) * | 2021-03-19 | 2021-07-02 | 北京房江湖科技有限公司 | 消息处理系统、方法、装置、电子设备和存储介质 |
CN114490867A (zh) * | 2021-12-28 | 2022-05-13 | 杭州趣链科技有限公司 | 消息订阅方法、系统、装置、设备及存储介质 |
CN114500416A (zh) * | 2021-12-14 | 2022-05-13 | 阿里巴巴(中国)有限公司 | 用于最多一次消息投递的投递方法和投递系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB201313775D0 (en) * | 2013-08-01 | 2013-09-18 | Ibm | Consuming ordered streams of messages in a message oriented middleware |
CN103856393A (zh) * | 2013-07-09 | 2014-06-11 | 携程计算机技术(上海)有限公司 | 基于数据库的分布式消息中间件系统及其运行方法 |
CN104754036A (zh) * | 2015-03-06 | 2015-07-01 | 合一信息技术(北京)有限公司 | 一种基于kafka的消息处理系统及处理方法 |
CN105306552A (zh) * | 2015-09-30 | 2016-02-03 | 中国科学院计算技术研究所 | 一种基于消息队列的消费均衡方法及系统 |
CN106302385A (zh) * | 2016-07-26 | 2017-01-04 | 努比亚技术有限公司 | 一种消息分发装置及方法 |
CN106375200A (zh) * | 2016-11-08 | 2017-02-01 | 上海找钢网信息科技股份有限公司 | 消息系统及消息处理方法 |
CN107295106A (zh) * | 2017-07-31 | 2017-10-24 | 杭州多麦电子商务股份有限公司 | 消息数据服务集群 |
CN107395729A (zh) * | 2017-07-27 | 2017-11-24 | 深圳乐信软件技术有限公司 | 一种消息队列的消费系统、方法及装置 |
-
2018
- 2018-07-18 CN CN201810790242.3A patent/CN110740145B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103856393A (zh) * | 2013-07-09 | 2014-06-11 | 携程计算机技术(上海)有限公司 | 基于数据库的分布式消息中间件系统及其运行方法 |
GB201313775D0 (en) * | 2013-08-01 | 2013-09-18 | Ibm | Consuming ordered streams of messages in a message oriented middleware |
CN104754036A (zh) * | 2015-03-06 | 2015-07-01 | 合一信息技术(北京)有限公司 | 一种基于kafka的消息处理系统及处理方法 |
CN105306552A (zh) * | 2015-09-30 | 2016-02-03 | 中国科学院计算技术研究所 | 一种基于消息队列的消费均衡方法及系统 |
CN106302385A (zh) * | 2016-07-26 | 2017-01-04 | 努比亚技术有限公司 | 一种消息分发装置及方法 |
CN106375200A (zh) * | 2016-11-08 | 2017-02-01 | 上海找钢网信息科技股份有限公司 | 消息系统及消息处理方法 |
CN107395729A (zh) * | 2017-07-27 | 2017-11-24 | 深圳乐信软件技术有限公司 | 一种消息队列的消费系统、方法及装置 |
CN107295106A (zh) * | 2017-07-31 | 2017-10-24 | 杭州多麦电子商务股份有限公司 | 消息数据服务集群 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111787107A (zh) * | 2020-06-30 | 2020-10-16 | 北京字节跳动网络技术有限公司 | 消息处理方法、装置、可读介质和电子设备 |
CN111787107B (zh) * | 2020-06-30 | 2023-03-24 | 北京字节跳动网络技术有限公司 | 消息处理方法、装置、可读介质和电子设备 |
CN111988391A (zh) * | 2020-08-14 | 2020-11-24 | 网联清算有限公司 | 一种消息发送方法及装置 |
CN112052104A (zh) * | 2020-09-01 | 2020-12-08 | 掌阅科技股份有限公司 | 基于多机房实现的消息队列的管理方法及电子设备 |
CN112068972A (zh) * | 2020-09-01 | 2020-12-11 | 掌阅科技股份有限公司 | 基于多机房实现的消息队列的消费方法及电子设备 |
CN113064736A (zh) * | 2021-03-19 | 2021-07-02 | 北京房江湖科技有限公司 | 消息处理系统、方法、装置、电子设备和存储介质 |
CN114500416A (zh) * | 2021-12-14 | 2022-05-13 | 阿里巴巴(中国)有限公司 | 用于最多一次消息投递的投递方法和投递系统 |
CN114490867A (zh) * | 2021-12-28 | 2022-05-13 | 杭州趣链科技有限公司 | 消息订阅方法、系统、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110740145B (zh) | 2023-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110740145A (zh) | 消息消费方法、装置、存储介质及电子设备 | |
CN110795503A (zh) | 分布式存储系统的多集群数据同步方法及相关装置 | |
CN111897638B (zh) | 分布式任务调度方法及系统 | |
CN107391276B (zh) | 分布式监听方法、监听控制装置及系统 | |
CN109284180B (zh) | 一种任务调度方法、装置、电子设备及存储介质 | |
CN107341062B (zh) | 一种数据推送方法、装置、设备以及存储介质 | |
CN113452774B (zh) | 消息推送方法、装置、设备及存储介质 | |
US9098607B2 (en) | Writing and analyzing logs in a distributed information system | |
CN109150662B (zh) | 消息传输方法、分布式系统、设备、介质和无人车 | |
CN111078422A (zh) | 消息处理方法、消息处理装置、可读存储介质、电子设备 | |
CN112395097A (zh) | 一种消息处理方法、装置、设备和存储介质 | |
CN105373563B (zh) | 数据库切换方法及装置 | |
CN113282850B (zh) | 资源标签管理方法、装置、电子设备、系统及存储介质 | |
CN109445966B (zh) | 事件处理方法、装置、介质和计算设备 | |
CN110881224A (zh) | 一种网络长连接方法、装置、设备及存储介质 | |
US20200236165A1 (en) | System and method for synchronization of media objects between devices operating in a multiroom system | |
CN112596371A (zh) | 控制卡切换方法、装置、电子设备及存储介质 | |
CN114584618A (zh) | 信息交互方法、装置、设备、存储介质和系统 | |
CN112052104A (zh) | 基于多机房实现的消息队列的管理方法及电子设备 | |
CN115866035A (zh) | 多线程数据高速推送方法、系统、控制器及存储介质 | |
US20170322893A1 (en) | Computing node to initiate an interrupt for a write request received over a memory fabric channel | |
CN112181737B (zh) | 消息处理方法、装置、电子设备及介质 | |
CN111405015B (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN110445874B (zh) | 一种会话处理方法、装置、设备和存储介质 | |
JPWO2014087654A1 (ja) | データ送信装置、データ送信方法、及び記録媒体 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |