CN110781015A - 消息队列的分配方法、装置、设备及计算机可读存储介质 - Google Patents
消息队列的分配方法、装置、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN110781015A CN110781015A CN201911032575.0A CN201911032575A CN110781015A CN 110781015 A CN110781015 A CN 110781015A CN 201911032575 A CN201911032575 A CN 201911032575A CN 110781015 A CN110781015 A CN 110781015A
- Authority
- CN
- China
- Prior art keywords
- message
- consumer
- instance
- topic
- queue
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- Development Economics (AREA)
- Accounting & Taxation (AREA)
- Economics (AREA)
- Finance (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种消息队列的分配方法、装置、设备及计算机可读存储介质,涉及金融科技领域,该方法包括步骤:当检测到消费者实例中生成新的灰度实例后,发送心跳包给消息中间件服务端,以供所述消息中间件服务端根据所述心跳包更新所述消费者实例对应的关系集合;当侦测到执行预设负载均衡算法的执行指令后,确定所述执行指令对应的消息主题,在所述关系集合中获取所述消息主题对应消费者实例数目;根据所述消费者实例数目执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例。本发明使消息队列产品具备灰度发布的能力,保证消息主题消息队列中的消息都能被正常消费,提高了消息队列中消息被消费的成功率。
Description
技术领域
本发明涉及金融科技(Fintech)的消息中间件技术领域,尤其涉及一种消息队列的分配方法、装置、设备及计算机可读存储介质。
背景技术
随着金融科技,尤其是互联网科技金融的不断发展,越来越多的技术(如分布式、区块链Blockchain、人工智能等)应用在金融领域,但金融业也对技术提出了更高的要求,如对金融业中的消息队列产品提出了更高的要求。
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B测试,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。具体地,在现有的消息队列产品中,所谓灰度发布是指这样一种情况,假如在某次版本更新中,Consumer Group(消费者实例类别)需要在原来订阅的Topic(消息主题)基础上,新增或者减少对某个Topic的订阅,如果将全部消费者实例停机进行版本更新然后同时发布,新版本Topic的稳定性没有经过生产验证,那么就容易产生灾难性的后果。其中,Consumer Group是一类同质消费者实例的归类,即同一个Consumer Group下的不同消费者在外界看来是完全等价的。
如Consumer Group A(消费者实例A类)中有3个消费者实例,分别为c1,c2和c3,消费者实例c3成为了灰度实例,新增了对Topic4的订阅。由于同一个消费者实例类别下的不同消费者实例在外界看来是完全等价的,所以当消费者实例A类根据负载均衡算法决定Topic 4中的消息被消费者实例c1,c2,c3分配进行最终消费时,每个消费者实例消费Topic4中一部分消息队列,然而现实只有消费者实例c3具备消费Topic 4中消息的能力,这两者是矛盾的,导致Topic 4中只有部分消息队列中的消息能够被消费,另外剩下的消息队列中的消息无法被正确消费。由此可知,现有的消息队列产品不具有灰度发布的能力,从而导致新增或者减少对消息主题的订阅过程中,出现消息主题中消息队列消息无法被正确消费的情况,消息主题中消息队列消息被消费的成功率低下。
发明内容
本发明的主要目的在于提供一种消息队列的分配方法、装置、设备及计算机可读存储介质,旨在解决现有的消息队列产品不具有灰度发布的能力,消息主题中消息队列消息被消费的成功率低下的技术问题。
为实现上述目的,本发明提供一种消息队列的分配方法,所述消息队列的分配方法包括步骤:
当检测到消费者实例中生成新的灰度实例后,发送心跳包给消息中间件服务端,以供所述消息中间件服务端根据所述心跳包更新所述消费者实例对应的关系集合;
当侦测到执行预设负载均衡算法的执行指令后,确定所述执行指令对应的消息主题,在所述关系集合中获取所述消息主题对应消费者实例数目;
根据所述消费者实例数目执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例。
优选地,所述根据所述消费者实例数目执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例的步骤之后,还包括:
当检测到所述消费者实例消费所述消息队列消息失败的失败消息后,将所述失败消息上传到所述消费者实例对应的重试队列中,其中,每一所述消费者实例存在对应的重试队列。
优选地,所述根据所述消费者实例数目执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例的步骤包括:
将所述消费者实例数目确定为执行所述负载均衡算法的执行参数,在消息中间件名字服务中心中获取所述消息主题对应的消息队列数目;
根据所述消息队列数目和所述执行参数执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例。
优选地,所述当侦测到执行预设负载均衡算法的执行指令后,确定所述执行指令对应的消息主题,在所述关系集合中获取所述消息主题对应消费者实例数目的步骤包括:
当侦测到执行预设负载均衡算法的执行指令后,确定所述执行指令对应的消息主题,在所述关系集合中获取所述消息主题对应的消费者实例列表;
根据所述消费者实例列表确定所述消息主题对应的消费者实例数目。
此外,为实现上述目的,本发明还提供一种消息队列的分配方法,所述消息队列的分配方法包括:
当消息中间件服务端接收到消费者实例生成新的灰度实例后发送的心跳包后,根据所述心跳包更新所述消息者实例对应的关系集合;
当接收到生产者实例发送的待消费消息后,确定所述待消费消息对应的消息主题;
轮询访问所述关系集合,以查找到订阅所述消息主题的目标消费者实例,将所述消息主题中的消息队列分配给所述目标消费者实例。
优选地,所述当消息中间件服务端接收到消费者实例生成新的灰度实例后发送的心跳包后,根据所述心跳包更新所述消息者实例对应的关系集合的步骤包括:
当消息中间件服务端接收到消费者实例生成新的灰度实例后发送的心跳包后,获取所述心跳包中的心跳包信息;
根据所述心跳包信息记录消息主题与消费者实例之间的映射关系,以更新所述消费者实例对应的关系集合,其中,所述关系集合中存储有消息主题和消费者实例之间的映射关系。
此外,为实现上述目的,本发明还提供一种消息队列的分配装置,所述消息队列的分配装置包括:
发送模块,用于当检测到消费者实例中生成新的灰度实例后,发送心跳包给消息中间件服务端,以供所述消息中间件服务端根据所述心跳包更新所述消费者实例对应的关系集合;
确定模块,用于当侦测到执行预设负载均衡算法的执行指令后,确定所述执行指令对应的消息主题;
获取模块,用于在所述关系集合中获取所述消息主题对应消费者实例数目;
执行模块,用于根据所述消费者实例数目执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例。
此外,为实现上述目的,本发明还提供一种消息队列的分配装置,所述消息队列的分配装置应用与消息中间件服务端,所述消息队列的分配装置包括:
更新模块,用于当接收到消费者实例生成新的灰度实例后发送的心跳包后,根据所述心跳包更新所述消息者实例对应的关系集合;
确定模块,用于当接收到生产者实例发送的待消费消息后,确定所述待消费消息对应的消息主题;
访问模块,用于轮询访问所述关系集合,以查找到订阅所述消息主题的目标消费者实例,将所述消息主题中的消息队列分配给所述目标消费者实例。
此外,为实现上述目的,本发明还提供一种消息队列的分配设备,所述消息队列的分配设备包括存储器、处理器和存储在所述存储器上并可在所述处理器上运行的消息队列的分配程序,所述消息队列的分配程序被所述处理器执行时实现如上所述的消息队列的分配方法的步骤。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有消息队列的分配程序,所述消息队列的分配程序被处理器执行时实现如上所述的消息队列的分配方法的步骤。
本发明通过当检测到消费者实例中生成新的灰度实例后,发送心跳包给消息中间件服务端,以供消息中间件服务端根据心跳包更新消费者实例对应的关系集合,并在侦测到执行负载均衡算法的执行指令后,确定执行指令对应的消息主题,在关系集合中获取消息主题对应消费者实例数目,然后根据消费者实例数目执行负载均衡算法,以将消息主题中的消息队列分配给消费者实例。实现了在生成新的灰度实例后,在消息中间件服务端中引入消息主题和消费者实例之间的关系集合,通过该关系集合记录每类消费者实例所订阅的消息主题与可以消费该消息主题的消息所对应的消费者实例之间的映射关系,根据关系集合确定消费者实例数目来执行负载均衡算法,以确保消息主题的所有消息队列都会被正确分配到可以消费它们的消费者实例上,使消息队列产品具备灰度发布的能力,保证消息主题消息队列中的消息都能被正常消费,提高了消息队列中消息被消费的成功率,提高了消息队列的可靠性、可扩展性和稳定性。
附图说明
图1是本发明消息队列的分配方法第一实施例的流程示意图;
图2是本发明实施例消息队列产品中,消费者实例类别与消息中间件服务端之间关系的示意图;
图3是现有负载均衡算法和本实施例中负载均衡算法的对比示意图;
图4是本发明消息队列的分配方法第二实施例的流程示意图;
图5是本发明消息队列的分配方法第三实施例的流程示意图;
图6是本发明消息队列的分配装置较佳实施例的功能示意图模块图;
图7是本发明实施例方案涉及的硬件运行环境的结构示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供一种消息队列的分配方法,参照图1,图1为本发明消息队列的分配方法第一实施例的流程示意图。
本发明实施例提供了消息队列的分配方法的实施例,需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在本发明实施例中,灰度发布指的是同一个类别的消费者(Consumer)实例中,只有灰度实例监听了新消息主题(Topic),新消息主题的消息只有灰度实例能够收到,其他非灰度实例只能收到旧消息主题的消息。灰度实例既能够处理旧消息主题的消息,也能够处理新消息主题的消息。以下对本发明中所需用到的专业名词进行解释。
消息队列:是一种消息的传输过程中保存消息的容器,用以保存进程间通信或同一进程的不同线程间的通信过程中产生的消息。
Queue:消息实际存储于消息中间件的逻辑区域,Topic与Queue的对应关系是一对多的关系,同一主题的消息存储于该主题对应的Queue{Q1,Q2,Q3….}中。
Producer:消息生产者;Consumer:消息消费者。
Consumer Group:一类同质消费者实例的归类,消费者实际消费Queue中的消息时以Consumer Group为单位进行消费。为了便于描述,以下将Consumer Group称为消费者实例类别。
Broker:消息中间件服务端,提供维护Topic与Queue的映射关系,存储消息等能力。
Name server:消息中间件名字服务中心,为服务请求方和服务提供方提供Topic与Broker全局路由服务。
消息队列的分配方法包括:
步骤S10,当检测到消费者实例中生成新的灰度实例后,发送心跳包给消息中间件服务端,以供所述消息中间件服务端根据所述心跳包更新所述消费者实例对应的关系集合。
在现有的消息队列产品中,消费者实际消费的消息主题中的消息时,是以消费者实例类别为单位进行消费的,消息经由消费者实例类别再根据负载均衡算法决定由哪一个具体的消费者进行最终消费。每一个消费者实例类别下的消费者实例定期向消息中间件服务端发送心跳包,通过该心跳包告知消息中间件服务端自己订阅的消息主题和所属的消费者实例类别等信息。消息中间件服务端维护多个消费者实例类别的信息对象,如图2中的消费者实例A类对象和消费者实例B类对象,这些信息对象分别记录了消费者实例类别所订阅的消息主题信息及与所订阅的消息主题对应订阅消息的信息,其中,消息主题信息包括但不限于消息主题名称和该消息主题对应的消息队列数目,订阅消息的信息为某类消费者实例所订阅的该消息主题的具体信息,通过该订阅消息可知道要将所订阅消息主题中的哪些消息队列分配给消费者实例。
在本发明实施例中,当消费者实例中生成新的灰度实例后,该新的灰度实例对应的消费者实例会生成心跳包,将心跳包发送给消息中间件服务端。当消息中间件服务端接收到心跳包后,消息中间件服务端根据该心跳包更新消费者实例对应的关系集合。在心跳包的心跳包信息中,携带有新的灰度实例对应消费者实例的消费者标识,在关系集合中,也含有消费者标识,因此,通过心跳包信息中消费者标识可确定新的灰度实例对应消费者实例,进而确定该消费者实例对应的关系集合。在关系集合中,记录了消息主题与消费者实例之间的映射关系。需要说明的是,在更新的关系集合后,同一消费者实例类别下的消费者实例在外界看来依然是等价的。
步骤S20,当侦测到执行预设负载均衡算法的执行指令后,确定所述执行指令对应的消息主题,在所述关系集合中获取所述消息主题对应消费者实例数目。
当消费者实例侦测到执行预设负载均衡算法的执行指令后,消费者实例确定执行指令对应的消息主题。其中,负载均衡算法包括但不限于轮询法、源地址哈希法和加权轮询法。
在本实施例中,执行指令的触发方式有两种,第一种触发方式为:每个消费者实例都预先设置好的了定时任务,通过该定时任务可触发执行指令,以使定时任务对应的消费者实例定期执行负载均衡算法,以更新对应消费者实例所订阅的消息主题中消息队列信息。定时任务对应的定时时长可根据具体需要而设置,不同消息者实例对应的定时时长可以相同,也可以不相同。
第二种触发方式为:当消费者实例下线,或者有新的消费者实例上线时,消息中间件服务端会侦测到心跳包变化,具体地,当消息者实例下线时,消息中间件服务端会侦测到心跳包的缺失;当新的消费者实例上线时,消息中间件服务端会侦测到新的心跳包。当消息中间件服务端侦测到心跳包变化时,消息中间件服务端会对应更新所维护的消费者实例类别的信息对象,以及更新消息者实例类别的信息对象中的关系集合,生成更新消息,并向消费者实例类别下的所有消费者实例发送更新消息,以通过该更新消息告知对应的消费者实例,其所订阅的消息主题对应的消费者实例数目发生变化。当消费者实例接收到消息中间件服务端发送的更新消息后,触发执行预设负载均衡算法的执行指令。
需要说明的是,无论采取哪种触发方式,消费者实例都可以知道其所订阅的消息主题,即执行指令对应的消息主题。当消费者实例确定执行指令对应的消息主题后,消费者实例在关系集合中获取消息主题对应的消费者实例数目,即确定所订阅的消息主题对应的消费者实例数目。需要说明的是,同一个消息主题可被多个消费者实例订阅,即一个消息主题可对应一个消费者实例,也可对应着多个消费者实例,一个消费者实例可订阅一个消息主题,也可订阅多个消息主题。
进一步地,步骤S20包括:
步骤a,当侦测到执行预设负载均衡算法的执行指令后,确定所述执行指令对应的消息主题,在所述关系集合中获取所述消息主题对应的消费者实例列表。
步骤b,根据所述消费者实例列表确定所述消息主题对应的消费者实例数目。
具体地,当消费者实例侦测到执行预设负载均衡算法的执行指令后,确定执行指令对应的消息主题,确定该消息主题对应的关系集合,然后在所确定的关系集合中获取所订阅的消息主题对应的消费者实例列表。当确定消费者实例列表后,消费者实例根据所确定的消费者实例列表确定所订阅的消息主题对应的消费者实例数目。需要说明的是,每个消费者实例都会存在所属类别,每一消费者实例类别都存在对应的信息对象,每个信息对象中都存在对应的关系集合,在关系集合中存储有消息主题和消费者实例之间的映射关系。由此可知,确定消费者实例所属的消费者实例类别,根据消费者实例所属的消费者实例类别可确定其对应的信息对象,进而根据信息对象确定消费者实例对应的关系集合。
在本实施例的映射关系中,以消息主题为关键字,消费者实例为键值,消息主题可用主题名称来表示,消费者实例可用消费者标识来表示。在本实施例中,不限制消息主题和消费者标识的表现形式。
如图2所示,Topic1、Topic2和Topic3表示主题名称,c1、c2、c3和c4表示消费者标识。由图2可知,消费者实例c1所订阅的消息主题为Topic1、Topic2和Topic3,而Topic1对应的消费者实例列表为:c1、c2和c3,对应的消费者实例数目为3;Topic2对应的消费者实例列表为:c1、c2和c3,对应的消费者实例数目为3;Topic3对应的消费者实例列表为:c1、c2和c3,对应的消费者实例数目为3。消费者实例c3所订阅的消息主题为Topic1、Topic2、Topic3和Topic4,Topic4对应的消费者实例列表中只有一个消费者实例,就是消费者实例c3,即Topic4对应的消费者实例数目为1。
步骤S30,根据所述消费者实例数目执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例。
当确定所订阅消息主题对应的消费者实例数目后,消费者实例将消费者实例数目确定为负载均衡算法取模运算的执行参数,根据该执行参数执行负载均衡算法,以获取到消息主题中的消息队列,完成将消息主题中的消息队列分配给消费者实例的操作。
进一步地,步骤S30包括:
步骤c,将所述消费者实例数目确定为执行所述负载均衡算法的执行参数,在消息中间件名字服务中心中获取所述消息主题对应的消息队列数目。
步骤d,根据所述消息队列数目和所述执行参数执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例。
具体地,消费者实例将消费者实例数目确定为执行负载均衡算法过程中取模运算的执行参数,并在消息中间件名字服务中心中获取所订阅的各个消息主题对应的消息队列数目,其中,每一消息主题至少对应一个消息队列,每个消息队列中都存储有消息。当获取到各个消息主题对应的消息队列数目后,消费者实例根据消费者队列数目和执行参数执行负载均衡算法,使消费者实例获取到所订阅消息主题的消息队列。
为了便于理解,以图3为例进行说明。如图3所示,消息主题中有5个消息队列,记为{Q1,Q2,Q3,Q4,Q5},某类消费者实例中有3个消费者实例,记为{c1,c 2,c 3}。其中,c 2和c3为灰度实例,只有c 2和c 3两个灰度实例订阅了这个消息主题。在现有技术执行负载均衡算法过程中,会将消息队列Q1分配给消费者实例c1,消息队列Q2分配给消费者实例c2,消息队列Q3分配给消费者实例c3,消息队列Q4分配给消费者实例c1,消息队列Q5分配给消费者实例c2,然而由于消费者实例c1没有订阅该消息主题,被分配到消费者实例c1上消息队列中的消息,是无法被消费者实例c1正确消费的。而在本发明实施例中,在执行负载均衡算法过程中,不会将消息队列分配给消费者实例c1,会将消息队列Q1分配给消费者实例c2,消息队列Q2分配给消费者实例c3,消息队列Q3分配给消费者实例c2,消息队列Q4分配给消费者实例c3,消息队列Q5分配给消费者实例c2,可以确保该消息主题的所有消息队列都会被正确分配到可以消费它们的消费者实例上。
本实施例通过当检测到消费者实例中生成新的灰度实例后,发送心跳包给消息中间件服务端,以供消息中间件服务端根据心跳包更新消费者实例对应的关系集合,并在侦测到执行负载均衡算法的执行指令后,确定执行指令对应的消息主题,在关系集合中获取该消息主题对应消费者实例数目,然后根据消费者实例数目执行负载均衡算法,以将消息主题中的消息队列分配给消费者实例。实现了在生成新的灰度实例后,在消息中间件服务端中引入消息主题和消费者实例之间的关系集合,通过该关系集合记录每类消费者实例所订阅的消息主题与可以消费该消息主题的消息所对应的消费者实例之间的映射关系,根据关系集合确定消费者实例数目来执行负载均衡算法,以确保消息主题的所有消息队列都会被正确分配到可以消费它们的消费者实例上,使消息队列产品具备灰度发布的能力,保证消息主题消息队列中的消息都能被正常消费,提高了消息队列中消息被消费的成功率,提高了消息队列的可靠性、可扩展性和稳定性。
进一步地,提出本发明消息队列的分配方法第二实施例。
所述消息队列的分配方法第二实施例与所述消息队列的分配方法第一施例的区别在于,参照图4,所述计算所述待执行模块对应的异常概率的步骤包括:
步骤S40,当检测到所述消费者实例消费所述消息队列消息失败的失败消息后,将所述失败消息上传到所述消费者实例对应的重试队列中,其中,每一所述消费者实例存在对应的重试队列。
当消费者实例检测到消费所分配的消息队列中消息失败后生成的失败消息后,消费者实例将失败消息上传到其对应的重试队列中,其中,重试队列是预先设置好的,用于存储消费者实例消费失败的消息,重试队列中的消息会被消费者实例重新获取,重新消费。在本实施例中,每一消费者实例都对应着一个重试队列。可以理解的是,若消费者实例在消费消息过程中,网络故障或者消费者实例故障等都可能会造成消息消费失败。
进一步地,若生产者实例在预设时长内没有侦测到消费者实例成功消费消息的成功消息,生产者实例则重新生成消费者实例消费失败的消息,并将该重新生成的消息发送给消息中间件服务端,以供消息中间件服务端将生产者实例重新生成的消息存储至对应的消息主题中,以便于消费者实例下一次消费该消息。其中,预设时长可根据具体需要而设置,本实施例对预设时长的大小不做具体限制。
在现有技术中,是一个消费者实例类别对应一个重试队列中,即一类消费者实例对应一个重试队列,同类消费者实例共用一个重试队列,会导致灰度实例所订阅的消息主题中的消息队列被分配到没有订阅该消息主题的非灰度实例中,导致消息消费失败的情况出现。而在本实施例中,是每个消费者实例都对应一个重试队列,每个消费者实例都只维护自己的重试队列,不同消费者实例之间的重试队列彼此隔离,避免了灰度实例中订阅的消息主题的消息不能被非灰度实例消费的情况出现,进一步提高了消息队列中消息被消费的成功率。
进一步地,提出本发明消息队列的分配方法第三实施例。
参照图5,所述消息队列的分配方法包括:
步骤S50,当消息中间件服务端接收到消费者实例生成新的灰度实例后发送的心跳包后,根据所述心跳包更新所述消息者实例对应的关系集合。
当消费者实例生成新的灰度实例后,发送心跳包给消息中间件服务端。当消息中间件服务端接收到消费者实例发送的心跳包后,消息中间件服务端根据心跳包更新消费者实例对应的关系集合。
进一步地,步骤S50包括:
步骤e,当消息中间件服务端接收到消费者实例生成新的灰度实例后发送的心跳包后,获取所述心跳包中的心跳包信息。
具体地,当消息中间件服务端接收到消费者实例生成新的灰度实例后发送的心跳包后,消息中间件服务端获取心跳包中的心跳包信息,其中,心跳包信息包括心跳包对应消费者实例的消费者标识、消费者实例所订阅消息主题的消息主题名称和心跳包对应消费者实例类别等。
步骤f,根据所述心跳包信息记录消息主题与消费者实例之间的映射关系,以更新所述消费者实例对应的关系集合,其中,所述关系集合中存储有消息主题和消费者实例之间的映射关系。
当消息中间件服务端获取到心跳包信息后,消息中间件服务端根据心跳包信息更新消费者实例类别的信息对象,以及根据心跳包信息更新消息主题和消费者实例之间的映射关系,以更新消费者实例对应的关系集合,其中,关系集合中存储有消息主题和消费者实例之间的映射关系。在本实施例中,映射关系以消费者实例为关键字,消息主题为键值。如若该消费者实例新订阅了某个消息主题,则在该消费者实例对应消费者实例类别的信息对象中增加该消息主题,以及在该消费者实例对应的映射关系中增加一个消息主题的键值。
步骤S60,当接收到生产者实例发送的待消费消息后,确定所述待消费消息对应的消息主题。
当生产者实例生成新的,需要被消费的待消费消息后,生产者实例会将该待消费消息发送给消息中间件服务端。当消息中间件接收到生产者实例发送的待消费消息后,消息中间件服务端确定待消费消息对应的消息主题。其中,待消费消息中携带有其对应的消息主题名称,根据该消息主题名称可确定待消费消息对应的消息主题。
步骤S70,轮询访问所述关系集合,以查找到订阅所述消息主题的目标消费者实例,将所述消息主题中的消息队列分配给所述目标消费者实例。
当确定待消费消息对应的消息主题后,消息中间件服务端轮询访问关系集合,以查找到订阅该消息主题的目标消费者实例,将消息主题中的消息队列分配给目标消费者实例。需要说明的是,在消息主题中,存在至少一个消息队列,每个消息队列都存储了对应的消息。
具体地,消息中间件服务端根据预先设置好的负载均衡算法决定具体如何轮询访问关系集合,在轮询访问关系集合过程中,消息中间件服务端若检测到当前的消费者实例未订阅待消费消息对应的消息主题,则继续访问关系集合中的下一个消费者实例,依次循环,直到查找到订阅待消费消息对应的消息主题的所有消费者实例;消息中间件服务端若检测到当前的消费者实例订阅了待消费消息对应的消息主题,则将当前的消费者实例确定为目标消费者实例,并继续访问关系集合中的下一个消费者实例,依次循环,直到查找到订阅待消费消息对应消息主题的所有消费者实例,即直到查找到所有的目标消费者实例。需要说明的是,将消息主题中的消息队列分配给目标消费者实例的过程与第一实施例中将消息主题中的消息队列分配给目标消费者实例的过程一致,在此不再详细赘述。
本实施例通过消息中间件服务端接收到消费者实例发送的心跳包后,更新关系集合,在接收到生产者实例发送的待消费消息后,确定待消费消息对应的消息主题,并轮询访问关系集合,以查找到订阅消息主题的目标消费者实例,将消息主题中的消息队列分配给目标消费者实例。实现了在生成新的灰度实例后,在消息中间件服务端中引入消息主题和消费者实例之间的关系集合,通过该关系集合记录每类消费者实例所订阅的消息主题与可以消费该消息主题的消息所对应消费者实例之间的映射关系,根据关系集合确保消息主题的所有消息队列都会被正确分配到可以消费它们的消费者实例上,使消息队列产品具备灰度发布的能力,保证消息主题消息队列中的消息都能被正常消费,提高了消息队列中消息被消费的成功率,提高了消息队列的可靠性、可扩展性和稳定性。
此外,参照图6,本发明还提供一种消息队列的分配装置,所述消息队列的分配装置包括:
发送模块10,用于当检测到消费者实例中生成新的灰度实例后,发送心跳包给消息中间件服务端,以供所述消息中间件服务端根据所述心跳包更新所述消费者实例对应的关系集合;
确定模块20,用于当侦测到执行预设负载均衡算法的执行指令后,确定所述执行指令对应的消息主题;
获取模块30,用于在所述关系集合中获取所述消息主题对应消费者实例数目;
执行模块40,用于根据所述消费者实例数目执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例。
进一步地,所述消息队列的分配装置还包括:
上传模块,用于当检测到所述消费者实例消费所述消息队列消息失败的失败消息后,将所述失败消息上传到所述消费者实例对应的重试队列中,其中,每一所述消费者实例存在对应的重试队列。
进一步地,所述执行模块40包括:
确定单元,用于将所述消费者实例数目确定为执行所述负载均衡算法的执行参数;
获取单元,用于在消息中间件名字服务中心中获取所述消息主题对应的消息队列数目;
执行单元,用于根据所述消息队列数目和所述执行参数执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例。
进一步地,所述确定模块20还用于当侦测到执行预设负载均衡算法的执行指令后,确定所述执行指令对应的消息主题;
所述获取模块30还用于在所述关系集合中获取所述消息主题对应的消费者实例列表;
所述确定模块20还用于根据所述消费者实例列表确定所述消息主题对应的消费者实例数目。
需要说明的是,消息队列的分配装置的各个实施例与上述消息队列的分配方法的各实施例基本相同,在此不再详细赘述。
此外,本发明还提供一种消息队列的分配装置,所述消息队列的分配装置应用与消息中间件服务端,所述消息队列的分配装置包括:
更新模块,用于当接收到消费者实例生成新的灰度实例后发送的心跳包后,根据所述心跳包更新所述消息者实例对应的关系集合;
确定模块,用于当接收到生产者实例发送的待消费消息后,确定所述待消费消息对应的消息主题;
访问模块,用于轮询访问所述关系集合,以查找到订阅所述消息主题的目标消费者实例,将所述消息主题中的消息队列分配给所述目标消费者实例。
进一步地,所述更新模块包括:
获取单元,用于当消息中间件服务端接收到消费者实例生成新的灰度实例后发送的心跳包后,获取所述心跳包中的心跳包信息;
记录单元,用于根据所述心跳包信息记录消息主题与消费者实例之间的映射关系,以更新所述消费者实例对应的关系集合,其中,所述关系集合中存储有消息主题和消费者实例之间的映射关系。
需要说明的是,消息队列的分配装置的各个实施例与上述消息队列的分配方法的各实施例基本相同,在此不再详细赘述。
此外,本发明还提供一种消息队列的分配设备。如图7所示,图7是本发明实施例方案涉及的硬件运行环境的结构示意图。
需要说明的是,图7即可为消息队列的分配设备的硬件运行环境的结构示意图。本发明实施例消息队列的分配设备可以是PC,便携计算机等终端设备。
如图7所示,该消息队列的分配设备可以包括:处理器1001,例如CPU,存储器1005,用户接口1003,网络接口1004,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
可选地,消息队列的分配设备还可以包括摄像头、RF(Radio Frequency,射频)电路,传感器、音频电路、WiFi模块等等。
本领域技术人员可以理解,图7中示出的消息队列的分配设备结构并不构成对消息队列的分配设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图7所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及消息队列的分配程序。其中,操作系统是管理和控制消息队列的分配设备硬件和软件资源的程序,支持消息队列的分配程序以及其它软件或程序的运行。
在图7所示的消息队列的分配设备中,消息中间件服务端和消费者实例可以安装于消息队列的分配设备中,用户接口1003主要用于连接客户端,与客户端进行数据通信;网络接口1004主要用于后台服务器,与后台服务器进行数据通信;处理器1001可以用于调用存储器1005中存储的消息队列的分配程序,并执行如上所述的消息队列的分配方法的步骤。
本发明消息队列的分配设备具体实施方式与上述消息队列的分配方法各实施例基本相同,在此不再赘述。
此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有消息队列的分配程序,所述消息队列的分配程序被处理器执行时实现如上所述的消息队列的分配方法的步骤。
本发明计算机可读存储介质具体实施方式与上述消息队列的分配方法各实施例基本相同,在此不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种消息队列的分配方法,其特征在于,所述消息队列的分配方法包括以下步骤:
当检测到消费者实例中生成新的灰度实例后,发送心跳包给消息中间件服务端,以供所述消息中间件服务端根据所述心跳包更新所述消费者实例对应的关系集合;
当侦测到执行预设负载均衡算法的执行指令后,确定所述执行指令对应的消息主题,在所述关系集合中获取所述消息主题对应消费者实例数目;
根据所述消费者实例数目执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例。
2.如权利要求1所述的消息队列的分配方法,其特征在于,所述根据所述消费者实例数目执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例的步骤之后,还包括:
当检测到所述消费者实例消费所述消息队列消息失败的失败消息后,将所述失败消息上传到所述消费者实例对应的重试队列中,其中,每一所述消费者实例存在对应的重试队列。
3.如权利要求1所述的消息队列的分配方法,其特征在于,所述根据所述消费者实例数目执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例的步骤包括:
将所述消费者实例数目确定为执行所述负载均衡算法的执行参数,在消息中间件名字服务中心中获取所述消息主题对应的消息队列数目;
根据所述消息队列数目和所述执行参数执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例。
4.如权利要求1至3任一项所述的消息队列的分配方法,其特征在于,所述当侦测到执行预设负载均衡算法的执行指令后,确定所述执行指令对应的消息主题,在所述关系集合中获取所述消息主题对应消费者实例数目的步骤包括:
当侦测到执行预设负载均衡算法的执行指令后,确定所述执行指令对应的消息主题,在所述关系集合中获取所述消息主题对应的消费者实例列表;
根据所述消费者实例列表确定所述消息主题对应的消费者实例数目。
5.一种消息队列的分配方法,其特征在于,所述消息队列的分配方法包括以下步骤:
当消息中间件服务端接收到消费者实例生成新的灰度实例后发送的心跳包后,根据所述心跳包更新所述消息者实例对应的关系集合;
当接收到生产者实例发送的待消费消息后,确定所述待消费消息对应的消息主题;
轮询访问所述关系集合,以查找到订阅所述消息主题的目标消费者实例,将所述消息主题中的消息队列分配给所述目标消费者实例。
6.如权利要求5所述的消息队列的分配方法,其特征在于,所述当消息中间件服务端接收到消费者实例生成新的灰度实例后发送的心跳包后,根据所述心跳包更新所述消息者实例对应的关系集合的步骤包括:
当消息中间件服务端接收到消费者实例生成新的灰度实例后发送的心跳包后,获取所述心跳包中的心跳包信息;
根据所述心跳包信息记录消息主题与消费者实例之间的映射关系,以更新所述消费者实例对应的关系集合,其中,所述关系集合中存储有消息主题和消费者实例之间的映射关系。
7.一种消息队列的分配装置,其特征在于,所述消息队列的分配装置包括:
发送模块,用于当检测到消费者实例中生成新的灰度实例后,发送心跳包给消息中间件服务端,以供所述消息中间件服务端根据所述心跳包更新所述消费者实例对应的关系集合;
确定模块,用于当侦测到执行预设负载均衡算法的执行指令后,确定所述执行指令对应的消息主题;
获取模块,用于在所述关系集合中获取所述消息主题对应消费者实例数目;
执行模块,用于根据所述消费者实例数目执行所述负载均衡算法,以将所述消息主题中的消息队列分配给所述消费者实例。
8.一种消息队列的分配装置,其特征在于,所述消息队列的分配装置应用于消息中间件服务端,所述消息队列的分配装置包括:
更新模块,用于当接收到消费者实例生成新的灰度实例后发送的心跳包后,根据所述心跳包更新所述消息者实例对应的关系集合;
确定模块,用于当接收到生产者实例发送的待消费消息后,确定所述待消费消息对应的消息主题;
访问模块,用于轮询访问所述关系集合,以查找到订阅所述消息主题的目标消费者实例,将所述消息主题中的消息队列分配给所述目标消费者实例。
9.一种消息队列的分配设备,其特征在于,所述消息队列的分配设备包括存储器、处理器和存储在所述存储器上并可在所述处理器上运行的消息队列的分配程序,所述消息队列的分配程序被所述处理器执行时实现如权利要求1至4或5至6中任一项所述的消息队列的分配方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有消息队列的分配程序,所述消息队列的分配程序被处理器执行时实现如权利要求1至4或5至6中任一项所述的消息队列的分配方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911032575.0A CN110781015A (zh) | 2019-10-28 | 2019-10-28 | 消息队列的分配方法、装置、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911032575.0A CN110781015A (zh) | 2019-10-28 | 2019-10-28 | 消息队列的分配方法、装置、设备及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110781015A true CN110781015A (zh) | 2020-02-11 |
Family
ID=69387121
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911032575.0A Pending CN110781015A (zh) | 2019-10-28 | 2019-10-28 | 消息队列的分配方法、装置、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110781015A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111736872A (zh) * | 2020-06-22 | 2020-10-02 | 平安健康保险股份有限公司 | 灰度发布升级方法、装置、计算机系统及可读存储介质 |
CN111756652A (zh) * | 2020-06-11 | 2020-10-09 | 上海乾臻信息科技有限公司 | 消息传输及消息队列管理方法、装置及系统 |
CN111784329A (zh) * | 2020-06-30 | 2020-10-16 | 京东数字科技控股有限公司 | 业务数据的处理方法和装置、存储介质、电子装置 |
CN112069265A (zh) * | 2020-09-11 | 2020-12-11 | 中国工商银行股份有限公司 | 配置数据的同步方法、业务数据系统、计算机系统和介质 |
CN112114845A (zh) * | 2020-08-06 | 2020-12-22 | 北京健康之家科技有限公司 | 灰度消息的处理方法及装置、存储介质、计算机设备 |
CN114116219A (zh) * | 2021-11-25 | 2022-03-01 | 北京力控元通科技有限公司 | 一种数据分布均衡方法、系统及电子设备 |
CN115914346A (zh) * | 2021-08-09 | 2023-04-04 | 中移物联网有限公司 | 物联网消息处理方法、装置、电子设备及存储介质 |
-
2019
- 2019-10-28 CN CN201911032575.0A patent/CN110781015A/zh active Pending
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111756652A (zh) * | 2020-06-11 | 2020-10-09 | 上海乾臻信息科技有限公司 | 消息传输及消息队列管理方法、装置及系统 |
CN111756652B (zh) * | 2020-06-11 | 2023-07-18 | 上海乾臻信息科技有限公司 | 消息传输及消息队列管理方法、装置及系统 |
CN111736872A (zh) * | 2020-06-22 | 2020-10-02 | 平安健康保险股份有限公司 | 灰度发布升级方法、装置、计算机系统及可读存储介质 |
CN111736872B (zh) * | 2020-06-22 | 2023-07-14 | 平安健康保险股份有限公司 | 灰度发布升级方法、装置、计算机系统及可读存储介质 |
CN111784329A (zh) * | 2020-06-30 | 2020-10-16 | 京东数字科技控股有限公司 | 业务数据的处理方法和装置、存储介质、电子装置 |
CN111784329B (zh) * | 2020-06-30 | 2024-04-05 | 京东科技控股股份有限公司 | 业务数据的处理方法和装置、存储介质、电子装置 |
CN112114845A (zh) * | 2020-08-06 | 2020-12-22 | 北京健康之家科技有限公司 | 灰度消息的处理方法及装置、存储介质、计算机设备 |
CN112114845B (zh) * | 2020-08-06 | 2023-08-11 | 北京水滴科技集团有限公司 | 灰度消息的处理方法及装置、存储介质、计算机设备 |
CN112069265A (zh) * | 2020-09-11 | 2020-12-11 | 中国工商银行股份有限公司 | 配置数据的同步方法、业务数据系统、计算机系统和介质 |
CN112069265B (zh) * | 2020-09-11 | 2024-01-30 | 中国工商银行股份有限公司 | 配置数据的同步方法、业务数据系统、计算机系统和介质 |
CN115914346A (zh) * | 2021-08-09 | 2023-04-04 | 中移物联网有限公司 | 物联网消息处理方法、装置、电子设备及存储介质 |
CN114116219A (zh) * | 2021-11-25 | 2022-03-01 | 北京力控元通科技有限公司 | 一种数据分布均衡方法、系统及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110781015A (zh) | 消息队列的分配方法、装置、设备及计算机可读存储介质 | |
CN108632374B (zh) | 软件灰度发布方法及装置 | |
CN106059825A (zh) | 一种分布式系统及配置方法 | |
CN110868465A (zh) | 一种容器云的负载均衡系统及方法 | |
CN110753129A (zh) | 消息传输方法、系统、装置、设备及计算机可读存储介质 | |
CN108156252B (zh) | 一种数据访问方法、装置、服务器及客户端 | |
CN110300067B (zh) | 队列调整方法、装置、设备及计算机可读存储介质 | |
CN108337127B (zh) | 应用性能监控方法、系统、终端及计算机可读存储介质 | |
CN113452774B (zh) | 消息推送方法、装置、设备及存储介质 | |
CN114610499A (zh) | 任务调度方法、装置、计算机可读存储介质及电子设备 | |
CN111078238A (zh) | 容器环境下应用配置集中处理方法及装置 | |
CN105530323B (zh) | 一种文件升级方法、相关设备及系统 | |
CN111240998B (zh) | 测试用例处理方法和装置 | |
CN106657195B (zh) | 任务处理方法和中继设备 | |
CN112463376A (zh) | 一种资源分配方法及装置 | |
CN111464574B (zh) | 调用、加载、注册、管理方法和路由、服务器、节点和介质 | |
CN110933070A (zh) | 一种用户识别方法、系统、设备及计算机可读存储介质 | |
CN115329005A (zh) | 多集群的协同方法、系统、装置及计算机可读存储介质 | |
CN113660121B (zh) | 基于分布式系统的信息管理方法、装置及计算机存储介质 | |
CN114489892A (zh) | 数据处理方法、装置、计算机可读存储介质和计算机设备 | |
CN113220342A (zh) | 中心化配置方法、装置、电子设备及存储介质 | |
CN109510855B (zh) | 事件分发系统、方法及装置 | |
CN113835846B (zh) | k8s集群的创建方法、装置及计算机可读存储介质 | |
CN114244903B (zh) | 资源调度方法、系统、服务器及存储介质 | |
CN113067869B (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 |