CN116016655A - 基于RabbitMQ的消息处理方法、系统及相关设备 - Google Patents
基于RabbitMQ的消息处理方法、系统及相关设备 Download PDFInfo
- Publication number
- CN116016655A CN116016655A CN202211699341.3A CN202211699341A CN116016655A CN 116016655 A CN116016655 A CN 116016655A CN 202211699341 A CN202211699341 A CN 202211699341A CN 116016655 A CN116016655 A CN 116016655A
- Authority
- CN
- China
- Prior art keywords
- message
- weight
- target
- service instance
- pushing
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 26
- 238000012545 processing Methods 0.000 claims abstract description 47
- 238000000034 method Methods 0.000 claims abstract description 33
- 230000004044 response Effects 0.000 claims abstract description 26
- 238000011084 recovery Methods 0.000 claims description 6
- 238000004590 computer program Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
Images
Classifications
-
- 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
- Telephonic Communication Services (AREA)
Abstract
本申请公开了一种基于RabbitMQ的消息处理方法、系统及相关设备,该方法包括:获取权重配置信息,所述权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等,所述权重配置信息预先存储在配置中心;基于所述权重配置信息,获取目标权重值,并基于所述目标权重值,向RabbitMQ服务器订阅消息队列;当接收到来自所述RabbitMQ服务器的消息时,向所述RabbitMQ服务器返回应答消息,以及将所述消息转发至客户端。本申请可以保证任何时刻仅有一个服务实例在处理消息,避免消息乱序的问题;且可以保证消息队列的正常消费,避免发生额外的消息延时。
Description
技术领域
本申请涉及消息处理技术领域,更具体地说,是涉及一种基于RabbitMQ的消息处理方法、系统及相关设备。
背景技术
RabbitMQ是一套开源(MPL)的消息队列服务软件,可以使用RabbitMQ作为消息主线,通过订阅RabbitMQ队列,以及串行处理消息的方式来实现消息的顺序性。然而,在实际使用中会存在以下问题:
为了保证消息顺序消费,避免出现乱序的情况,只采用一个服务实例去消费RabbitMQ队列。但是,当该服务实例异常退出时,就会出现单点问题,没有其他服务能消费RabbitMQ队列的消息,直到该服务恢复才能继续消费消息,从而出现业务恢复慢,导致消息到达延迟。
如果启动多个服务实例(即分布式服务)来订阅同一个RabbitMQ队列,这些服务实例会抢夺消费RabbitMQ队列的消息,可能会导致消息乱序。
发明内容
有鉴于此,本申请提供了一种基于RabbitMQ的消息处理方法、系统及相关设备,以按照顺序及时处理消息。
为实现上述目的,本申请第一方面提供了一种基于RabbitMQ的消息处理方法,所述方法应用于服务实例,所述方法包括:
获取权重配置信息,所述权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等,所述权重配置信息预先存储在配置中心;
基于所述权重配置信息,获取目标权重值,并基于所述目标权重值,向RabbitMQ服务器订阅消息队列;
当接收到来自所述RabbitMQ服务器的消息时,向所述RabbitMQ服务器返回应答消息,以及将所述消息转发至客户端。
优选地,还包括:
当接收到升级指令时,基于所述权重配置信息,确定新的权重值,所述新的权重值大于其他任何服务实例的权重值;
基于所述新的权重值,向RabbitMQ服务器订阅消息队列。
优选地,还包括:
当接收到恢复指令时,基于所述目标权重值,向RabbitMQ服务器订阅消息队列。
本申请第二方面提供了一种基于RabbitMQ的消息处理方法,所述方法应用于RabbitMQ服务器,所述方法包括:
获取各目标服务实例的权重值,所述目标服务实例为订阅了消息队列的服务实例;
将权重值最大的目标服务实例确定为推送目标;
向推送目标推送消息,并判断是否接收到推送目标对所述消息的应答消息;
若是,返回执行向推送目标推送消息的步骤;
若否,注销所述权重值最大的目标服务实例,并返回执行获取各目标服务实例的权重值的步骤。
优选地,还包括:
当出现新的目标服务实例时,返回执行获取各目标服务实例的权重值的步骤。
本申请第三方面提供了一种基于RabbitMQ的消息处理系统,包括:
配置中心、RabbitMQ服务器以及多个服务实例;
所述配置中心用于存储权重配置信息,所述权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等;
所述服务实例用于实现如上述的应用于服务实例的基于RabbitMQ的消息处理方法的各个步骤;
所述RabbitMQ服务器用于实现如上述的应用于RabbitMQ服务器的基于RabbitMQ的消息处理方法的各个步骤。
本申请第四方面提供了一种基于RabbitMQ的消息处理装置,所述装置应用于服务实例,所述装置包括:
权重获取单元,用于获取权重配置信息,所述权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等,所述权重配置信息预先存储在配置中心;
消息订阅单元,用于基于所述权重配置信息,获取目标权重值,并基于所述目标权重值,向RabbitMQ服务器订阅消息队列;
消息处理单元,用于当接收到来自所述RabbitMQ服务器的消息时,向所述RabbitMQ服务器返回应答消息,以及将所述消息转发至客户端。
本申请第五方面提供了一种基于RabbitMQ的消息处理装置,所述装置应用于RabbitMQ服务器,所述装置包括:
全局权重获取单元,用于获取各目标服务实例的权重值,所述目标服务实例为订阅了消息队列的服务实例;
推送目标确定单元,用于将权重值最大的目标服务实例确定为推送目标;
消息队列推送单元,用于向推送目标推送消息,并判断是否接收到推送目标对所述消息的应答消息;
第一分支处理单元,用于当所述消息推送单元判断出接收到推送目标对所述消息的应答消息时,返回执行消息队列推送单元;
第二分支处理单元,用于当所述消息推送单元判断出没有接收到推送目标对所述消息的应答消息时,注销所述权重值最大的目标服务实例,并返回执行全局权重获取单元。
本申请第六方面提供了一种基于RabbitMQ的消息处理设备,包括:存储器和处理器;
所述存储器,用于存储程序;
所述处理器,用于执行所述程序,实现上述的基于RabbitMQ的消息处理方法的各个步骤。
本申请第七方面提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如上述的基于RabbitMQ的消息处理方法的各个步骤。
经由上述的技术方案可知,本申请中的服务实例首先获取权重配置信息,其中,所述权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等,所述权重配置信息预先存储在配置中心。由于各服务实例的权重值互不相等,有且仅有一个权重值最大的服务实例,所以RabbitMQ服务器可以向所述权重值最大的服务实例推送消息队列,保证任何时刻仅有一个服务实例在处理消息,避免消息乱序的问题。接着,基于所述权重配置信息,获取目标权重值,其中,所述目标权重值为记载于所述权重配置信息中、对应于本服务实例的权重值。然后,基于所述目标权重值,向RabbitMQ服务器订阅消息队列。当接收到来自所述RabbitMQ服务器的消息时,向所述RabbitMQ服务器返回应答消息,以及将所述消息转发至客户端。由于存在多个服务实例的权重值,意味着有多个服务实例向RabbitMQ服务器订阅了消息队列,因此,当权重值最大的服务实例发生故障,无法正确响应RabbitMQ服务器推送的消息时,RabbitMQ服务器可以基于权重值转向其他服务实例推送消息队列,保证消息队列的正常消费,避免发生额外的消息延时。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例公开的各执行主体的连接关系示意图;
图2为本申请实施例公开的应用于服务实例的消息处理方法的示意图;
图3为本申请实施例公开的应用于RabbitMQ服务器的消息处理方法的示意图;
图4为本申请实施例公开的信令图;
图5为本申请实施例公开的应用于服务实例的消息处理装置的示意图;
图6为本申请实施例公开的应用于RabbitMQ服务器的消息处理装置的示意图;
图7为本申请实施例公开的基于RabbitMQ的消息处理设备的硬件结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供的基于RabbitMQ的消息处理方法涉及多个执行主体,为便于理解,下面介绍一下这些主体的连接关系。请参阅图1,该基于RabbitMQ的消息处理方法所涉及的主体包括配置中心、RabbitMQ服务器以及多个服务实例。其中,配置中心用于存储各服务实例的权重配置信息,示例性地,该权重配置信息可以以表格形式存储于配置中心中,具体地,该权重配置信息表以各服务实例为索引,以服务实例对应的权重值为值。该权重配置信息为预先配置好的,为不同的服务实例分配有不同的权重值。RabbitMQ服务器作为一消息队列服务器,以先进先出的规则将消息队列中的消息逐条推送给各服务实例中的其中一个。任何时刻,各服务实例中仅有一个服务实例在接收由RabbitMQ服务器推送的消息队列。对于任一服务实例,一旦接收到由RabbitMQ服务器推送的消息,随即返回针对该消息的应答消息,同时将该消息转发至客户端。
下面从服务实例的角度,介绍本申请实施例提供的基于RabbitMQ的消息处理方法。请参阅图2,本申请实施例提供的应用于服务实例的基于RabbitMQ的消息处理方法可以包括如下步骤:
步骤S101,获取权重配置信息。
其中,该权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等,且该权重配置信息预先存储在配置中心。
步骤S102,基于该权重配置信息,获取目标权重值,并基于该目标权重值,向RabbitMQ服务器订阅消息队列。
可以理解的是,该目标权重值为记载在权重配置信息中的、对应于本服务实例的权重值。
步骤S103,当接收到来自RabbitMQ服务器的消息时,向RabbitMQ服务器返回应答消息,以及将该消息转发至客户端。
应答消息可以让RabbitMQ服务器确信服务实例有正常工作。当服务实例无法返回应答消息,此时,RabbitMQ服务器认为该服务实例发生故障,则转向其他服务实例继续消息推送的工作。
本申请中的服务实例首先获取权重配置信息,其中,所述权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等,所述权重配置信息预先存储在配置中心。由于各服务实例的权重值互不相等,有且仅有一个权重值最大的服务实例,所以RabbitMQ服务器可以向所述权重值最大的服务实例推送消息队列,保证任何时刻仅有一个服务实例在处理消息,避免消息乱序的问题。接着,基于所述权重配置信息,获取目标权重值,其中,所述目标权重值为记载于所述权重配置信息中、对应于本服务实例的权重值。然后,基于所述目标权重值,向RabbitMQ服务器订阅消息队列。当接收到来自所述RabbitMQ服务器的消息时,向所述RabbitMQ服务器返回应答消息,以及将所述消息转发至客户端。由于存在多个服务实例的权重值,意味着有多个服务实例向RabbitMQ服务器订阅了消息队列,因此,当权重值最大的服务实例发生故障,无法正确响应RabbitMQ服务器推送的消息时,RabbitMQ服务器可以基于权重值转向其他服务实例推送消息队列,保证消息队列的正常消费,避免发生额外的消息延时。
在日常运维中,各服务实例需要定期或不定期地做维护,如更换磁盘等,此时,对于正在履行消息接收的服务实例,需要暂停接收RabbitMQ服务器推送的消息,改由其他服务实例来履行相关工作。
基于此,在本申请的一些实施例中,该应用于服务实例的基于RabbitMQ的消息处理方法,还可以包括:
步骤S104,当接收到升级指令时,基于该权重配置信息,确定新的权重值。
步骤S105,基于该新的权重值,向RabbitMQ服务器订阅消息队列。
其中,该新的权重值大于其他任何服务实例的权重值。可以理解的是,由于RabbitMQ服务器被配置为向权重值最高的服务实例推送消息队列,当出现更大的权重值时,RabbitMQ服务器会转向该具有更大权重值的服务实例进行消息队列推送,此时,需要暂停接收消息推送的服务实例可以避免成为消息队列推送的目标。
在步骤S101获取的权重配置信息中,各服务实例的权重值是预先规划好的,可以理解的是,这些权重配置信息是依据各服务实例的软硬件性能来进行配置的。当维护完成后,还需要恢复原先的权重值,以符合原先设定的工作规划。
基于此,在本申请的一些实施例中,该应用于服务实例的基于RabbitMQ的消息处理方法,还可以包括:
当接收到恢复指令时,基于该目标权重值,向RabbitMQ服务器订阅消息队列。
下面从RabbitMQ服务器的角度,介绍本申请实施例提供的基于RabbitMQ的消息处理方法。请参阅图3,本申请实施例提供的应用于RabbitMQ服务器的基于RabbitMQ的消息处理方法,可以包括如下步骤:
步骤S201,获取各目标服务实例的权重值。
其中,该目标服务实例为订阅了消息队列的服务实例。各服务实例在向RabbitMQ服务器订阅消息时附带有服务实例的权重值。
步骤S202,将权重值最大的目标服务实例确定为推送目标。
由于存储于配置中心的权重配置信息中,各服务实例的权重值互不相等,因此,仅有一个权重值最大的目标服务实例,即RabbitMQ服务器仅将一个服务实例确定为推送目标。
步骤S203,向推送目标推送消息。
具体地,RabbitMQ服务器依据先到先出的规则将消息队列中的各消息逐条推送给推送目标。
步骤S204,判断是否接收到推送目标对该消息的应答消息。若是,返回执行步骤S203;若否,执行步骤S205。
步骤S205,注销权重值最大的目标服务实例,并返回执行步骤S201。
权重值最大的目标服务实例即当前的推送目标,示例性地,RabbitMQ服务器将权重值最大的目标服务实例从订阅列表中移除出去,不再将该目标服务实例纳入消息队列推送的候选对象。
实际应用中,各服务实例并非同时向RabbitMQ服务器订阅消息,其中会有先有后。此外,如前文所述,有部分服务实例可能会中途更改权重值,重新向RabbitMQ服务器订阅消息,而RabbitMQ服务器必须保证每时每刻均向权重值最高的、唯一的服务实例进行消息队列推送。
基于此,在本申请的一些实施例中,该应用于RabbitMQ服务器的基于RabbitMQ的消息处理方法,还可以包括:
当出现新的目标服务实例时,返回执行步骤S201。
下面对本申请实施例提供的基于RabbitMQ的消息处理系统进行描述,请同时参见图1和图4,本申请实施例提供的基于RabbitMQ的消息处理系统,可以包括配置中心、RabbitMQ服务器以及多个服务实例。
其中,配置中心用于存储权重配置信息,权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等。
服务实例用于实现如前文描述的应用于服务实例的基于RabbitMQ的消息处理方法的各个步骤。
RabbitMQ服务器用于实现如前文描述的应用于RabbitMQ服务器的基于RabbitMQ的消息处理方法的各个步骤。
请参阅图4,服务实例A启动时,向配置中心读取服务实例A对应的权重配置rabbitmqArgs,如权重值为20,使用该权重配置去订阅RabbitMQ的消息队列。
服务实例B启动时,向配置中心读取服务实例B对应的权重配置rabbitmqArgs,如权重值为10,使用该权重配置去订阅RabbitMQ的队列。
后续,服务实例存在4种状态
1)正常情况下,RabbitMQ服务器将队列的消息推送给权重更高的服务实例A,而权重更低的服务实例B不会处理队列的消息。保证了只有一个消费者在处理消息,解决了多个消费者抢夺消息,可能造成的消息乱序问题。
2)当权重更高的服务实例A发生异常时,RabbitMQ服务器将队列的消息推送给权重次高的服务实例B。此时队列的消息不会积压,整体服务是持续可用的,解决了服务单点的问题。
3)当权重更高的服务实例A恢复时,RabbitMQ服务器将队列的消息推送给权重更高的服务实例A,而权重更低的服务实例B不会再处理队列的消息,实现优先让机器性能更好的服务器来消费消息队列。
4)当权重更高的服务实例A需要做维护(比如更换磁盘),可以通过提高配置中心的服务实例B的权重值,比如调到30,重启服务实例B后重连RabbitMQ,则RabbitMQ将队列的消息推送给权重为30的服务实例B,这时可以对服务实例A做重启或者其他维护操作。
下面从服务实例的角度,对本申请实施例提供的基于RabbitMQ的消息处理装置进行描述,下文描述的基于RabbitMQ的消息处理装置与上文描述的应用于服务实例的基于RabbitMQ的消息处理方法可相互对应参照。
请参见图5,本申请实施例提供的应用于服务实例的基于RabbitMQ的消息处理装置,可以包括:
权重获取单元21,用于获取权重配置信息,所述权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等,所述权重配置信息预先存储在配置中心;
消息订阅单元22,用于基于所述权重配置信息,获取目标权重值,并基于所述目标权重值,向RabbitMQ服务器订阅消息队列;
消息处理单元23,用于当接收到来自所述RabbitMQ服务器的消息时,向所述RabbitMQ服务器返回应答消息,以及将所述消息转发至客户端。
在本申请的一些实施例中,应用于服务实例的基于RabbitMQ的消息处理装置,还可以包括权重升级单元;
所述权重升级单元,用于:
当接收到升级指令时,基于所述权重配置信息,确定新的权重值,所述新的权重值大于其他任何服务实例的权重值;
基于所述新的权重值,向RabbitMQ服务器订阅消息队列。
在本申请的一些实施例中,应用于服务实例的基于RabbitMQ的消息处理装置,还可以包括权重恢复单元;
所述权重恢复单元,用于:
当接收到恢复指令时,基于所述目标权重值,向RabbitMQ服务器订阅消息队列。
下面从RabbitMQ服务器的角度,对对本申请实施例提供的基于RabbitMQ的消息处理装置进行描述,下文描述的基于RabbitMQ的消息处理装置与上文描述的应用于RabbitMQ服务器的基于RabbitMQ的消息处理方法可相互对应参照。
请参见图6,本申请实施例提供的应用于RabbitMQ服务器的基于RabbitMQ的消息处理装置,可以包括:
全局权重获取单元41,用于获取各服务实例的权重值,所述服务实例为订阅了消息队列的服务实例;
推送目标确定单元42,用于将权重值最大的服务实例确定为推送目标;
消息队列推送单元43,用于向推送目标推送消息,并判断是否接收到推送目标对所述消息的应答消息;
第一分支处理单元44,用于当所述消息推送单元判断出接收到推送目标对所述消息的应答消息时,返回执行消息队列推送单元;
第二分支处理单元45,用于当所述消息推送单元判断出没有接收到推送目标对所述消息的应答消息时,注销所述权重值最大的服务实例,并返回执行全局权重获取单元。
在本申请的一些实施中,该应用于RabbitMQ服务器的基于RabbitMQ的消息处理装置,还可以包括:
目标新增处理单元,用于当出现新的目标服务实例时,返回执行获取各目标服务实例的权重值的步骤。
本申请实施例提供的基于RabbitMQ的消息处理装置可应用于基于RabbitMQ的消息处理设备,如计算机等。可选的,图7示出了基于RabbitMQ的消息处理设备的硬件结构框图,参照图7,基于RabbitMQ的消息处理设备的硬件结构可以包括:至少一个处理器31,至少一个通信接口32,至少一个存储器33和至少一个通信总线34。
在本申请实施例中,处理器31、通信接口32、存储器33、通信总线34的数量为至少一个,且处理器31、通信接口32、存储器33通过通信总线34完成相互间的通信;
处理器31可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本申请实施例的一个或多个集成电路等;
存储器33可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory)等,例如至少一个磁盘存储器;
其中,存储器33存储有程序,处理器31可调用存储器33存储的程序,所述程序用于:
获取权重配置信息,所述权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等,所述权重配置信息预先存储在配置中心;
基于所述权重配置信息,获取目标权重值,并基于所述目标权重值,向RabbitMQ服务器订阅消息队列;
当接收到来自所述RabbitMQ服务器的消息时,向所述RabbitMQ服务器返回应答消息,以及将所述消息转发至客户端。
或者,
获取各目标服务实例的权重值,所述目标服务实例为订阅了消息队列的服务实例;
将权重值最大的目标服务实例确定为推送目标;
向推送目标推送消息,并判断是否接收到推送目标对所述消息的应答消息;
若是,返回执行向推送目标推送消息的步骤;
若否,注销所述权重值最大的目标服务实例,并返回执行获取各目标服务实例的权重值的步骤。
可选的,所述程序的细化功能和扩展功能可参照上文描述。
本申请实施例还提供一种存储介质,该存储介质可存储有适于处理器执行的程序,所述程序用于:
获取权重配置信息,所述权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等,所述权重配置信息预先存储在配置中心;
基于所述权重配置信息,获取目标权重值,并基于所述目标权重值,向RabbitMQ服务器订阅消息队列;
当接收到来自所述RabbitMQ服务器的消息时,向所述RabbitMQ服务器返回应答消息,以及将所述消息转发至客户端。
或者,
获取各目标服务实例的权重值,所述目标服务实例为订阅了消息队列的服务实例;
将权重值最大的目标服务实例确定为推送目标;
向推送目标推送消息,并判断是否接收到推送目标对所述消息的应答消息;
若是,返回执行向推送目标推送消息的步骤;
若否,注销所述权重值最大的目标服务实例,并返回执行获取各目标服务实例的权重值的步骤。
可选的,所述程序的细化功能和扩展功能可参照上文描述。
综上所述:
本申请中的服务实例首先获取权重配置信息,其中,所述权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等,所述权重配置信息预先存储在配置中心。由于各服务实例的权重值互不相等,有且仅有一个权重值最大的服务实例,所以RabbitMQ服务器可以向所述权重值最大的服务实例推送消息队列,保证任何时刻仅有一个服务实例在处理消息,避免消息乱序的问题。接着,基于所述权重配置信息,获取目标权重值,其中,所述目标权重值为记载于所述权重配置信息中、对应于本服务实例的权重值。然后,基于所述目标权重值,向RabbitMQ服务器订阅消息队列。当接收到来自所述RabbitMQ服务器的消息时,向所述RabbitMQ服务器返回应答消息,以及将所述消息转发至客户端。由于存在多个服务实例的权重值,意味着有多个服务实例向RabbitMQ服务器订阅了消息队列,因此,当权重值最大的服务实例发生故障,无法正确响应RabbitMQ服务器推送的消息时,RabbitMQ服务器可以基于权重值转向其他服务实例推送消息队列,保证消息队列的正常消费,避免发生额外的消息延时。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间可以根据需要进行组合,且相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种基于RabbitMQ的消息处理方法,其特征在于,包括:
获取权重配置信息,所述权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等,所述权重配置信息预先存储在配置中心;
基于所述权重配置信息,获取目标权重值,并基于所述目标权重值,向RabbitMQ服务器订阅消息队列;
当接收到来自所述RabbitMQ服务器的消息时,向所述RabbitMQ服务器返回应答消息,以及将所述消息转发至客户端。
2.根据权利要求1所述的方法,其特征在于,还包括:
当接收到升级指令时,基于所述权重配置信息,确定新的权重值,所述新的权重值大于其他任何服务实例的权重值;
基于所述新的权重值,向RabbitMQ服务器订阅消息队列。
3.根据权利要求2所述的方法,其特征在于,还包括:
当接收到恢复指令时,基于所述目标权重值,向RabbitMQ服务器订阅消息队列。
4.一种基于RabbitMQ的消息处理方法,其特征在于,包括:
获取各目标服务实例的权重值,所述目标服务实例为订阅了消息队列的服务实例;
将权重值最大的目标服务实例确定为推送目标;
向推送目标推送消息,并判断是否接收到推送目标对所述消息的应答消息;
若是,返回执行向推送目标推送消息的步骤;
若否,注销所述权重值最大的目标服务实例,并返回执行获取各目标服务实例的权重值的步骤。
5.根据权利要求4所述的方法,其特征在于,还包括:
当出现新的目标服务实例时,返回执行获取各目标服务实例的权重值的步骤。
6.一种基于RabbitMQ的消息处理系统,其特征在于,包括配置中心、RabbitMQ服务器以及多个服务实例;
所述配置中心用于存储权重配置信息,所述权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等;
所述服务实例用于实现如权利要求1~3中任一项所述的基于RabbitMQ的消息处理方法的各个步骤;
所述RabbitMQ服务器用于实现如权利要求4或5所述的基于RabbitMQ的消息处理方法的各个步骤。
7.一种基于RabbitMQ的消息处理装置,其特征在于,包括:
权重获取单元,用于获取权重配置信息,所述权重配置信息包含多个服务实例的权重值,每一服务实例的权重值互不相等,所述权重配置信息预先存储在配置中心;
消息订阅单元,用于基于所述权重配置信息,获取目标权重值,并基于所述目标权重值,向RabbitMQ服务器订阅消息队列;
消息处理单元,用于当接收到来自所述RabbitMQ服务器的消息时,向所述RabbitMQ服务器返回应答消息,以及将所述消息转发至客户端。
8.一种基于RabbitMQ的消息处理装置,其特征在于,包括:
全局权重获取单元,用于获取各目标服务实例的权重值,所述目标服务实例为订阅了消息队列的服务实例;
推送目标确定单元,用于将权重值最大的目标服务实例确定为推送目标;
消息队列推送单元,用于向推送目标推送消息,并判断是否接收到推送目标对所述消息的应答消息;
第一分支处理单元,用于当所述消息推送单元判断出接收到推送目标对所述消息的应答消息时,返回执行消息队列推送单元;
第二分支处理单元,用于当所述消息推送单元判断出没有接收到推送目标对所述消息的应答消息时,注销所述权重值最大的目标服务实例,并返回执行全局权重获取单元。
9.一种基于RabbitMQ的消息处理设备,其特征在于,包括:存储器和处理器;
所述存储器,用于存储程序;
所述处理器,用于执行所述程序,实现如权利要求1~5中任一项所述的基于RabbitMQ的消息处理方法的各个步骤。
10.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如权利要求1~5中任一项所述的基于RabbitMQ的消息处理方法的各个步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211699341.3A CN116016655A (zh) | 2022-12-28 | 2022-12-28 | 基于RabbitMQ的消息处理方法、系统及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211699341.3A CN116016655A (zh) | 2022-12-28 | 2022-12-28 | 基于RabbitMQ的消息处理方法、系统及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116016655A true CN116016655A (zh) | 2023-04-25 |
Family
ID=86027825
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211699341.3A Pending CN116016655A (zh) | 2022-12-28 | 2022-12-28 | 基于RabbitMQ的消息处理方法、系统及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116016655A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106453564A (zh) * | 2016-10-18 | 2017-02-22 | 北京京东尚科信息技术有限公司 | 弹性云分布式海量请求处理的方法、装置及系统 |
CN110134494A (zh) * | 2019-05-17 | 2019-08-16 | 四川长虹电器股份有限公司 | 一种基于Docker容器的容器自动化管理方法 |
CN111240865A (zh) * | 2020-01-14 | 2020-06-05 | 山东汇贸电子口岸有限公司 | 一种基于消息队列的弹性伸缩活动优先级管理系统及方法 |
WO2022120806A1 (zh) * | 2020-12-11 | 2022-06-16 | 深圳晶泰科技有限公司 | 面向高性能计算多云的分布式消息传递方法及系统 |
-
2022
- 2022-12-28 CN CN202211699341.3A patent/CN116016655A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106453564A (zh) * | 2016-10-18 | 2017-02-22 | 北京京东尚科信息技术有限公司 | 弹性云分布式海量请求处理的方法、装置及系统 |
CN110134494A (zh) * | 2019-05-17 | 2019-08-16 | 四川长虹电器股份有限公司 | 一种基于Docker容器的容器自动化管理方法 |
CN111240865A (zh) * | 2020-01-14 | 2020-06-05 | 山东汇贸电子口岸有限公司 | 一种基于消息队列的弹性伸缩活动优先级管理系统及方法 |
WO2022120806A1 (zh) * | 2020-12-11 | 2022-06-16 | 深圳晶泰科技有限公司 | 面向高性能计算多云的分布式消息传递方法及系统 |
Non-Patent Citations (5)
Title |
---|
LEO987: ""RabbitMQ 3.8 Feature Focus - Single Active Consumer"", Retrieved from the Internet <URL:《https://www.cnblogs.com/oyld/p/16795778.html》> * |
THROWABLE: ""RabbitMQ扩展之消费者优先级"", pages 1, Retrieved from the Internet <URL:《https://cloud.tencent.com/developer/article/1650081》> * |
东风微鸣: ""几种MQ顺序消息的实现方法"", Retrieved from the Internet <URL:《https://cloud.tencent.com/developer/article/1985758?areaSource=102001.1&traceId=BrG》> * |
别先生: ""RabbitMQ的消息确认ACK机制"", pages 1, Retrieved from the Internet <URL:《https://www.cnblogs.com/biehongli/p/11789098.html》> * |
爱刘温柔的小猪: ""RabbitMQ多消费者实例时,保证只有一个消费者进行消费(单活消费者模式)"", Retrieved from the Internet <URL:《https://blog.csdn.net/qq_42969135/article/details/128133898》> * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111522641B (zh) | 任务调度方法、装置、计算机设备和存储介质 | |
CN107395697B (zh) | 推送渠道选择、消息推送方法、装置及设备、可读介质 | |
CN112527525B (zh) | 基于消息队列的分布式事件总线处理方法、终端及介质 | |
EP3547170A1 (en) | Blockchain-based consensus method and device | |
CN110032438B (zh) | 延时任务执行方法、装置及电子设备 | |
CN109710394A (zh) | 定时任务处理系统及方法 | |
CN106130868B (zh) | 回调消息的处理方法、队列管理系统、存储介质及服务器 | |
CN108449410A (zh) | 一种云平台中消息管理方法、系统及相关装置 | |
CN110417600B (zh) | 分布式系统的节点切换方法、装置及计算机存储介质 | |
CN111555963A (zh) | 消息推送方法、装置、电子设备及存储介质 | |
CN108566291B (zh) | 一种事件处理的方法、服务器及系统 | |
CN105426271A (zh) | 对分布式存储系统的锁管理的方法和装置 | |
CN105119997A (zh) | 云计算系统的数据处理方法 | |
CN108664521B (zh) | 一种提供序列号的方法、装置、电子设备和可读存储介质 | |
CN110740145A (zh) | 消息消费方法、装置、存储介质及电子设备 | |
CN111181765A (zh) | 一种任务处理方法和装置 | |
US20200403850A1 (en) | Facilitating resilient and fault tolerant asynchronous messaging | |
JP2008083942A (ja) | ネットワーク経由のデータバックアップシステム及びそのための計算機 | |
US9137331B2 (en) | Adaptive replication | |
CN116016655A (zh) | 基于RabbitMQ的消息处理方法、系统及相关设备 | |
EP3687133B1 (en) | System and method for synchronization of media objects between devices operating in a multiroom system | |
EP3710929B1 (en) | Optimized reconciliation in a controller switch network | |
CN109766347B (zh) | 一种数据更新方法、装置、系统、计算机设备及存储介质 | |
CN108121580B (zh) | 应用程序通知服务的实现方法及装置 | |
CN114265693A (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 |