CN106250249A - 消息队列的控制方法及装置 - Google Patents
消息队列的控制方法及装置 Download PDFInfo
- Publication number
- CN106250249A CN106250249A CN201610649821.7A CN201610649821A CN106250249A CN 106250249 A CN106250249 A CN 106250249A CN 201610649821 A CN201610649821 A CN 201610649821A CN 106250249 A CN106250249 A CN 106250249A
- Authority
- CN
- China
- Prior art keywords
- message
- queue
- message queue
- channel
- binding
- 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
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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种消息队列的控制方法,所述消息队列的控制方法包括步骤:调用消息通道接收客户端发送的消息;在接收到客户端发送的所述消息时,将所述消息发送至调用的所述消息通道对应的至少一消息队列中。本发明还提出一种消息队列的控制装置。本发明提高了消息队列服务器的负载能力。
Description
技术领域
本发明涉及计算机通信技术领域,尤其涉及一种消息队列的控制方法及装置。
背景技术
RabbitMQ(Rabbit Message Queue,消息队列系统)包括Server(消息队列服务器)和客户端(包括消息发送方Produce和消费方Consumer),其中,Server中配置有Channel(消息通道)和Queue(消息队列)。当Server接收到Produce发送的消息时,通过Channel将消息发送至Queue中,供之后Consumer消费Queue中的消息,实现了消息的异步处理,从而得到广泛应用。但由于Server中的Queue为单一Queue,每个Channel都将消息发送至该单一Queue中,通过该单一Queue来负载所有消息,使得Server的负载能力不强。
发明内容
本发明的主要目的在于提供一种消息队列的控制方法和装置,旨在解决消息队列服务器的负载能力不强的技术问题。
为实现上述目的,本发明提供一种消息队列的控制方法,所述消息队列的控制方法包括以下步骤:
调用消息通道接收客户端发送的消息;
在接收到客户端发送的所述消息时,将所述消息发送至调用的所述消息通道对应的至少一消息队列中。
优选地,所述调用消息通道接收客户端发送的消息的步骤之前,还包括:
配置各个消息通道对应的消息队列的分区数量;
根据所述分区数量,分区配置各个所述消息通道对应的多个消息队列;
建立各个所述消息通道与其配置的消息队列的绑定关系。
优选地,所述建立各个所述消息通道与其配置的消息队列的绑定关系的步骤包括:
配置各个所述消息通道与其配置的消息队列之间对应的各个绑定标识,根据各个所述绑定标识建立各个所述消息通道与其配置的消息队列的绑定关系;
所述在接收到客户端发送的所述消息时,将所述消息发送至调用的所述消息通道对应的至少一消息队列中的步骤包括:
在接收到客户端发送的消息时,获取所述消息中携带的路由标识;
查询调用的所述消息通道与其配置的消息队列之间对应的各个绑定标识中是否存在绑定标识与获取的所述路由标识匹配;
在有绑定标识与所述路由标识匹配时,将所述消息发送至匹配的所述绑定标识对应的消息队列。
优选地,所述在接收到客户端发送的消息时,获取所述消息中携带的路由标识的步骤之前,还包括:
在接收到所述客户端发送的申请标识信息请求时,从配置的各个所述绑定标识中选取一个绑定标识,并获取所述绑定标识中包含的分区标识;
将获取的所述分区标识发送至所述客户端,以供所述客户端在待发送消息时根据所述分区标识生成对应的路由标识,并发送携带有生成的所述路由标识的消息。
优选地,所述在接收到客户端发送的消息时,获取所述消息中携带的路由标识的步骤之前,还包括:
在接收到所述客户端发送的申请标识信息请求时,发送配置的各个所述绑定标识中包含的分区标识至所述客户端,以供所述客户端保存各个所述分区标识,并在待发送消息时选取其中一个所述分区标识生成对应的路由标识,以发送携带有生成的所述路由标识的消息。
此外,为实现上述目的,本发明还提出一种消息队列的控制装置,所述消息队列的控制装置包括:
接收模块,用于调用消息通道接收客户端发送的消息;
发送模块,用于在接收到客户端发送的所述消息时,将所述消息发送至调用的所述消息通道对应的至少一消息队列中。
优选地,所述消息队列的控制装置还包括:
第一配置模块,用于配置各个消息通道对应的消息队列的分区数量;
第二配置模块,用于根据所述分区数量,分区配置各个所述消息通道对应的多个消息队列;
处理模块,用于建立各个所述消息通道与其配置的息队列的绑定关系。
优选地,所述处理模块,用于配置各个所述消息通道与其配置的消息队列之间对应的各个绑定标识,根据各个所述绑定标识建立各个所述消息通道与其配置的消息队列的绑定关系;
所述发送模块包括:
获取单元,用于在接收到客户端发送的消息时,获取所述消息中携带的路由标识;
匹配单元,用于查询调用的所述消息通道与其配置的消息队列之间对应的各个绑定标识中是否存在绑定标识与获取的所述路由标识匹配;
发送单元,用于在有绑定标识与所述路由标识匹配时,将所述消息发送至匹配的所述绑定标识对应的消息队列。
优选地,所述处理模块,还用于在接收到所述客户端发送的申请标识信息请求时,从配置的各个所述绑定标识中选取一个绑定标识,并获取所述绑定标识中包含的分区标识;
所述发送模块,还用于将获取的所述分区标识发送至所述客户端,以供所述客户端在待发送消息时根据所述分区标识生成对应的路由标识,并发送携带有生成的所述路由标识的消息。
优选地,所述发送模块还用于:
在接收到所述客户端发送的申请标识信息请求时,发送配置的各个所述绑定标识中包含的分区标识至所述客户端,以供所述客户端保存各个所述分区标识,并在待发送消息时选取其中一个所述分区标识生成对应的路由标识,以发送携带有生成的所述路由标识的消息。
本发明提出的消息队列的控制方法及装置,通过调用消息通道接收客户端发送的消息,并将接收的消息发送至调用的消息通道对应的至少一消息队列中,而不是直接将消息都发送至单一的消息队列中,通过多个消息队列来负载接收到的消息,提高了消息队列服务器的负载能力。
附图说明
图1为本发明消息队列的控制方法第一实施例的流程示意图;
图2为现有消息队列系统的一个结构框架示意图;
图3为本发明消息队列的控制方法第二实施例的流程示意图;
图4本发明消息队列系统的一个结构框架示意图;
图5为本发明消息队列的控制装置第一实施例的功能模块示意图;
图6为本发明消息队列的控制装置第二实施例的功能模块示意图。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供一种消息队列的控制方法。参照图1,图1为本发明消息队列的控制方法第一实施例的流程示意图。在本实施例中,所述消息队列的控制方法包括以下步骤:
步骤S10,调用消息通道接收客户端发送的消息;
步骤S20,在接收到客户端发送的所述消息时,将所述消息发送至调用的所述消息通道对应的至少一消息队列中。
在现有的单Queue(消息队列)-RabbitMQ(Rabbit Message Queue,消息队列系统)配置模式中,消息队列服务器Server中配置的消息通道与单一消息队列建立绑定关系。例如,如图2所示,消息通道包括消息通道Channel1、Channel2和Channel3,而每个消息通道均通过绑定标识Binding key与单一消息队列Queue绑定。当不管是哪个客户端发送消息时,比如不论是Produce1、Produce2还是Produce3发送消息至对应的消息通道Channel1、消息通道Channel2或消息通道Channel3,当消息通道Channel1、消息通道Channel2或消息通道Channel3在接收到消息时,均将接收到的消息发送至单一消息队列Queue中,通过单一消息队列Queue进行消息处理。由于单一的消息队列Queue的吞吐能力有限,影响了消息队列服务器Server的负载性能。
为了提高消息队列服务器Server的负载性能,本实施例中,消息队列服务器Server中配置有多个消息队列,每个消息通道分别对应一个或多个消息队列。当客户端发送消息时,消息队列服务器Server调用消息通道接收客户端发送的消息。当接收到客户端发送的消息时,将接收到的消息发送至调用的消息通道对应的消息队列中。例如,若消息通道Channel1对应的消息队列为消息队列Queue1,消息通道Channel2对应的消息队列为消息队列Queue2,消息通道Channel3对应的消息队列为消息队列Queue3,则将消息通道Channel1接收到的消息发送至消息队列Queue1中,将消息通道Channel2接收到的消息发送至消息队列Queue2中,将消息通道Channel3接收到的消息发送至消息队列Queue3中。
当消息通道对应多个消息队列时,则将调用该消息通道接收到的消息分散发送至该消息通道对应的多个消息队列中。例如,若消息通道Channel1对应的消息队列为消息队列Queue1和消息队列Queue2,则将调用消息通道Channel1接收到的消息分散发送至消息队列Queue1和消息队列Queue2中。通过多个消息队列分别对接收到的消息进行处理,达到负载均衡的效果。消息不再由单一消息队列进行处理,因此,提高了消息队列服务器的负载能力。
本实施例提供的方案,通过调用消息通道接收客户端发送的消息,并将接收的消息发送至调用的消息通道对应的消息队列中,而不是都发送至单一的消息队列中,通过多个消息队列来负载接收到的消息,提高了消息队列服务器的负载能力。
进一步地,如图3所示,基于第一实施例提出本发明消息队列的控制方法第二实施例。在第二实施例中,所述步骤S10之前,还包括:
步骤S30,配置各个消息通道对应的消息队列的分区数量;
步骤S40,根据所述分区数量,分区配置各个所述消息通道对应的多个消息队列;
步骤S50,建立各个所述消息通道与其配置的消息队列的绑定关系。
本实施例中,在对消息队列服务器Server进行配置的过程中,要先配置各个消息通道对应的消息队列的分区数量,也即配置将与各个消息通道绑定的消息队列的个数。例如,如图2所示,当消息通道包括消息通道Channel1、Channel2和Channel3时,则分别配置每个消息通道对应的消息队列的分区数量。
具体地,在配置消息通道时,增加配置消息通道对应的消息队列的分区数量。例如,若要配置消息通道Channel1对应的消息队列的分区数量为3,在配置Channel1的在相关代码程序中添加如下代码:
vms.inboundName=default_Channel1_rabbitmq_tps_do_dmp_30113
vms.shards.num=3
vms.clusterId=/default/vms/cluster/vms.rabbitmq.dev.rabbitmq.default
当配置了消息通道对应的消息队列的分区数量之后,对消息通道对应的消息队列进行配置。具体地,根据配置的消息通道对应的消息队列的分区数量,采用分区技术分区配置消息通道对应的多个消息队列。例如,若配置消息通道Channel1对应的消息队列的分区数量为3,则配置消息通道Channel1对应的消息队列为消息队列Queue1、Queue2和Queue3。比如,配置多个消息队列Queue1、Queue2和Queue3的程序代码如下:
default_Queue1_rabbitmq_dmp_do_tps_30113_0_0
default_Queue2_rabbitmq_dmp_do_tps_30113_1_1
default_Queue3_rabbitmq_dmp_do_tps_30113_1_2
将消息队列Queue1配置在物理机10.172.168.1上,而消息队列Queue2和Queue3配置在物理机10.172.168.2上。
按照上述方式依次对各个消息通道对应的消息队列进行配置,从而完成消息队列的配置。
当消息队列配置完成后,建立各个消息通道与其配置的消息队列的绑定关系,将各个消息通道对应的消息队列与各个消息通道绑定。具体地,所述步骤S50包括:
步骤a,配置各个所述消息通道与其配置的消息队列之间对应的各个绑定标识,根据各个所述绑定标识建立各个所述消息通道与其配置的消息队列的绑定关系。
为了建立消息通道与对应的消息队列的绑定关系,首先分别配置消息通道与各个消息队列之间对应的各个绑定标识。例如,若消息通道Channel1对应的消息队列为消息队列Queue1、Queue2和Queue3,分别配置消息通道Channel1与消息队列Queue1之间对应的绑定标识为Binding key1,消息通道Channel1与消息队列Queue2之间对应的绑定标识为Binding key2,消息通道Channel1与消息队列Queue3之间对应的绑定标识为Bindingkey3。然后,根据配置的绑定标识建立每个消息队列与消息通道的绑定关系。例如,仍以上述列举的消息通道Channel1为例,建立消息通道Channel1与对应的消息队列Queue1、Queue2和Queue3的绑定关系的程序代码如下:
default_Channel1_rabbitmq_tps_do_dmp_30113->default_Queue1_rabbitmq_dmp_do_tps_30113_0_0Binding key1:”*_0_0”
default_Channel1_rabbitmq_tps_do_dmp_30113->default_Queue2_rabbitmq_dmp_do_tps_30113_1_1Binding key2:”*_1_1”
default_Channel1_rabbitmq_tps_do_dmp_30113->default_Queue3_rabbitmq_dmp_do_tps_30113_1_2Binding key3:”*_1_2”
按照此方式建立各个消息通道对应的消息队列的绑定关系。例如,如图4所示,消息通道Channel1与对应的消息队列Queue1、Queue2和Queue3的绑定关系对应的绑定标识为Binding key1、Binding key2和Binding key3;消息通道Channel2与对应的消息队列Queue1、Queue2和Queue3的绑定关系对应的绑定标识为Binding key4、Binding key5和Binding key6;消息通道Channel3与对应的消息队列Queue1、Queue2和Queue3的绑定关系对应的绑定标识为Binding key7、Binding key8和Binding key9。
进一步地,本实施例中,所述步骤S20包括:
步骤b,在接收到客户端发送的消息时,获取所述消息中携带的路由标识;
步骤c,查询调用的所述消息通道与其配置的消息队列之间对应的各个绑定标识中是否存在绑定标识与获取的所述路由标识匹配;
步骤d,在有绑定标识与所述路由标识匹配时,将所述消息发送至匹配的所述绑定标识对应的消息队列。
客户端在发送消息时,消息中会携带对应的路由标识routekey,当接收到客户端发送的消息时,首先获取消息中携带的路由标识routekey。然后查询配置的每个消息队列与消息通道之间对应的绑定标识中是否存在一绑定标识与获取到的路由标识routekey匹配。如果查询到存在一绑定标识与该路由标识routekey匹配,则将消息发送至匹配的该绑定标识对应的消息队列中。例如,仍以上述列举的实例为例,若查询到绑定标识Bindingkey2与该路由标识routekey匹配,则将消息发送至绑定标识Binding key2对应的消息队列Queue2中。如果未查询到绑定标识与该路由标识routekey匹配,则将消息丢弃。
进一步地,所述步骤b之前,还包括:
步骤e,在接收到所述客户端发送的申请标识信息请求时,从配置的各个所述绑定标识中选取一个绑定标识,并获取所述绑定标识中包含的分区标识;
步骤f,将获取的所述分区标识发送至所述客户端,以供所述客户端在待发送消息时根据所述分区标识生成对应的路由标识,并发送携带有生成的所述路由标识的消息。
客户端在发送消息之前,需要先生成对应的路由标识routekey。并且,本实施例中,配置的各个绑定标识中包含了对应的分区标识shardskey。当客户端发送申请标识信息请求至消息队列服务器Server,当接收到客户端发送的申请标识信息请求时,从配置的各个绑定标识Binding key1、Binding key2、Binding key3等中选取一个绑定标识,并获取选取的该绑定标识中包含的分区标识shardskey。然后,将获取的分区标识shardskey发送至客户端,以供客户端在待发送消息时根据分区标识shardskey生成对应的路由标识routekey,并发送携带有生成的路由标识routekey的消息。
进一步地,所述步骤a之后,还包括:
步骤g,在接收到所述客户端发送的申请标识信息请求时,发送配置的各个所述绑定标识中包含的分区标识至所述客户端,以供所述客户端保存各个所述分区标识,并在待发送消息时选取其中一个所述分区标识生成对应的路由标识,以发送携带有生成的所述路由标识的消息。
当配置了消息通道与每个消息队列之间对应的绑定标识之后,其中,每个绑定标识都包含有对应的分区标识shardskey,在接收到客户端发送的申请标识信息请求时,将各个绑定标识中包含的分区标识shardskey发送至客户端。
当客户端接收到各个分区标识shardskey时,首先将接收到的各个分区标识shardskey保存。同时,客户端在注册时有对应的routing标识。之后,在待发送消息时,随机选取其中一个分区标识shardskey,将该分区标识shardskey作为路由子标识,通过将routing标识与分区标识shardskey组合,生成对应的路由标识routekey,以发送携带有生成的路由标识routekey的消息。
消费方Consumer将遍历消息通道与对应的消息队列的绑定信息,根据绑定信息创建连接关系connection列表sets。根据连接关系connection列表sets对消息通道对应的每个消息队列中的消息进行消费。
本实施例提出的方案,通过为消息通道分区配置多个对应的消息队列,并分别建立消息通道与每个消息队列的绑定关系,以将接收到的消息分散发送至与消息通道建立绑定关系的多个消息队列中,通过多个消息队列来负载接收到的消息,提高了消息队列服务器的负载能力。
本发明进一步提供一种消息队列的控制装置。参照图5,图5为本发明消息队列的控制装置第一实施例的功能模块示意图。
在本实施例中,所述消息队列的控制装置包括:
接收模块10,用于调用消息通道接收客户端发送的消息;
发送模块20,用于在接收到客户端发送的所述消息时,将所述消息发送至调用的所述消息通道对应的至少一消息队列中。
在现有的单Queue(消息队列)-RabbitMQ(Rabbit Message Queue,消息队列系统)配置模式中,消息队列服务器Server中配置的消息通道与单一消息队列建立绑定关系。例如,如图2所示,消息通道包括消息通道Channel1、Channel2和Channel3,而每个消息通道均通过绑定标识Binding key与单一消息队列Queue绑定。当不管是哪个客户端发送消息时,比如不论是Produce1、Produce2还是Produce3发送消息至对应的消息通道Channel1、消息通道Channel2或消息通道Channel3,当消息通道Channel1、消息通道Channel2或消息通道Channel3在接收到消息时,均将接收到的消息发送至单一消息队列Queue中,通过单一消息队列Queue进行消息处理。由于单一的消息队列Queue的吞吐能力有限,影响了消息队列服务器Server的负载性能。
为了提高消息队列服务器Server的负载性能,本实施例中,消息队列服务器Server中配置有多个消息队列,每个消息通道分别对应一个或多个消息队列。当客户端发送消息时,接收模块10调用消息通道接收客户端发送的消息。当接收模块10接收到客户端发送的消息时,发送模块20将接收到的消息发送至调用的消息通道对应的消息队列中。例如,若消息通道Channel1对应的消息队列为消息队列Queue1,消息通道Channel2对应的消息队列为消息队列Queue2,消息通道Channel3对应的消息队列为消息队列Queue3,则将消息通道Channel1接收到的消息发送至消息队列Queue1中,将消息通道Channel2接收到的消息发送至消息队列Queue2中,将消息通道Channel3接收到的消息发送至消息队列Queue3中。
当消息通道对应多个消息队列时,发送模块20将调用该消息通道接收到的消息分散发送至该消息通道对应的多个消息队列中。例如,若消息通道Channel1对应的消息队列为消息队列Queue1和消息队列Queue2,则发送模块20将调用消息通道Channel1接收到的消息分散发送至消息队列Queue1和消息队列Queue2中。通过多个消息队列分别对接收到的消息进行处理,达到负载均衡的效果。消息不再由单一消息队列进行处理,因此,提高了消息队列服务器的负载能力。
本实施例提供的方案,通过接收模块10调用消息通道接收客户端发送的消息,发送模块20将接收的消息发送至调用的消息通道对应的消息队列中,而不是都发送至单一的消息队列中,通过多个消息队列来负载接收到的消息,提高了消息队列服务器的负载能力。
进一步地,如图6所示,基于第一实施例提出本发明消息队列的控制装置第二实施例。在第二实施例中,所述消息队列的控制装置还包括:
第一配置模块30,用于配置各个消息通道对应的消息队列的分区数量;
第二配置模块40,用于根据所述分区数量,分区配置各个所述消息通道对应的多个消息队列;
处理模块50,用于建立各个所述消息通道与其配置的消息队列的绑定关系。
本实施例中,在对消息队列服务器Server进行配置的过程中,先通过第一配置模块30配置各个消息通道对应的消息队列的分区数量,也即配置将与各个消息通道绑定的消息队列的个数。例如,如图2所示,当消息通道包括消息通道Channel1、Channel2和Channel3时,则分别配置每个消息通道对应的消息队列的分区数量。
具体地,在配置消息通道时,增加配置消息通道对应的消息队列的分区数量。例如,若要配置消息通道Channel1对应的消息队列的分区数量为3,在配置Channel1的在相关代码程序中添加如下代码:
vms.inboundName=default_Channel1_rabbitmq_tps_do_dmp_30113
vms.shards.num=3
vms.clusterId=/default/vms/cluster/vms.rabbitmq.dev.rabbitmq.default
当第一配置模块30配置了消息通道对应的消息队列的分区数量之后,第二配置模块40对消息通道对应的消息队列进行配置。具体地,第二配置模块40根据配置的消息通道对应的消息队列的分区数量,采用分区技术分区配置消息通道对应的多个消息队列。例如,若配置消息通道Channel1对应的消息队列的分区数量为3,第二配置模块40配置消息通道Channel1对应的消息队列为消息队列Queue1、Queue2和Queue3。比如,配置多个消息队列Queue1、Queue2和Queue3的程序代码如下:
default_Queue1_rabbitmq_dmp_do_tps_30113_0_0
default_Queue2_rabbitmq_dmp_do_tps_30113_1_1
default_Queue3_rabbitmq_dmp_do_tps_30113_1_2
将消息队列Queue1配置在物理机10.172.168.1上,而消息队列Queue2和Queue3配置在物理机10.172.168.2上。
按照上述方式依次对各个消息通道对应的消息队列进行配置,从而完成消息队列的配置。
当消息队列配置完成后,处理模块50各个消息通道与其配置的消息队列的绑定关系,将各个消息通道对应的消息队列与各个消息通道绑定。具体地,所述处理模块50用于:
配置各个所述消息通道与其配置的消息队列之间对应的各个绑定标识,根据各个所述绑定标识建立各个所述消息通道与其配置的消息队列的绑定关系。
为了建立消息通道与对应的每个消息队列的绑定关系,处理模块50首先分别配置消息通道与各个消息队列之间对应的各个绑定标识。例如,若消息通道Channel1对应的消息队列为消息队列Queue1、Queue2和Queue3,处理模块50分别配置消息通道Channel1与消息队列Queue1之间对应的绑定标识为Binding key1,消息通道Channel1与消息队列Queue2之间对应的绑定标识为Binding key2,消息通道Channel1与消息队列Queue3之间对应的绑定标识为Binding key3。然后,根据配置的绑定标识建立每个消息队列与消息通道的绑定关系。例如,仍以上述列举的消息通道Channel1为例,建立消息通道Channel1与对应的消息队列Queue1、Queue2和Queue3的绑定关系的程序代码如下:
default_Channel1_rabbitmq_tps_do_dmp_30113->default_Queue1_rabbitmq_dmp_do_tps_30113_0_0Binding key1:”*_0_0”
default_Channel1_rabbitmq_tps_do_dmp_30113->default_Queue2_rabbitmq_dmp_do_tps_30113_1_1Binding key2:”*_1_1”
default_Channel1_rabbitmq_tps_do_dmp_30113->default_Queue3_rabbitmq_dmp_do_tps_30113_1_2Binding key3:”*_1_2”
按照此方式建立各个消息通道对应的消息队列与每个消息通道的绑定关系。例如,如图4所示,消息通道Channel1与对应的消息队列Queue1、Queue2和Queue3的绑定关系对应的绑定标识为Binding key1、Binding key2和Binding key3;消息通道Channel2与对应的消息队列Queue1、Queue2和Queue3的绑定关系对应的绑定标识为Binding key4、Binding key5和Binding key6;消息通道Channel3与对应的消息队列Queue1、Queue2和Queue3的绑定关系对应的绑定标识为Binding key7、Binding key8和Binding key9。
进一步地,所述发送模块20包括:
获取单元,用于在接收到客户端发送的消息时,获取所述消息中携带的路由标识;
匹配单元,用于查询调用的所述消息通道与其配置的消息队列之间对应的各个绑定标识中是否存在绑定标识与获取的所述路由标识匹配;
发送单元,用于在有绑定标识与所述路由标识匹配时,将所述消息发送至匹配的所述绑定标识对应的消息队列。
客户端在发送消息时,消息中会携带对应的路由标识routekey,当接收模块10接收到客户端发送的消息时,获取单元获取消息中携带的路由标识routekey。然后匹配单元查询配置的每个消息队列与消息通道之间对应的绑定标识中是否存在一绑定标识与获取到的路由标识routekey匹配。如果匹配单元查询到存在一绑定标识与该路由标识routekey匹配,则发送单元将消息发送至匹配的该绑定标识对应的消息队列中。例如,仍以上述列举的实例为例,若匹配单元查询到绑定标识Binding key2与该路由标识routekey匹配,则发送单元将消息发送至绑定标识Binding key2对应的消息队列Queue2中。如果匹配单元未查询到绑定标识与该路由标识routekey匹配,则将消息丢弃。
进一步地,本实施例中,所述处理模块50,还用于在接收到所述客户端发送的申请标识信息请求时,从配置的各个所述绑定标识中选取一个绑定标识,并获取所述绑定标识中包含的分区标识;
所述发送模块20,还用于将获取的所述分区标识发送至所述客户端,以供所述客户端在待发送消息时根据所述分区标识生成对应的路由标识,并发送携带有生成的所述路由标识的消息。
客户端在发送消息之前,需要先生成对应的路由标识routekey。并且,本实施例中,配置的各个绑定标识中包含了对应的分区标识shardskey。当客户端发送申请标识信息请求至消息队列服务器Server,当接收到客户端发送的申请标识信息请求时,处理模块50从配置的各个绑定标识Binding key1、Binding key2、Binding key3等中选取一个绑定标识,并获取选取的该绑定标识中包含的分区标识shardskey。然后,发送模块20将获取的分区标识shardskey发送至客户端,以供客户端在待发送消息时根据分区标识shardskey生成对应的路由标识routekey,并发送携带有生成的路由标识routekey的消息。
进一步地,所述发送模块20还用于:
在接收到所述客户端发送的申请标识信息请求时,发送配置的各个所述绑定标识中包含的分区标识至所述客户端,以供所述客户端保存各个所述分区标识,并在待发送消息时选取其中一个所述分区标识生成对应的路由标识,以发送携带有生成的所述路由标识的消息。
当配置了消息通道与每个消息队列之间对应的绑定标识之后,其中,每个绑定标识都包含有对应的分区标识shardskey,在接收到客户端发送的申请标识信息请求时,发送模块20将各个绑定标识中包含的分区标识shardskey发送至客户端。
当客户端接收到各个分区标识shardskey时,首先将接收到的各个分区标识shardskey保存。同时,客户端在注册时有对应的routing标识。之后,在待发送消息时,随机选取其中一个分区标识shardskey,将该分区标识shardskey作为路由子标识,通过将routing标识与分区标识shardskey组合,生成对应的路由标识routekey,以发送携带有生成的路由标识routekey的消息。
消费方Consumer将遍历消息通道与对应的消息队列的绑定信息,根据绑定信息创建连接关系connection列表sets。根据连接关系connection列表sets对消息通道对应的每个消息队列中的消息进行消费。
本实施例提出的方案,通过第二配置模块40为消息通道分区配置多个对应的消息队列,处理模块50分别建立消息通道与每个消息队列的绑定关系,以将接收到的消息分散发送至与消息通道建立绑定关系的多个消息队列中,通过多个消息队列来负载接收到的消息,提高了消息队列服务器的负载能力。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种消息队列的控制方法,其特征在于,所述消息队列的控制方法包括以下步骤:
调用消息通道接收客户端发送的消息;
在接收到客户端发送的所述消息时,将所述消息发送至调用的所述消息通道对应的至少一消息队列中。
2.如权利要求1所述的消息队列的控制方法,其特征在于,所述调用消息通道接收客户端发送的消息的步骤之前,还包括:
配置各个消息通道对应的消息队列的分区数量;
根据所述分区数量,分区配置各个所述消息通道对应的多个消息队列;
建立各个所述消息通道与其配置的消息队列的绑定关系。
3.如权利要求2所述的消息队列的控制方法,其特征在于,所述建立各个所述消息通道与其配置的消息队列的绑定关系的步骤包括:
配置各个所述消息通道与其配置的消息队列之间对应的各个绑定标识,根据各个所述绑定标识建立各个所述消息通道与其配置的消息队列的绑定关系;
所述在接收到客户端发送的所述消息时,将所述消息发送至调用的所述消息通道对应的至少一消息队列中的步骤包括:
在接收到客户端发送的消息时,获取所述消息中携带的路由标识;
查询调用的所述消息通道与其配置的消息队列之间对应的各个绑定标识中是否存在绑定标识与获取的所述路由标识匹配;
在有绑定标识与所述路由标识匹配时,将所述消息发送至匹配的所述绑定标识对应的消息队列。
4.如权利要求3所述的消息队列的控制方法,其特征在于,所述在接收到客户端发送的消息时,获取所述消息中携带的路由标识的步骤之前,还包括:
在接收到所述客户端发送的申请标识信息请求时,从配置的各个所述绑定标识中选取一个绑定标识,并获取所述绑定标识中包含的分区标识;
将获取的所述分区标识发送至所述客户端,以供所述客户端在待发送消息时根据所述分区标识生成对应的路由标识,并发送携带有生成的所述路由标识的消息。
5.如权利要求3所述的消息队列的控制方法,其特征在于,所述在接收到客户端发送的消息时,获取所述消息中携带的路由标识的步骤之前,还包括:
在接收到所述客户端发送的申请标识信息请求时,发送配置的各个所述绑定标识中包含的分区标识至所述客户端,以供所述客户端保存各个所述分区标识,并在待发送消息时选取其中一个所述分区标识生成对应的路由标识,以发送携带有生成的所述路由标识的消息。
6.一种消息队列的控制装置,其特征在于,所述消息队列的控制装置包括:
接收模块,用于调用消息通道接收客户端发送的消息;
发送模块,用于在接收到客户端发送的所述消息时,将所述消息发送至调用的所述消息通道对应的至少一消息队列中。
7.如权利要求6所述的消息队列的控制装置,其特征在于,所述消息队列的控制装置还包括:
第一配置模块,用于配置各个消息通道对应的消息队列的分区数量;
第二配置模块,用于根据所述分区数量,分区配置各个所述消息通道对应的多个消息队列;
处理模块,用于建立各个所述消息通道与其配置的息队列的绑定关系。
8.如权利要求7所述的消息队列的控制装置,其特征在于,所述处理模块,用于配置各个所述消息通道与其配置的消息队列之间对应的各个绑定标识,根据各个所述绑定标识建立各个所述消息通道与其配置的消息队列的绑定关系;
所述发送模块包括:
获取单元,用于在接收到客户端发送的消息时,获取所述消息中携带的路由标识;
匹配单元,用于查询调用的所述消息通道与其配置的消息队列之间对应的各个绑定标识中是否存在绑定标识与获取的所述路由标识匹配;
发送单元,用于在有绑定标识与所述路由标识匹配时,将所述消息发送至匹配的所述绑定标识对应的消息队列。
9.如权利要求8所述的消息队列的控制装置,其特征在于,所述处理模块,还用于在接收到所述客户端发送的申请标识信息请求时,从配置的各个所述绑定标识中选取一个绑定标识,并获取所述绑定标识中包含的分区标识;
所述发送模块,还用于将获取的所述分区标识发送至所述客户端,以供所述客户端在待发送消息时根据所述分区标识生成对应的路由标识,并发送携带有生成的所述路由标识的消息。
10.如权利要求8所述的消息队列的控制装置,其特征在于,所述发送模块还用于:
在接收到所述客户端发送的申请标识信息请求时,发送配置的各个所述绑定标识中包含的分区标识至所述客户端,以供所述客户端保存各个所述分区标识,并在待发送消息时选取其中一个所述分区标识生成对应的路由标识,以发送携带有生成的所述路由标识的消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610649821.7A CN106250249A (zh) | 2016-08-09 | 2016-08-09 | 消息队列的控制方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610649821.7A CN106250249A (zh) | 2016-08-09 | 2016-08-09 | 消息队列的控制方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106250249A true CN106250249A (zh) | 2016-12-21 |
Family
ID=58077964
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610649821.7A Pending CN106250249A (zh) | 2016-08-09 | 2016-08-09 | 消息队列的控制方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106250249A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106656841A (zh) * | 2017-02-27 | 2017-05-10 | 中国联合网络通信集团有限公司 | 基于Openstack的Nova组件消息队列调度方法、系统和交换优化器 |
CN106878197A (zh) * | 2017-02-22 | 2017-06-20 | 郑州云海信息技术有限公司 | 一种云平台消息传输的管理系统及方法 |
CN109885410A (zh) * | 2019-01-09 | 2019-06-14 | 广州视源电子科技股份有限公司 | 消息发送方法、装置、计算机设备和存储介质 |
CN110224933A (zh) * | 2019-06-18 | 2019-09-10 | 成都品果科技有限公司 | 一种消息分发系统 |
CN110545237A (zh) * | 2019-10-08 | 2019-12-06 | 广州欢聊网络科技有限公司 | 一种即时通讯方法、装置、系统、计算机设备和存储介质 |
CN113296976A (zh) * | 2021-02-10 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 消息处理方法、装置、电子设备、存储介质及程序产品 |
CN113542406A (zh) * | 2021-07-14 | 2021-10-22 | 上海浦东发展银行股份有限公司 | 一种系统间消息的异步处理系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101105786A (zh) * | 2006-07-14 | 2008-01-16 | 中兴通讯股份有限公司 | 一种基于共享存储器的双cpu通信方法 |
CN101739296A (zh) * | 2009-12-28 | 2010-06-16 | 广州菲音信息科技有限公司 | 数据处理系统和方法 |
CN103024014A (zh) * | 2012-12-03 | 2013-04-03 | 北京京东世纪贸易有限公司 | 通过消息队列的海量数据分发处理的方法和系统 |
CN105610926A (zh) * | 2015-12-22 | 2016-05-25 | 广州唯品会信息科技有限公司 | 消息传递方法、系统和消息中间件系统 |
-
2016
- 2016-08-09 CN CN201610649821.7A patent/CN106250249A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101105786A (zh) * | 2006-07-14 | 2008-01-16 | 中兴通讯股份有限公司 | 一种基于共享存储器的双cpu通信方法 |
CN101739296A (zh) * | 2009-12-28 | 2010-06-16 | 广州菲音信息科技有限公司 | 数据处理系统和方法 |
CN103024014A (zh) * | 2012-12-03 | 2013-04-03 | 北京京东世纪贸易有限公司 | 通过消息队列的海量数据分发处理的方法和系统 |
CN105610926A (zh) * | 2015-12-22 | 2016-05-25 | 广州唯品会信息科技有限公司 | 消息传递方法、系统和消息中间件系统 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106878197A (zh) * | 2017-02-22 | 2017-06-20 | 郑州云海信息技术有限公司 | 一种云平台消息传输的管理系统及方法 |
CN106656841A (zh) * | 2017-02-27 | 2017-05-10 | 中国联合网络通信集团有限公司 | 基于Openstack的Nova组件消息队列调度方法、系统和交换优化器 |
CN106656841B (zh) * | 2017-02-27 | 2019-08-30 | 中国联合网络通信集团有限公司 | 基于Openstack的Nova组件消息队列调度方法、系统和交换优化器 |
CN109885410A (zh) * | 2019-01-09 | 2019-06-14 | 广州视源电子科技股份有限公司 | 消息发送方法、装置、计算机设备和存储介质 |
CN110224933A (zh) * | 2019-06-18 | 2019-09-10 | 成都品果科技有限公司 | 一种消息分发系统 |
CN110545237A (zh) * | 2019-10-08 | 2019-12-06 | 广州欢聊网络科技有限公司 | 一种即时通讯方法、装置、系统、计算机设备和存储介质 |
CN113296976A (zh) * | 2021-02-10 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 消息处理方法、装置、电子设备、存储介质及程序产品 |
CN113542406A (zh) * | 2021-07-14 | 2021-10-22 | 上海浦东发展银行股份有限公司 | 一种系统间消息的异步处理系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106250249A (zh) | 消息队列的控制方法及装置 | |
EP3223474B1 (en) | Method and device for processing adaptive flow table | |
CN108377671B (zh) | 处理报文的方法和计算机设备 | |
CN106416147B (zh) | 一种用于软件定义协议网络节点的系统和方法 | |
CN108833181A (zh) | Ng-cn网络切片系统及网络切片选择方法 | |
CN106250250A (zh) | 数据通信方法及装置 | |
CN103986764B (zh) | 用于多客户端协同文件上传的设备和方法 | |
CN106850432B (zh) | 一种报文转发的方法及装置 | |
CN107615729A (zh) | 数据传输方法及通信装置 | |
CN102480430A (zh) | 实现报文保序的方法和装置 | |
CN109314665A (zh) | 选择用于传送上行链路分组的网络切片实例化 | |
CN105357146A (zh) | 出口网关内缓存队列饱和攻击防御方法、装置及系统 | |
US20160241485A1 (en) | Method for updating flow table | |
US20190173790A1 (en) | Method and system for forwarding data, virtual load balancer, and readable storage medium | |
CN106464596A (zh) | 开放流通信方法、系统、控制器和业务网关 | |
CN105960782A (zh) | 用于转发数据分组的接入节点设备 | |
CN105357329B (zh) | 跨idc网络环境下业务数据的传输方法、装置及系统 | |
CN102325035B (zh) | 一种组播业务的实现方法及装置 | |
CN108243146A (zh) | 一种高效的信息提交方法 | |
CN111147538B (zh) | 服务功能链路径选择方法与系统 | |
JP6425107B2 (ja) | 通信処理システム、グループメッセージ処理方法、通信処理装置およびその制御方法と制御プログラム | |
CN102355358A (zh) | 一种组播实现的方法和设备 | |
WO2016119269A1 (zh) | 一种业务流数据包的处理方法及装置 | |
CN102629345A (zh) | 链式沟通协作方法、装置及系统 | |
CN104573489A (zh) | 禁止应用创建桌面图标的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20171220 Address after: 510000 Guangzhou City, Guangzhou, Guangdong, Fangcun Avenue, one of the 314 self compiled Applicant after: Guangzhou Pinwei Software Co., Ltd. Address before: Liwan District Fangcun Huahai street Guangzhou city Guangdong province 510000 No. 20 self 1-5 building (only for office use) Applicant before: Guangzhou VIPSHOP Information and Technology Co., Ltd. |
|
TA01 | Transfer of patent application right | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20161221 |
|
RJ01 | Rejection of invention patent application after publication |