CN106302647B - 消息分发方法及服务器 - Google Patents
消息分发方法及服务器 Download PDFInfo
- Publication number
- CN106302647B CN106302647B CN201610614375.6A CN201610614375A CN106302647B CN 106302647 B CN106302647 B CN 106302647B CN 201610614375 A CN201610614375 A CN 201610614375A CN 106302647 B CN106302647 B CN 106302647B
- Authority
- CN
- China
- Prior art keywords
- message
- business
- receiving end
- message queue
- server
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 28
- 238000013507 mapping Methods 0.000 claims abstract description 62
- 230000005540 biological transmission Effects 0.000 claims description 28
- 238000012544 monitoring process Methods 0.000 claims description 11
- 238000003860 storage Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 11
- 230000008859 change Effects 0.000 description 8
- 238000004891 communication Methods 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
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/55—Push-based network services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/12—Avoiding congestion; Recovering from congestion
- H04L47/125—Avoiding congestion; Recovering from congestion by balancing the load, e.g. traffic engineering
-
- 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
- H04L47/622—Queue service order
-
- 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/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- 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/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
- H04L67/5683—Storage of data provided by user terminals, i.e. reverse caching
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Telephonic Communication Services (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种消息分发方法,该方法包括:服务器接收消息获取请求,该消息获取请求是由第一接收端发送的,服务器根据该消息获取请求及上述映射关系,确定用于存储该第一接收端请求获取的业务消息的第一消息队列,监听所述第一消息队列,若第一消息队列中存储第一业务消息,读取所述第一业务消息并发送给所述第一接收端;若第一消息队列中未存储业务消息,则所述第一接收端处于等待状态,直到监听到所述第一消息队列存储有第一业务消息时,读取所述第一业务消息并发送给所述第一接收端。本发明还公开了一种该服务器,通过推拉结合的方式能够有效的实现消息的分发,且降低服务器的负载压力。
Description
技术领域
本发明涉及网络通讯技术领域,尤其涉及一种消息分发方法及服务器。
背景技术
消息中间件是一种由消息送达机制或消息队列模式构成的中间件技术,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成,在真实的应用场景中,一个消息队列存在着多个接收端的情况,所以所有的消息中间件都面临着如何分发一个消息队列中的业务消息给多个接收端。
目前常用的技术手段为:服务器主动推送业务消息给接收端,此时消息的分发是由服务器主动负责的,服务器会实时监控有多少个接收端关注同一个业务,并按照预置的规则将该业务的业务消息发送给接收端。
然而,上述服务器主动推送业务消息的方式,存在以下缺陷:服务器需要维护所有的接收端的列表,并记录消息队列中上一次是哪个接收端接收到的了消息,以便基于上述预置的规则确定下一个消息需要发送给哪个接收端,这种主动推送的方式将给服务器带来较大的负载压力,且随着接收端的增多,这种负载压力也会越来越大。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提供一种消息分发方法及装置,旨在解决现有技术中服务器通过主动推送业务消息的方式带来的负载压力大的技术问题。
为实现上述目的,本发明提供的一种消息分发方法,对于每一种业务,服务器包含关注所述业务的接收端与所述业务的消息队列之间一一对应的映射关系,所述消息队列用于存储第一业务消息,所述方法包括:
所述服务器接收消息获取请求,所述消息获取请求是第一接收端发送的;
所述服务器根据所述消息获取请求及所述映射关系,确定用于存储所述第一接收端请求获取的业务消息的第一消息队列;
监听所述第一消息队列,若第一消息队列中存储第一业务消息,读取所述第一业务消息并发送给所述第一接收端;若第一消息队列中未存储第一业务消息,则所述第一接收端处于等待状态,直到监听到所述第一消息队列存储有第一业务消息时,读取所述第一业务消息并发送给所述第一接收端。
优选地,所述消息获取请求中包含请求获取的业务消息所属的第一业务;
则所述服务器根据所述消息获取请求及所述映射关系,确定用于存储所述第一接收端请求获取的业务消息的第一消息队列,包括:
获取所述消息获取请求中包含的所述第一业务;
查找关注所述第一业务的接收端与所述第一业务的消息队列之间一一对应的映射关系,确定与所述第一接收端对应的所述第一消息队列。
优选地,所述方法还包括:
所述服务器接收发送端发送的第二业务消息,所述第二业务消息中包含所述第二业务消息所属的第二业务;
所述服务器将发送端基于轮询的方式发送的所述第二业务消息存储至所述第二业务的消息队列中。
优选地,所述方法还包括:
所述服务器接收第二接收端发送的业务关注请求,所述业务关注请求中包含所述第二接收端请求关注的第三业务;
所述服务器创建属于所述第三业务的第二消息队列,并建立所述第二消息队列与所述第二接收端之间一一对应的映射关系。
优选地,所述方法还包括:
所述服务器在建立所述第二消息队列与所述第二接收端之间一一对应的映射关系之后,向关注所述第三业务的所有接收端发送重分配指令,使得接收到所述重分配指令的接收端向所述服务器反馈重新分配后的消息队列;
所述服务器根据接收端反馈的消息队列,更新关注所述第三业务的接收端与所述第三业务的消息队列之间一一对应的映射关系。
为实现上述目的,本发明还提供一种服务器,对于每一种业务,所述服务器包含关注所述业务的接收端与所述业务的消息队列之间一一对应的映射关系,所述消息队列用于存储第一业务消息,所述服务器包括:
第一接收模块,用于接收消息获取请求,所述消息获取请求是第一接收端发送的;
确定模块,用于根据所述消息获取请求及所述映射关系,确定用于存储所述第一接收端请求获取的业务消息的第一消息队列;
监听发送模块,用于监听所述第一消息队列,若第一消息队列中存储第一业务消息,读取所述第一业务消息并发送给所述第一接收端;若第一消息队列中未存储第一业务消息,则所述第一接收端处于等待状态,直到监听到所述第一消息队列存储有第一业务消息时,读取所述第一业务消息并发送给所述第一接收端。
优选地,所述消息获取请求中包含请求获取的业务消息所属的第一业务;
则所述确定模块具体用于:获取所述消息获取请求中包含的所述第一业务;及查找关注所述第一业务的接收端与所述第一业务的消息队列之间一一对应的映射关系,确定与所述第一接收端对应的所述第一消息队列。
优选地,所述服务器还包括:
第二接收模块,用于接收发送端发送的第二业务消息,所述第二业务消息中包含所述第二业务消息所属的第二业务;
存储模块,用于将发送端基于轮询的方式发送的所述第二业务消息存储至所述第二业务的消息队列中。
优选地,所述服务器还包括:
第三接收模块,用于接收第二接收端发送的业务关注请求,所述业务关注请求中包含所述第二接收端请求关注的第三业务;
建立模块,用于创建属于所述第三业务的第二消息队列,并建立所述第二消息队列与所述第二接收端之间一一对应的映射关系。
优选地,所述服务器还包括:
指令发送模块,用于在建立所述第二消息队列与所述第二接收端之间一一对应的映射关系之后,向关注所述第三业务的所有接收端发送重分配指令,使得接收到所述重分配指令的接收端向所述服务器反馈重新分配后的消息队列;
更新模块,用于根据接收端反馈的消息队列,更新关注所述第三业务的接收端与所述第三业务的消息队列之间一一对应的映射关系。
本发明提供一种消息分发方法,对于每一种业务,服务器包含关注该业务的接收端与该业务的消息队列之间一一对应的映射关系,即为每一个关注该业务的接收端设置一个消息队列,该消息分发方法包括:服务器接收消息获取请求,该消息获取请求是由第一接收端发送的,服务器根据该消息获取请求及上述映射关系,确定用于存储该第一接收端请求获取的业务消息的第一消息队列,监听所述第一消息队列,若第一消息队列中存储第一业务消息,读取所述第一业务消息并发送给所述第一接收端;若第一消息队列中未存储第一业务消息,则接收端处于等待状态,直到监听到所述第一消息队列存储有第一业务消息时,读取所述第一业务消息并发送给所述第一接收端。其中,接收端可以通过发送消息获取请求的方式主动从服务器拉取业务消息,而不需要服务器主动向接收端推送业务消息,使得能够有效的减轻服务器的负载压力。且在第一消息队列中未存储第一业务消息时,通过监听该第一消息队列,且在监听到第一消息队列中存储第一业务消息时,服务器将该第一业务消息推给所述第一接收端,使得服务器不需要实时监听所有的业务的消息队列,进一步降低服务器的负载压力。因此,通过推拉结合的方式能够有效的实现消息的分发,且降低服务器的负载压力。
附图说明
图1为本发明实施例中消息分发系统的结构示意图;
图2为本发明第一实施例中消息分发方法的流程示意图;
图3为本发明图2所示第一实施例中消息分发方法的追加步骤的流程示意图;
图4为本发明图2所示第一实施例中消息分发方法的追加步骤的流程示意图;
图5为本发明第二实施例中服务器的功能模块的示意图;
图6为本发明第三实施例中服务器的功能模块的示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
由于现有技术中服务器主动推送业务消息的方式将带来服务器的负载压力大的技术问题。
为了解决上述技术问题,本发明提出一种消息分发方法及装置,在该方法中,接收端可以通过发送消息获取请求的方式主动从服务器拉取业务消息,而不需要服务器主动向接收端推送业务消息,使得能够有效的减轻服务器的负载压力。且在第一消息队列中未存储第一业务消息时,通过监听该第一消息队列,且在监听到第一消息队列中存储第一业务消息时,服务器将该第一业务消息推给所述第一接收端,使得服务器不需要实时监听所有的业务的消息队列,进一步降低服务器的负载压力。因此,通过推拉结合的方式能够有效的实现消息的分发,且降低服务器的负载压力。
本发明实施例中的消息分发方法可以应用于消息中间件,且基于该消息中间件中的接收端、发送端及服务器实现消息的分发,为了更好的理解本发明实施例中的技术方案,请参阅图1,为本发明实施例中消息分发系统的结构示意图,包括:发送端、接收端、服务器。
其中,图1所示的消息分发系统中的服务器可以是主服务器,且为了实现服务器的故障切换,该消息分发系统中还可以设置至少一个备份服务器,使得在主服务器发生故障时,能够将该故障的主服务器的业务切换至任意一个备份服务器,以避免业务的中断。
在本发明实施例中,服务器可以处理多种类型的业务,且接收端可以选择需要关注的业务,对于每一个业务,服务器将设置关注该业务的接收端与该业务的消息队列之间一一对应的映射关系,可称为业务的接收端与消息队列之间的映射关系,例如,在图1中,有接收端1至4关注业务1,则服务器为该业务1设置4个消息队列,分别为消息队列1-4,且每一个消息队列都有唯一对应的接收端。
可以理解的是,接收端可以同时关注多种类型的业务,且服务器上可以包含多种类型的业务,每一种业务都包含多个消息队列。
基于图1所示的系统,请参阅图2,为本发明第一实施例中消息分发方法的流程示意图,该消息分发方法包括:
步骤201、所述服务器接收消息获取请求,所述消息获取请求是第一接收端发送的;
步骤202、所述服务器根据所述消息获取请求及所述映射关系,确定用于存储所述第一接收端请求获取的业务消息的第一消息队列;
步骤203、监听所述第一消息队列,若第一消息队列中存储第一业务消息,读取所述第一业务消息并发送给所述第一接收端;若第一消息队列中未存储第一业务消息,则所述第一接收端处于等待状态,直到监听到所述第一消息队列存储有第一业务消息时,读取所述第一业务消息并发送给所述第一接收端。
在本发明实施例中,接收端在需要获取业务消息时,可以向服务器发送消息获取请求,以主动拉取业务消息。
其中,服务器接收到第一接收端发送的消息获取请求之后,将根据该消息获取请求及服务器中已经设置的各业务的接收端与消息队列之间的映射关系确定用于存储该第一接收端请求获取的业务消息的第一消息队列。
在本发明实施例中,消息获取请求中可以包含第一接收端请求获取的业务消息所属的第一业务,则服务器确定第一消息队列的方式包括:获取该消息获取请求中包含的第一业务,查找关注该第一业务的接收端与第一业务的消息队列之间一一对应的映射关系,确定用于存储该第一接收端请求获取的业务消息的第一消息队列。例如,若接收端A发送的消息获取请求中包含的业务是存款业务,则服务器查找存款业务的接收端与消息队列之间的映射关系,确定该接收端A对应的消息队列A,该消息队列A即为用于存储接收端A请求获取的业务消息的消息队列。
在本发明实施例,确定第一接收端请求获取的业务消息所在的第一消息队列之后,服务器将监听该第一消息队列,若该第一消息队列中存储第一业务消息,则读取该第一业务消息并发送给第一接收端,若该第一消息队列中未存储第一业务消息,则第一接收端处于等待状态,直至监听到第一消息队列存储有第一业务消息时,读取该第一业务消息并发送给第一接收端。
其中,第一接收端主动拉取业务消息的方式为长轮询的方式,即向服务器发送消息获取请求,服务器接收到该消息获取请求之后保持与第一接收端之间用于传输业务消息的连接,直到与该第一接收端对应的第一消息队列中存储有第一业务消息时,服务器将读取的该第一业务消息通过上述连接反馈给第一接收端,并释放与第一接收端之间用于传输业务消息的连接。且在第一接收端下次还需要获取业务消息时,可以再次发送上述消息获取请求。
在本发明实施例中,服务器接收消息获取请求,该消息获取请求是由第一接收端发送的,服务器根据该消息获取请求及各业务的接收端与消息队列之间的映射关系,确定用于存储该第一接收端请求获取的业务消息的第一消息队列,并监听该第一消息队列,若该第一消息队列中存储第一业务消息,读取该第一业务消息并发送给第一接收端,若该第一消息队列中未存储第一业务消息,则第一接收端处于等待状态,直到监听到第一消息队列存储有第一业务消息时,读取该第一业务消息并发送给第一接收端。其中,接收端可以通过发送消息获取请求的方式主动从服务器拉取业务消息,而不需要服务器主动向接收端推送业务消息,使得能够有效的减轻服务器的负载压力。且在第一消息队列中未存储第一业务消息时,通过监听该第一消息队列,且在监听到第一消息队列中存储第一业务消息时,服务器将该第一业务消息推给所述第一接收端,使得服务器不需要实时监听所有的业务的消息队列,进一步降低服务器的负载压力。因此,通过推拉结合的方式能够有效的实现消息的分发,且降低服务器的负载压力。
在本发明实施例中,消息队列中的业务消息是由发送端发送的,因此,基于图2所示的第一实施例,请参阅图3,为本发明实施例图2所示第一实施例的追加步骤的流程示意图,该追加步骤包括:
步骤301、所述服务器接收发送端发送的第二业务消息,所述第二业务消息中包含所述第二业务消息所属的第二业务;
步骤302、所述服务器将发送端基于轮询的方式发送的所述第二业务消息存储至所述第二业务的消息队列中。
在本发明实施例中,发送端在生成第二业务消息之后,将该第二业务消息发送给服务器,该第二业务消息中包含该第二业务消息所属的第二业务。
服务器在接收到第二业务消息之后,将发送端基于轮询的方式发送的第二业务消息存储至所述第二业务的消息队列中。具体的,对于第二业务的多个消息队列,发送端预先设置了该多个消息队列存储业务消息的顺序,且发送端将确定上一次存储业务消息的消息队列,并将第二业务消息存储至上一次存储业务消息的消息队列的下一个消息队列,基于轮询的方式进行业务消息的发送,能够实现属于同一个业务的多个消息队列之前能够实现负载均衡。例如:若对于业务A,其已经具有消息队列1-5,且业务消息的存储顺序是从消息队列1依次存储至消息队列5,且向消息队列5中发送业务消息之后,下一个业务消息将发送至消息队列1,并以此循环,此即为轮询的存储方式。当发送端发送属于业务A的业务消息B时,确定上一次发送属于该业务A的消息到消息队列3,则将该业务消息B发送到消息队列4中。
在本发明实施例中,服务器接收到发送端发送的第二业务消息之后,将发送端基于轮询的方式发送的第二业务消息存储至所述第二业务的消息队列中,使得同一个业务的多个消息队列存储的业务消息个数保持均衡。
基于图2所示的第一实施例,请参阅图4,为本发明图2所示第一实施例的追加步骤的流程示意图,该追加步骤包括:
步骤401、所述服务器接收第二接收端发送的业务关注请求,所述业务关注请求中包含所述第二接收端请求关注的第三业务;
步骤402、所述服务器创建属于所述第三业务的第二消息队列,并建立所述第二消息队列与所述第二接收端之间一一对应的映射关系。
在本发明实施例中,服务器上可以有多种业务,且每一种业务都有多个消息队列,业务中的每一个消息队列都与接收端之间有一一对应的映射关系,其中,业务中的消息队列与接收端之间的一一对应的映射关系是基于接收端对业务的关注需求建立的。若第二接收端初始的时候并未关注第三业务,则在服务器的第三业务的消息队列中将不存在与该第二接收端对应的消息队列,若第二接收端需要关注第三业务,则第二接收端可以向服务器发送业务关注请求,该业务关注请求中包含第二接收端请求关注的第三业务。
服务器在接收到上述业务关注请求之后,将创建属于第三业务的第二消息队列,并建立该第二消息队列与第二接收端之间一一对应的映射关系。例如:若第三业务原来已有的消息队列为消息队列1-4,该消息队列1-4分别与接收端1-4具有一一对应的映射关系,若服务器接收到接收端5(即第二接收端)对该第三业务的业务关注请求,则在第三业务的消息队列中创建消息队列5,并在第三业务中建立消息队列5与接收端5之间一一对应的映射关系。
可以理解的是,在第三业务中增加第二消息队列之后,发送属于第三业务的业务消息的发送端将重新设置向该第三业务的多个消息队列发送业务消息时的轮询规则,例如,若原来发送属于第三业务的业务消息的顺序是从第三业务中的消息队列1至10,接收到第二接收端发送的业务关注请求之后,创建消息队列11(即为第二消息队列),则发送属于第三业务的业务消息的顺序从原来的消息队列1至10,变更为消息队列1至11,发送第三业务的业务消息的发送端在向服务器的第三业务的消息队列10发送业务消息之后,将下一个业务消息发送至第三业务的消息队列11,以实现基于轮询方式的业务消息的发送。
需要说明的是,服务器侧的某一个业务的消息队列的个数发生变更时,服务器将该业务变更后消息队列发送给消息中间件中的控制端,控制端接收到变更后的消息队列之后,将该变更后的消息队列发送给发送端,使得发送端能够基于变更后的消息队列重新确定其向服务器发送业务消息的发送顺序。
可以理解的,为了使得各接收端从服务器拉去的业务消息的个数是均衡的,服务器在创建上述第二消息队列,且建立第二消息队列与第二接收端之间一一对应的映射关系之后,服务器还将执行以下步骤:
步骤403、所述服务器在为所述第二接收端创建消息队列之后,向关注所述第三业务的所有接收端发送重分配指令,使得接收到所述重分配指令的接收端向所述服务器反馈用户选择的消息队列;
步骤404、所述服务器根据接收端反馈的消息队列,更新关注所述第三业务的接收端与所述第三业务的消息队列之间一一对应的映射关系。
在本发明实施例中,服务器向关注第三业务的所有接收端发送重分配指令,关注该第三业务的接收端接收到该重分配指令之后,将基于预先设置的统一的分配算法确定重新分配后的消息队列,并将重新分配后的消息队列反馈给服务器。
服务器在接收到关注第三业务的所有接收端反馈的重新分配后的消息队列之后,将更新关注该第三业务的接收端与第三业务的消息对之间一一对应的映射关系。
在本发明实施例中,服务器接收到第二接收端发送的业务关注请求后,将创建属于该第二接收端请求关注的第三业务的第二消息队列,并建立该第二消息队列与该第二接收端之间的一一对应的映射关系,使得在在第二接收端请求第三业务的业务消息时,服务器可以将该第二消息队列中的业务消息发送给该第二接收端,有效实现消息的分发。且在建立第二消息队列与第二接收端之间的一一对应的映射关系之后,服务器将向关注该第三业务的所有接收端发送重分配指令,并基于接收端反馈的重新分配后的消息队列更新该第三业务的接收端与消息队列之间一一对应的映射关系,有效实现接收端从服务器拉取的业务消息是均衡的。
下面将介绍实现图2所示第一实施例中的消息分发方法的服务器,该服务器也为图1所示的结构示意图中服务器。
请参阅图5,为本发明第二实施例中服务器的功能模块的示意图,该服务器包括:第一接收模块501、确定模块502及监听发送模块503。
第一接收模块501,用于接收消息获取请求,所述消息获取请求是第一接收端发送的;
确定模块502,用于根据所述消息获取请求及所述映射关系,确定用于存储所述第一接收端请求获取的业务消息的第一消息队列;
监听发送模块503,用于监听所述第一消息队列,若第一消息队列中存储第一业务消息,读取所述第一业务消息并发送给所述第一接收端;若第一消息队列中未存储第一业务消息,则所述第一接收端处于等待状态,直到监听到所述第一消息队列存储有第一业务消息时,读取所述第一业务消息并发送给所述第一接收端。
在本发明实施例中,所述确定模块502具体用于:获取所述消息获取请求中包含的所述第一业务;及查找关注所述第一业务的接收端与所述第一业务的消息队列之间一一对应的映射关系,确定与所述第一接收端对应的所述第一消息队列。
在本发明实施例中,接收端在需要获取业务消息时,可以向服务器发送消息获取请求,以主动拉取业务消息。
其中,服务器的第一接收模块501接收到第一接收端发送的消息获取请求之后,确定模块502将根据该消息获取请求及服务器中已经设置的各业务的接收端与消息队列之间的映射关系确定用于存储该第一接收端请求获取的业务消息的第一消息队列。
在本发明实施例中,消息获取请求中可以包含第一接收端请求获取的业务消息所属的第一业务,则确定模块502确定第一消息队列的方式包括:获取该消息获取请求中包含的第一业务,查找关注该第一业务的接收端与第一业务的消息队列之间一一对应的映射关系,确定用于存储该第一接收端请求获取的业务消息的第一消息队列。例如,若接收端A发送的消息获取请求中包含的业务是存款业务,则服务器查找存款业务的接收端与消息队列之间的映射关系,确定该接收端A对应的消息队列A,该消息队列A即为用于存储接收端A请求获取的业务消息的消息队列。
在本发明实施例,确定第一接收端请求获取的业务消息所在的第一消息队列之后,监听发送模块503将监听该第一消息队列,若该第一消息队列中存储第一业务消息,则读取该第一业务消息并发送给第一接收端,若该第一消息队列中未存储第一业务消息,则第一接收端处于等待状态,直至监听到第一消息队列存储有第一业务消息时,读取该第一业务消息并发送给第一接收端。
其中,第一接收端主动拉取业务消息的方式为长轮询的方式,即向服务器发送消息获取请求,服务器接收到该消息获取请求之后保持与第一接收端之间用于传输业务消息的连接,直到与该第一接收端对应的第一消息队列中存储有第一业务消息时,服务器将读取的该第一业务消息通过上述连接反馈给第一接收端,并释放与第一接收端之间用于传输业务消息的连接。且在第一接收端下次还需要获取业务消息时,可以再次发送上述消息获取请求。
在本发明实施例中,第一接收模块501接收消息获取请求,该消息获取请求是由第一接收端发送的,并由确定模块502根据该消息获取请求及各业务的接收端与消息队列之间的映射关系,确定用于存储该第一接收端请求获取的业务消息的第一消息队列,且监听发送模块503监听该第一消息队列,若该第一消息队列中存储第一业务消息,读取该第一业务消息并发送给第一接收端,若该第一消息队列中未存储第一业务消息,则第一接收端处于等待状态,直到监听到第一消息队列存储有第一业务消息时,读取该第一业务消息并发送给第一接收端。其中,接收端可以通过发送消息获取请求的方式主动从服务器拉取业务消息,而不需要服务器主动向接收端推送业务消息,使得能够有效的减轻服务器的负载压力。且在第一消息队列中未存储第一业务消息时,通过监听该第一消息队列,且在监听到第一消息队列中存储第一业务消息时,服务器将该第一业务消息推给所述第一接收端,使得服务器不需要实时监听所有的业务的消息队列,进一步降低服务器的负载压力。因此,通过推拉结合的方式能够有效的实现消息的分发,且降低服务器的负载压力。
在本发明实施例中,图5所示第二实施例中的消息获取请求中包含请求获取的业务消息所属的第一业务。请参阅图6,为本发明第三实施例中服务器的功能模块的示意图,该服务器包括如图5所示的第一接收模块501、确定模块502及监听发送模块503,且与图5所示第二实施例描述的内容相似,此处不做赘述。
在本发明实施例中,所述服务器还包括:
第二接收模块601,用于接收发送端发送的第二业务消息,所述第二业务消息中包含所述第二业务消息所属的第二业务;
存储模块602,用于将发送端基于轮询的方式发送的所述第二业务消息存储至所述第二业务的消息队列中。
在本发明实施例中,发送端在生成第二业务消息之后,将该第二业务消息发送给服务器,该第二业务消息中包含该第二业务消息所属的第二业务。
服务器的第二接收模块601在接收到第二业务消息之后,存储模块602将发送端基于轮询的方式发送的第二业务消息存储至所述第二业务的消息队列中。具体的,对于第二业务的多个消息队列,发送端预先设置了该多个消息队列存储业务消息的顺序,且发送端将确定上一次存储业务消息的消息队列,并将第二业务消息存储至上一次存储业务消息的消息队列的下一个消息队列,基于轮询的方式进行业务消息的发送,能够实现属于同一个业务的多个消息队列之前能够实现负载均衡。例如:若对于业务A,其已经具有消息队列1-5,且业务消息的存储顺序是从消息队列1依次存储至消息队列5,且向消息队列5中发送业务消息之后,下一个业务消息将发送至消息队列1,并以此循环,此即为轮询的存储方式。当发送端发送属于业务A的业务消息B时,确定上一次发送属于该业务A的消息到消息队列3,则将该业务消息B发送到消息队列4中。
在本发明实施例中,服务器接收到发送端发送的第二业务消息之后,将发送端基于轮询的方式发送的第二业务消息存储至所述第二业务的消息队列中,使得同一个业务的多个消息队列存储的业务消息个数保持均衡。
进一步的,在图6所示第三实施例中,所述服务器还包括:
第三接收模块603,用于接收第二接收端发送的业务关注请求,所述业务关注请求中包含所述第二接收端请求关注的第三业务;
建立模块604,用于创建属于所述第三业务的第二消息队列,并建立所述第二消息队列与所述第二接收端之间一一对应的映射关系。
在本发明实施例中,所述服务器还包括:
指令发送模块605,用于在建立所述第二消息队列与所述第二接收端之间一一对应的映射关系之后,向关注所述第三业务的所有接收端发送重分配指令,使得接收到所述重分配指令的接收端向所述服务器反馈重新分配后的消息队列;
更新模块606,用于根据接收端反馈的消息队列,更新关注所述第三业务的接收端与所述第三业务的消息队列之间一一对应的映射关系。
在本发明实施例中,若第二接收端需要关注第三业务,则该第二接收端将向服务器发送业务关注请求,该业务关注请求中包含该第二接收端请求关注的第三业务。
服务器的第三接收模块603在接收到上述业务关注请求之后,建立模块604将创建属于第三业务的第二消息队列,并建立该第二消息队列与第二接收端之间一一对应的映射关系。
在本发明实施例中,服务器上可以有多种业务,且每一种业务都有多个消息队列,业务中的每一个消息队列都与接收端之间有一一对应的映射关系,其中,业务中的消息队列与接收端之间的一一对应的映射关系是基于接收端对业务的关注需求建立的。若第二接收端初始的时候并未关注第三业务,则在服务器的第三业务的消息队列中将不存在与该第二接收端对应的消息队列,若第二接收端需要关注第三业务,则第二接收端可以向服务器发送业务关注请求,该业务关注请求中包含第二接收端请求关注的第三业务。
其中,服务器中的第三接收模块603将接收第二接收端发送的业务关注请求。
在接收到上述业务关注请求之后,建立模块604将创建属于第三业务的第二消息队列,并建立该第二消息队列与第二接收端之间一一对应的映射关系。例如:若第三业务原来已有的消息队列为消息队列1-4,该消息队列1-4分别与接收端1-4具有一一对应的映射关系,若服务器接收到接收端5(即第二接收端)对该第三业务的业务关注请求,则在第三业务的消息队列中创建消息队列5,并在第三业务中建立消息队列5与接收端5之间一一对应的映射关系。
可以理解的是,在第三业务中增加第二消息队列之后,发送属于第三业务的业务消息的发送端将重新设置向该第三业务的多个消息队列发送业务消息时的轮询规则,例如,若原来发送属于第三业务的业务消息的顺序是从第三业务中的消息队列1至10,接收到第二接收端发送的业务关注请求之后,创建消息队列11(即为第二消息队列),则发送属于第三业务的业务消息的顺序从原来的消息队列1至10,变更为消息队列1至11,发送第三业务的业务消息的发送端在向服务器的第三业务的消息队列10发送业务消息之后,将下一个业务消息发送至第三业务的消息队列11,以实现基于轮询方式的业务消息的发送。
需要说明的是,服务器侧的某一个业务的消息队列的个数发生变更时,服务器将该业务变更后消息队列发送给消息中间件中的控制端,控制端接收到变更后的消息队列之后,将该变更后的消息队列发送给发送端,使得发送端能够基于变更后的消息队列重新确定其向服务器发送业务消息的发送顺序。
在本发明实施例中,在建立所述第二消息队列与所述第二接收端之间一一对应的映射关系之后,指令发送模块605向关注第三业务的所有接收端发送重分配指令,关注该第三业务的接收端接收到该重分配指令之后,将基于预先设置的统一的分配算法确定重新分配后的消息队列,并将重新分配后的消息队列反馈给服务器。
服务器在接收到关注第三业务的所有接收端反馈的重新分配后的消息队列之后,将由更新模块606更新关注该第三业务的接收端与第三业务的消息对之间一一对应的映射关系。
在本发明实施例中,服务器接收到第二接收端发送的业务关注请求后,将创建属于该第二接收端请求关注的第三业务的第二消息队列,并建立该第二消息队列与该第二接收端之间的一一对应的映射关系,使得在在第二接收端请求第三业务的业务消息时,服务器可以将该第二消息队列中的业务消息发送给该第二接收端,有效实现消息的分发。且在建立第二消息队列与第二接收端之间的一一对应的映射关系之后,服务器将向关注该第三业务的所有接收端发送重分配指令,并基于接收端反馈的重新分配后的消息队列更新该第三业务的接收端与消息队列之间一一对应的映射关系,有效实现接收端从服务器拉取的业务消息是均衡的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (6)
1.一种消息分发方法,其特征在于,对于每一种业务,服务器包含关注所述业务的接收端与所述业务的消息队列之间一一对应的映射关系,所述消息队列用于存储第一业务消息,所述方法包括:
所述服务器接收消息获取请求,所述消息获取请求是第一接收端发送的;
所述服务器根据所述消息获取请求及所述映射关系,确定用于存储所述第一接收端请求获取的业务消息的第一消息队列;
监听所述第一消息队列,若第一消息队列中存储第一业务消息,读取所述第一业务消息并发送给所述第一接收端;若第一消息队列中未存储第一业务消息,则所述第一接收端处于等待状态,直到监听到所述第一消息队列存储有第一业务消息时,读取所述第一业务消息并发送给所述第一接收端;
所述服务器接收第二接收端发送的业务关注请求,所述业务关注请求中包含所述第二接收端请求关注的第三业务;
所述服务器创建属于所述第三业务的第二消息队列,并建立所述第二消息队列与所述第二接收端之间一一对应的映射关系;
所述服务器在建立所述第二消息队列与所述第二接收端之间一一对应的映射关系之后,向关注所述第三业务的所有接收端发送重分配指令,使得接收到所述重分配指令的接收端向所述服务器反馈重新分配后的消息队列;
所述服务器根据接收端反馈的消息队列,更新关注所述第三业务的接收端与所述第三业务的消息队列之间一一对应的映射关系。
2.根据权利要求1所述的方法,其特征在于,所述消息获取请求中包含请求获取的业务消息所属的第一业务;
则所述服务器根据所述消息获取请求及所述映射关系,确定用于存储所述第一接收端请求获取的业务消息的第一消息队列,包括:
获取所述消息获取请求中包含的所述第一业务;
查找关注所述第一业务的接收端与所述第一业务的消息队列之间一一对应的映射关系,确定与所述第一接收端对应的所述第一消息队列。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述服务器接收发送端发送的第二业务消息,所述第二业务消息中包含所述第二业务消息所属的第二业务;
所述服务器将发送端基于轮询的方式发送的所述第二业务消息存储至所述第二业务的消息队列中。
4.一种服务器,其特征在于,对于每一种业务,所述服务器包含关注所述业务的接收端与所述业务的消息队列之间一一对应的映射关系,所述消息队列用于存储第一业务消息,所述服务器包括:
第一接收模块,用于接收消息获取请求,所述消息获取请求是第一接收端发送的;
确定模块,用于根据所述消息获取请求及所述映射关系,确定用于存储所述第一接收端请求获取的业务消息的第一消息队列;
监听发送模块,用于监听所述第一消息队列,若第一消息队列中存储第一业务消息,读取所述第一业务消息并发送给所述第一接收端;若第一消息队列中未存储第一业务消息,则所述第一接收端处于等待状态,直到监听到所述第一消息队列存储有第一业务消息时,读取所述第一业务消息并发送给所述第一接收端;
第三接收模块,用于接收第二接收端发送的业务关注请求,所述业务关注请求中包含所述第二接收端请求关注的第三业务;
建立模块,用于创建属于所述第三业务的第二消息队列,并建立所述第二消息队列与所述第二接收端之间一一对应的映射关系;
指令发送模块,用于在建立所述第二消息队列与所述第二接收端之间一一对应的映射关系之后,向关注所述第三业务的所有接收端发送重分配指令,使得接收到所述重分配指令的接收端向所述服务器反馈重新分配后的消息队列;
更新模块,用于根据接收端反馈的消息队列,更新关注所述第三业务的接收端与所述第三业务的消息队列之间一一对应的映射关系。
5.根据权利要求4所述的服务器,其特征在于,所述消息获取请求中包含请求获取的业务消息所属的第一业务;
则所述确定模块具体用于:获取所述消息获取请求中包含的所述第一业务;及查找关注所述第一业务的接收端与所述第一业务的消息队列之间一一对应的映射关系,确定与所述第一接收端对应的所述第一消息队列。
6.根据权利要求4所述的服务器,其特征在于,所述服务器还包括:
第二接收模块,用于接收发送端发送的第二业务消息,所述第二业务消息中包含所述第二业务消息所属的第二业务;
存储模块,用于将发送端基于轮询的方式发送的所述第二业务消息存储至所述第二业务的消息队列中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610614375.6A CN106302647B (zh) | 2016-07-29 | 2016-07-29 | 消息分发方法及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610614375.6A CN106302647B (zh) | 2016-07-29 | 2016-07-29 | 消息分发方法及服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106302647A CN106302647A (zh) | 2017-01-04 |
CN106302647B true CN106302647B (zh) | 2019-06-25 |
Family
ID=57663465
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610614375.6A Active CN106302647B (zh) | 2016-07-29 | 2016-07-29 | 消息分发方法及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106302647B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106803841B (zh) * | 2017-02-14 | 2020-04-10 | 北京奇虎科技有限公司 | 消息队列数据的读取方法、装置及分布式数据存储系统 |
CN108965164B (zh) * | 2017-05-17 | 2021-12-07 | 北京京东尚科信息技术有限公司 | 基于消息队列的业务请求重传方法、装置及可读存储介质 |
CN108600088A (zh) * | 2018-04-16 | 2018-09-28 | 成都医云科技有限公司 | 数据处理方法及装置 |
CN111381977A (zh) * | 2018-12-29 | 2020-07-07 | 北大方正集团有限公司 | 消息处理方法及设备 |
CN110908810A (zh) * | 2019-10-30 | 2020-03-24 | 泰康保险集团股份有限公司 | 一种消息传输方法和装置 |
CN111045813B (zh) * | 2019-12-27 | 2024-01-02 | 京北方信息技术股份有限公司 | 一种任务分发系统及方法 |
CN111679892A (zh) * | 2020-06-04 | 2020-09-18 | 中国建设银行股份有限公司 | 分布式事务的处理方法、装置、设备及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102480517A (zh) * | 2010-11-30 | 2012-05-30 | 北京千橡网景科技发展有限公司 | 数据推送方法以及移动终端、服务器 |
CN105591877A (zh) * | 2014-10-23 | 2016-05-18 | 阿里巴巴集团控股有限公司 | 一种业务消息传输方法、装置及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7467388B2 (en) * | 2005-11-22 | 2008-12-16 | Microsoft Corporation | Monitoring message queues and starting processing applications |
-
2016
- 2016-07-29 CN CN201610614375.6A patent/CN106302647B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102480517A (zh) * | 2010-11-30 | 2012-05-30 | 北京千橡网景科技发展有限公司 | 数据推送方法以及移动终端、服务器 |
CN105591877A (zh) * | 2014-10-23 | 2016-05-18 | 阿里巴巴集团控股有限公司 | 一种业务消息传输方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106302647A (zh) | 2017-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106302647B (zh) | 消息分发方法及服务器 | |
CN106899680B (zh) | 多区块链的分片处理方法和装置 | |
US9953612B2 (en) | Systems and methods for facilitating communication between mobile devices and display devices | |
CN103209223B (zh) | 分布式应用会话信息共享方法、系统和应用服务器 | |
US9703610B2 (en) | Extensible centralized dynamic resource distribution in a clustered data grid | |
CN106533932B (zh) | 一种用于推送即时消息的方法和装置 | |
CN109040212A (zh) | 设备接入服务器集群方法、系统、设备及存储介质 | |
CN104079630A (zh) | 一种业务服务端负载均衡方法、客户端、服务端以及系统 | |
CN105721547B (zh) | 协同处理业务的方法和装置 | |
CN102655503A (zh) | 使用共享资源池的资源分配 | |
CN104243405A (zh) | 一种请求处理方法、装置及系统 | |
CN104246737A (zh) | 在内容分发网络中使用视频流的连接池技术的系统和方法 | |
US8606908B2 (en) | Wake-up server | |
CN110289999A (zh) | 一种数据处理方法、系统及装置 | |
CN111917838B (zh) | 基于微服务的处理方法及装置、存储介质、电子装置 | |
CN109407980A (zh) | 基于Redis集群的数据存储系统 | |
CN109639598A (zh) | 基于微服务的请求处理方法、服务器、存储介质及装置 | |
CN110515731A (zh) | 一种数据处理方法、装置及系统 | |
US9992140B2 (en) | Electronic apparatus, server, and control method of system | |
CN107426323A (zh) | 一种基于分布式的资源服务与可视化监控系统及方法 | |
CN112751761A (zh) | 交易路由的回切方法、中间系统和业务处理系统 | |
CN103428260A (zh) | 用于将终端分配到服务器并高效地提示终端的系统及方法 | |
CN101247370B (zh) | 消息呈现业务的实现方法和系统 | |
CN109194993B (zh) | 媒体文件分发方法及文件分发平台 | |
CN114338769A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |