CN107835203B - 消息分组投递的方法、装置、存储介质及终端 - Google Patents
消息分组投递的方法、装置、存储介质及终端 Download PDFInfo
- Publication number
- CN107835203B CN107835203B CN201710676550.9A CN201710676550A CN107835203B CN 107835203 B CN107835203 B CN 107835203B CN 201710676550 A CN201710676550 A CN 201710676550A CN 107835203 B CN107835203 B CN 107835203B
- Authority
- CN
- China
- Prior art keywords
- message
- sent
- terminal
- group
- 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.)
- Active
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/56—Provisioning of proxy services
- H04L67/566—Grouping or aggregating service requests, e.g. for unified processing
Abstract
本发明适用于通信技术领域,提供了一种消息分组投递的方法、装置、存储介质及终端,所述方法包括:在使用java消息服务进行通信时,获取待发送消息的队列名称,根据该队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,获取查询结果,以确定发送方终端所在分组内是否存在待发送消息的消费方终端;根据查询结果设置所述待发送消息的message selector属性信息;将所述待发送消息发送至消息中间件,以使得所述消息中间件接收所述待发送消息后,根据所述message selector属性信息对所述待发送消息进行组内投递或者组间投递。本发明解决了现有的基于JMS的通信方式容易导致消息在组内积压的问题,能够使用较少的机器资源和维护成本,为研发人员提供消息联调环境。
Description
技术领域
本发明属于通信技术领域,尤其涉及一种消息分组投递的方法、装置、存储介质及终端。
背景技术
JMS(Java Message Service,即Java消息服务)规范中定义了用于选择消息消费方的Message Selector机制。通过该Message Selector机制,可以让一个组内的所有客户端在发送消息或者接收消息时带上一样的Message Selector属性信息,实现组内消息的闭环收发。然而,当消息的消费方终端不在该组内时,该消息会因为没有对应的消费方终端接收而被积压,直至出现消费方终端来把它消费掉,或者通过消息中间件直接将其删除。可见,现有的基于JMS的通信方式容易导致消息在组内积压,且对消息中间件存在一定的要求,机器资源和维护成本高。
发明内容
本发明实施例提供了一种消息分组投递的方法、装置、存储介质及终端,所述方法包括:
在使用java消息服务进行通信时,获取待发送消息的队列名称,根据所述队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,获取查询结果,以确定所述发送方终端所在分组内是否存在所述待发送消息的消费方终端;
根据所述查询结果设置所述待发送消息的message selector属性信息;
将所述待发送消息发送至消息中间件,以使得所述消息中间件接收所述待发送消息后,根据所述message selector属性信息对所述待发送消息进行组内投递或者组间投递;
其中,所述分组包括一个或多个队列名称;在所述队列名称与终端之间的对应关系中,每一个队列名称对应一个或多个终端及其物理地址,所述终端为能够处理所述队列名称的点对点消息的终端。
进一步地,所述查询结果包括所述发送方终端所在分组内存在所述待发送消息的消费方终端,或者所述发送方终端所在分组内不存在所述待发送消息的消费方终端;
所述根据所述查询结果设置所述待发送消息的message selector属性信息包括:
若发送方终端所在分组内存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为所述发送方终端所在分组的分组标识,以使得所述消息中间件将所述待发送消息投递至所述发送方终端所在分组内的消费方终端;
若发送方终端所在分组内不存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为默认标识,以使得所述消息中间件将所述待发送消息投递至默认分组内的消费方终端。
进一步地,所述方法还包括:
从管理员服务器中获取所述发送方终端所在分组的队列名称与终端之间的对应关系。
进一步地,在从管理员服务器中获取所述发送方终端所在分组的队列名称与终端之间的对应关系之后,所述方法还包括:
接收管理员服务器发送的更新消息,并根据所述更新消息更新所述队列名称与终端之间的对应关系;
其中,所述更新消息是由所述管理员服务器在监测到消费方终端上下线或者有新的消费方终端注册时所发送的。
本发明实施例还提供了一种消息分组投递的装置,所述装置包括:
查询模块,用于在使用java消息服务进行通信时,获取待发送消息的队列名称,根据所述队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,获取查询结果,以确定所述发送方终端所在分组内是否存在所述待发送消息的消费方终端;
设置模块,用于根据所述查询结果设置所述待发送消息的message selector属性信息;
发送模块,用于将所述待发送消息发送至消息中间件,以使得所述消息中间件接收所述待发送消息后,根据所述message selector属性信息对所述待发送消息进行组内投递或者组间投递;
其中,所述分组包括一个或多个队列名称;在所述队列名称与终端之间的对应关系中,每一个队列名称对应一个或多个终端及其物理地址,所述终端为能够处理所述队列名称的点对点消息的终端。
进一步地,所述查询结果包括所述发送方终端所在分组内存在所述待发送消息的消费方终端,或者所述发送方终端所在分组内不存在所述待发送消息的消费方终端;
所述设置模块包括:
第一设置单元,用于若发送方终端所在分组内存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为所述发送方终端所在分组的分组标识,以使得所述消息中间件将所述待发送消息投递至所述发送方终端所在分组内的消费方终端;
第二设置单元,用于若发送方终端所在分组内不存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为默认标识,以使得所述消息中间件将所述待发送消息投递至默认分组内的消费方终端。
进一步地,所述装置还包括:
获取模块,用于从管理员服务器中获取所述发送方终端所在分组的队列名称与终端之间的对应关系。
进一步地,所述装置还包括:
更新模块,用于接收管理员服务器发送的更新消息,并根据所述更新消息更新所述队列名称与终端之间的对应关系;
其中,所述更新消息是由所述管理员服务器在监测到消费方终端上下线或者有新的消费方终端注册时所发送的。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序由处理器执行时实现如上所述的消息分组投递的方法所述的步骤。
本发明实施例还提供了一种终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
在使用java消息服务进行通信时,获取待发送消息的队列名称,根据所述队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,获取查询结果,以确定所述发送方终端所在分组内是否存在所述待发送消息的消费方终端;
根据所述查询结果设置所述待发送消息的message selector属性信息;
将所述待发送消息发送至消息中间件,以使得所述消息中间件接收所述待发送消息后,根据所述message selector属性信息对所述待发送消息进行组内投递或者组间投递;
其中,所述分组包括一个或多个队列名称;在所述队列名称与终端之间的对应关系中,每一个队列名称对应一个或多个终端及其物理地址,所述终端为能够处理所述队列名称的点对点消息的终端。
与现有技术相比,本发明实施例通过在使用java消息服务进行通信时,获取待发送消息的队列名称,根据所述队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,获取查询结果,以确定所述发送方终端所在分组内是否存在所述待发送消息的消费方终端;然后根据查询结果设置所述待发送消息的message selector属性信息,并将所述待发送消息发送至消息中间件,以使得所述消息中间件接收所述待发送消息后,根据所述message selector属性信息对所述待发送消息进行组内投递或者组间投递;从而避免了消息在组内积压,也无需担心消费方意外下线导致消息无法消费;且消息分组更加灵活,无需在一个分组内拥有所有消息的消费方,能够使用较少的机器资源和维护成本为研发人员提供消息联调环境。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。
图1是本发明实施例提供的消息分组投递的方法的实现流程图;
图2是本发明实施例提供的消息分组投递的方法中步骤S102的实现流程图;
图3是本发明实施例提供的消息分组投递的方法的另一实现流程图;
图4是本发明实施例提供的消息分组投递的装置的组成结构图;
图5是本发明实施例提供的终端的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1示出了本发明实施例提供的消息分组投递的方法的实现流程。
在本发明实施例中,所述消息分组投递的方法应用于终端,所述终端包括但不限于智能手机、平板电脑、计算机和服务器等。
参阅图1,所述消息分组投递的方法包括:
在步骤S101中,在使用java消息服务进行通信时,获取待发送消息的队列名称,根据所述队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,获取查询结果,以确定所述发送方终端所在分组内是否存在所述待发送消息的消费方终端。
在本发明实施例中,所述分组为消费方终端的物理地址的集合,不同的分组对应不同的分组标识。所述分组内包括一个或多个队列名称。在这里,所述队列名称为JMS规范中点对点模型的Queue消息类型的标识信息。在Queue消息类型中,一个消息投递给一个消费方终端,即点对点通信,因此,在本发明实施例中,每一个消费方终端都有对应的其能够处理的Queue消息类型。在所述队列名称与终端之间的对应关系中,每一个队列名称对应一个或多个终端及其物理地址,所述终端为能够处理所述队列名称的点对点消息的终端。本发明实施例对组内的终端再按照队列名称来划分,使得消息分组更加灵活,也方便了发送方终端在发送消息前的查询作业。
在发送消息前,发送方终端先确定当前待发送消息对应的队列名称,然后根据所确定的队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,并获取查询结果,以查询本分组内是否存在能够处理所述队列名称的点对点消息的其他终端的。若本分组内存在能够处理所述队列名称的点对点消息的其他终端时,所述其他终端为所述待发送消息的消费方终端;否则,本分组内不存在能够处理所述队列名称的点对点消息的其他终端。
在步骤S102中,根据所述查询结果设置所述待发送消息的message selector属性信息。
如前文所述,所述发送方终端在发送消息前,先通过查询发送方终端所在分组内的队列标识与终端之间的对应关系来确定发送方终端所在分组内是否存在所述待发送消息的消费方终端,若是时,表明当前环境存在消费方终端,则所述发送方终端做出进行组内投递的决定;若否时,表明当前环境不存在消费方终端,则所述发送方终端做出进行组间投递的决定。
可选地,本发明实施例选用message selector属性信息来记录所述发送方终端的决定,以使得消息到达消息中间件后,消息中间件只需遵循JMS规范实现消息的转发操作,避免了对消息中间件增加额外的操作要求。示例性地,图2示出了本分明实施例提供的消息分组投递的方法中步骤S102的具体实现流程。参阅图2,所述步骤S102包括:
在步骤S201中,若发送方终端所在分组内存在待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为所述发送方终端所在分组的分组标识,以使得所述消息中间件将所述待发送消息投递至所述发送方终端所在分组内的消费方终端。
在步骤S202中,若发送方终端所在分组内不存在待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为默认标识,以使得所述消息中间件将所述待发送消息投递至默认分组内的消费方终端。
在这里,本发明实施例需要保证存在一个所述默认标识对应的默认分组,用于接收没有特定分组的消息。示例性地,在实际应用中,所述默认标识可以为machine_group=DEFAULT。
在步骤S103中,将所述待发送消息发送至消息中间件,以使得所述消息中间件接收所述待发送消息后,根据所述message selector属性信息对所述待发送消息进行组内投递或者组间投递。
在根据查询结果设置message selector属性信息之后,所述发送方终端将待发送消息发送至消息中间件。消息中间件接收所述待发送消息,解析所述待发送消息的头部得到所述message selector属性信息,若所述message selector属性信息携带的是具体的分组标识时,则将所述待发送消息转发至所述分组标识对应分组内的消费方终端,以实现有消费方时的组内投递;若所述message selector属性信息携带的是默认标识,则将所述待发送消息转发至所述默认标识对应的默认分组内的消费方终端,以实现无消费方时的组间投递;从而有效地解决了消费方终端不在组内时,消息被积压的问题。在这里,所述消息中间件为遵循JMS规范的消息中间件,包括但不限于Apache ActiveMQ、RabbitMQ。
可选地,在本发明实施例中,所述发送方终端可以从管理员服务器中获取所述发送方终端所在分组的队列名称与终端之间的对应关系。在这里,所述管理员服务器可以为ZooKeeper服务器。消费方终端预先向消息中心注册自身所属的分组,然后再把自己能够处理的点对点消息的队列名称X、所属分组的分组标识Y以及物理地址Z发送至管理员服务器,管理员服务器则会记录下该分组标识Y对应分组内能够处理队列名称X的点对点消息的消费方终端Z,并生成不同的分组Y与队列名称X之间的对应关系、队列名称X与终端Z之间的对应关系,最后将所述对应关系缓存至发送方终端的内存中。
在现有技术中,所述管理员服务器还可以监测终端的上下线状态。对应的,在本发明实施例中,所述管理员服务器还可以根据监测到的状态更新所述队列名称X与终端Z之间的对应关系,并及时更新至所述发送方终端,避免了在一个分组内拥有所有消息的消费方。因此,所述发送方终端还可以用于:
接收管理员服务器发送的更新消息,并根据所述更新消息更新所述队列名称与终端之间的对应关系,其中,所述更新消息是由所述管理员服务器在感知到消费方终端上下线或者有新的消费方终端注册时所发送的。
基于所述更新后的队列名称X与终端Z之间的对应关系,所述发送方能够及时获知消费方的情况。通过查询所述队列标识X与终端Z之间的对应关系,一旦能够处理某个队列名称X的点对点消息的消费方终端Z因为比如下线等情况从组内退出时,发送方终端就可以在发送前获知并将原本投向组内该消费方终端的消息变更为投递至组外的默认消费者,从而避免了组内消息的积压。
以上是仅从发送方终端的角度叙述的消息分组投递的方法的实现流程。为了便于理解,以下结合JMS规范中的点对点模型的交互流程来叙述所述消息分组投递的方法的实现流程。参阅图3,示出了消息分组投递的方法的另一实现流程,所述消息分组投递的方法由消息中间件、管理员服务器、至少一个发送方终端(图中仅示出一个)、至少一个默认消费方终端(图中仅示出一个)、至少一个组内消费方终端(图中仅示出一个)共同完成,包括:
在步骤S301中,所述默认消费方终端向所述消息中间件发送注册信息,以注册默认标识。
可选地,假设存在默认分组DEFAULT。通过步骤S301后,所述默认消费方终端注册到默认标识machine_group=DEFAULT。
在步骤S302中,所述组内消费方终端向所述消息中间件发送注册信息,以注册分组标识。
可选地,假设存在分组group1,本发明实施例中所述的发送方终端和消费方终端均属于所述分组group1,则通过步骤S302后,所述组内消费方终端注册到分组标识machine_group=group1。
需要说明的是,上述默认标识machine_group=DEFAULT、分组标识machine_group=group1仅为本发明的一个优选示例,并不用于限制本发明。
在步骤S303中,所述组内消费方终端将能够处理的点对点消息的队列名称、所属分组的分组标识以及物理地址发送至所述管理员服务器。
在步骤S304中,所述管理员服务器记录并存储该组内的队列名称与终端之间的对应关系。
如前文所述,所述分组为终端的物理地址的集合。所述队列名称将分组内的终端按照其能够处理的点对点消息划分开来,可以采用Y分组包含能够处理队列名称X的点对点消息的消费终端Z的方式进行记录,其中,所述Y表示分组标识,所述X表示点对点消息的队列名称、所述Z表示物理地址。
示例性地,如前文所述,假设存在分组group1,该分组内对应的点对点消息的队列名称包括QueueA、QueueB和QueueC。若group1内物理地址为idevice001、idevice002的终端能够处理的点对点消息的队列名称为QueueA,以及物理地址为idevice003的终端能够处理的点对点消息的队列名称为QueueB。那么,在步骤S303中,所述idevice001终端将自己能够处理的点对点消息的队列名称QueueA、所属分组的分组标识group1以及物理地址信息idevice001发送给管理员服务器,所述idevice002终端将自己能够处理的点对点消息的队列的名称QueueA、所属分组的分组标识group1以及物理地址信息idevice002发送给管理员服务器,所述idevice003终端将自己能够处理的点对点消息的队列的名称QueueB、所属分组的分组标识group1以及物理地址信息idevice003发送给管理员服务器。管理员服务器接收之后,整理并记录为:group1分组内包括能够处理队列名称QueueA的点对点消息的消费终端idevice001、idevice002,以及能够处理队列名称QueueB的点对点消息的消费终端idevice003。
在步骤S305中,所述发送方终端向所述消息中间件发送注册信息。
在步骤S306中,所述发送方终端以订阅的方式向所述管理员服务器获取所在分组内的队列名称与终端之间的对应关系。
在步骤S307中,在发送消息前,所述发送方终端获取待发送消息的队列名称,根据所述队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,获取查询结果,以确定所述发送方终端所在分组内是否存在所述待发送消息的消费方终端。
在步骤S308中,若存在待发送消息的消费方终端时,所述发送方终端将所述待发送消息的message selector属性信息设置为所述发送方终端所在分组的分组标识;若不存在待发送消息的消费方终端时,所述发送方终端将所述待发送消息的message selector属性信息设置为默认标识。
如前文所述,若存在待发送消息的消费方终端时,所述发送方终端将所述待发送消息的message selector属性信息设置为machine_group=group1;若不存在待发送消息的消费方终端时,所述发送方终端将所述待发送消息的message selector属性信息设置为machine_group=DEFAULT。
在步骤S309中,所述发送方终端将所述待发送消息发送至所述消息中间件。
在步骤S310,所述消息中间件接收所述待发送消息,并解析获取所述messageselector属性信息。
在步骤S311中,若所述message selector属性信息携带的是分组标识时,所述消息中间件将所述待发送消息转发至所述发送方所在分组内的消费方终端,以实现有消费方时的组内投递。
如前文所述,若所述message selector属性信息为machine_group=group1时,所述消息中间件将所述待发送消息转发至所述分组标识对应分组内的消费方终端。
在步骤S312中,若所述message selector属性信息携带的是默认标识时,所述消息中间件将所述待发送消息转发至所述默认标识对应的默认分组内的消费方终端,以实现无消费方时的组间投递。
如前文所述,若所述message selector属性信息为machine_group=DEFAULT时,所述消息中间件将所述待发送消息转发至所述默认标识对应的默认分组内的消费方终端。
在这里,所述管理员服务器可以为ZooKeeper。所述消息中间件为遵循JMS规范的消息中间件,包括但不限于Apache ActiveMQ、RabbitMQ。
通过查询所述队列名称与终端之间的对应关系,一旦能够处理某个队列名称的点对点消息的消费方终端因为比如下线等情况从组内退出时,发送方终端就可以在发送前获知并将原本投向组内的消息变更为投递至组外的默认消费者,从而避免了组内消息的积压,也无需担心消费方意外下线导致消息无法消费;且对消息中间件没有任何要求,只需消息中间件遵循JMS规范即可,能够使用较少的机器资源和维护成本为研发人员提供消息联调环境。
应理解,在上述实施例中,各步骤的序号的大小并不意味着执行顺序的先后,各步骤的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
需要说明的是,本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,所述存储介质可以是只读存储器,磁盘或光盘等。
图4示出了本发明实施例提供的消息分组投递的装置的组成结构图,为了便于说明,仅示出了与本发明实施例相关的部分。
在本发明实施例中,所述消息分组投递的装置用于实现上述图1、图2实施例中所述的消息分组投递的方法或者图3实施例中所述的发送方终端的功能,可以是内置于发送方终端的软件单元、硬件单元或者软硬件结合的单元。所述发送方终端包括但不限于智能智能手机、平板电脑、计算机、服务器等。
参阅图4,所述消息分组投递的装置包括:
查询模块41,用于在使用java消息服务进行通信时,获取待发送消息的队列名称,根据所述队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,获取查询结果,以确定所述发送方终端所在分组内是否存在所述待发送消息的消费方终端;
设置模块42,用于根据所述查询结果设置所述待发送消息的message selector属性信息;
发送模块43,用于将所述待发送消息发送至消息中间件,以使得所述消息中间件接收所述待发送消息后,根据所述message selector属性信息对所述待发送消息进行组内投递或者组间投递。
在本发明实施例中,所述分组为消费方终端的物理地址的集合,不同的分组对应不同的分组标识。所述分组内包括一个或多个队列名称。在这里,所述队列名称为JMS规范中点对点模型的Queue消息类型的标识信息。在Queue消息类型中,一个消息投递给一个消费方终端,即点对点通信,因此,在本发明实施例中,每一个消费方终端都有对应的能够处理的Queue消息类型。在所述队列名称与终端之间的对应关系中,每一个队列名称对应一个或多个终端及其物理地址,所述终端为能够处理所述队列名称的点对点消息的终端。本发明实施例对组内的终端再按照队列名称来划分,使得消息分组更加灵活,避免了在一个分组内拥有所有消息的消费方,也方便了发送方终端在发送消息前的查询作业。
在发送消息前,查询模块41确定当前待发送消息对应的队列名称,然后根据所确定的队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,获取查询结果,以查询本分组内是否存在能够处理所述队列名称的点对点消息的其他终端的。若本分组内存在能够处理所述队列名称的点对点消息的其他终端时,所述其他终端为所述待发送消息的消费方终端;否则,本分组内不存在能够处理所述队列名称的点对点消息的其他终端。可选地,本发明实施例选用message selector属性信息来记录上述查询结果,以使得消息达到消息中间件后,消息中间件只需遵循JMS规范实现消息的转发操作,避免对消息中间件增加额外的要求。
因此,所述设置模块42具体还可以包括:
第一设置单元421,用于若发送方终端所在分组内存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为所述发送方终端所在分组的分组标识,以使得所述消息中间件将所述待发送消息投递至所述发送方终端所在分组内的消费方终端;
第二设置单元422,用于若发送方终端所在分组内不存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为默认标识,以使得所述消息中间件将所述待发送消息投递至默认分组内的消费方终端。
在这里,本发明实施例需要保证存在一个默认分组,用于接收没有特定分组的消息,所述默认分组的分组标识为默认标识。
在根据查询结果设置message selector属性信息之后,所述发送模块43将待发送消息发送至消息中间件。消息中间件接收到所述待发送消息之后,解析所述待发送消息的头部得到所述message selector属性信息,若所述message selector属性信息为明确的分组标识时,则将所述待发送消息转发至所述分组标识对应分组内的消费方终端,以实现有消费方时的组内投递;若所述message selector属性信息为默认标识时,则将所述待发送消息转发至所述默认标识对应的默认分组内的消费方终端,以实现无消费方时的组间投递;从而有效地解决了消费方终端不在组内时,消息被积压的问题。在这里,所述消息中间件为遵循JMS规范的消息中间件,包括但不限于Apache ActiveMQ、RabbitMQ等。
可选地,所述消息分组投递的装置还包括:
获取模块44,用于从管理员服务器中获取所述发送方终端所在分组的队列名称与终端之间的对应关系。
在这里,所述管理员服务器可以为ZooKeeper服务器。消费方终端预先向消息中心注册自身所属的分组,然后再把自己能够处理的点对点消息的队列名称X、所属分组的分组标识Y以及物理地址Z发送至管理员服务器,管理员服务器则会记录下该分组标识Y对应分组内能够处理队列名称X的点对点消息的消费方终端Z,并生成不同的分组与队列名称之间的对应关系、队列名称与终端之间的对应关系,最后将所述对应关系缓存至发送方终端的内存中。
在现有技术中,所述管理员服务器还可以监测终端的上下线状态。对应的,在本发明实施例中,所述管理员服务器还可以根据监测到的状态更新所述队列名称与终端之间的对应关系,并及时更新至所述发送方终端。因此,所述消息分组投递的装置还包括:
更新模块45,用于接收管理员服务器发送的更新消息,并根据所述更新消息更新所述队列名称与终端之间的对应关系;
其中,所述更新消息是由所述管理员服务器在监测到消费方终端上下线或者有新的消费方终端注册时所发送的。
基于所述更新后的队列名称与终端之间的对应关系,所述发送方能够及时获知消费方的情况。通过查询所述队列标识与终端之间的对应关系,一旦能够处理某个队列名称的点对点消息的消费方终端因为比如下线等情况从组内退出时,发送方终端就可以在发送前获知并将原本投向组内该消费方终端的消息变更为投递至组外的默认消费者,从而避免了组内消息的积压。
需要说明的是,本发明实施例中的终端可以用于实现上述方法实施例中的全部技术方案。所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
图5是本发明实施例提供的一种终端的示意图。如图5所示,该实施例的终端5包括:处理器50、存储器51以及存储在所述存储器51中并可在所述处理器50上运行的计算机程序52。所述处理器50执行所述计算机程序52时实现上述消息分组投递的方法实施例中的步骤,例如图1所示的步骤S101至S103、图2所示的步骤S201至S202。或者,所述处理器50执行所述计算机程序52时实现上述消息分组投递的装置实施例中各模块/单元的功能,例如图4所示模块41至45的功能。
示例性的,所述计算机程序52可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器51中,并由所述处理器50执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序52在所述终端5中的执行过程。例如,所述计算机程序52可以被分割成查询模块、设置模块、发送模块,各模块具体功能如下:
查询模块,用于在使用java消息服务进行通信时,获取待发送消息的队列名称,根据所述队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,获取查询结果,以确定所述发送方终端所在分组内是否存在所述待发送消息的消费方终端;
设置模块,用于根据所述查询结果设置所述待发送消息的message selector属性信息;
发送模块,用于将所述待发送消息发送至消息中间件,以使得所述消息中间件接收所述待发送消息后,根据所述message selector属性信息对所述待发送消息进行组内投递或者组间投递;
其中,所述分组包括一个或多个队列名称;在所述队列名称与终端之间的对应关系中,每一个队列名称对应一个或多个终端及其物理地址,所述终端为能够处理所述队列名称的点对点消息的终端。
进一步地,所述查询结果包括所述发送方终端所在分组内存在所述待发送消息的消费方终端,或者所述发送方终端所在分组内不存在所述待发送消息的消费方终端;相应地,所述设置模块还可以分割成第一设置单元、第二设置单元。
第一设置单元,用于若发送方终端所在分组内存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为所述发送方终端所在分组的分组标识,以使得所述消息中间件将所述待发送消息投递至所述发送方终端所在分组内的消费方终端;
第二设置单元,用于若发送方终端所在分组内不存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为默认标识,以使得所述消息中间件将所述待发送消息投递至默认分组内的消费方终端。
所述终端5可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端可包括,但不仅限于,处理器50、存储器51。本领域技术人员可以理解,图5仅仅是终端5的示例,并不构成对终端5的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端还可以包括输入输出设备、网络接入设备、总线等。
所称处理器50可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述终端的控制中心,利用各种接口和线路连接整个终端的各个部分。
所述存储器51可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述终端的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘、智能存储卡(Smart MediaCard,SMC)、安全数字卡(Secure Digital,SD)、闪存卡(Flash Card),至少一个磁盘存储器件、闪存器件或其他易失性固态存储器件。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的实施例中,应该理解到,所揭露的装置/终端和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读存储介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读存储介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读存储介质不包括是电载波信号和电信信号。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (8)
1.一种消息分组投递的方法,其特征在于,所述方法包括:
在使用java消息服务进行通信时,获取待发送消息的队列名称,根据所述队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,获取查询结果,以确定所述发送方终端所在分组内是否存在所述待发送消息的消费方终端;
根据所述查询结果设置所述待发送消息的message selector属性信息;
将所述待发送消息发送至消息中间件,以使得所述消息中间件接收所述待发送消息后,根据所述message selector属性信息对所述待发送消息进行组内投递或者组间投递;
其中,所述分组包括一个或多个队列名称;在所述队列名称与终端之间的对应关系中,每一个队列名称对应一个或多个终端及其物理地址,所述终端为能够处理所述队列名称的点对点消息的终端;
所述查询结果包括所述发送方终端所在分组内存在所述待发送消息的消费方终端,或者所述发送方终端所在分组内不存在所述待发送消息的消费方终端;
所述根据所述查询结果设置所述待发送消息的message selector属性信息包括:
若发送方终端所在分组内存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为所述发送方终端所在分组的分组标识,以使得所述消息中间件将所述待发送消息投递至所述发送方终端所在分组内的消费方终端;
若发送方终端所在分组内不存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为默认标识,以使得所述消息中间件将所述待发送消息投递至默认分组内的消费方终端。
2.如权利要求1所述的消息分组投递的方法,其特征在于,所述方法还包括:
从管理员服务器中获取所述发送方终端所在分组的队列名称与终端之间的对应关系。
3.如权利要求2所述的消息分组投递的方法,其特征在于,在从管理员服务器中获取所述发送方终端所在分组的队列名称与终端之间的对应关系之后,所述方法还包括:
接收管理员服务器发送的更新消息,并根据所述更新消息更新所述队列名称与终端之间的对应关系;
其中,所述更新消息是由所述管理员服务器在监测到消费方终端上下线或者有新的消费方终端注册时所发送的。
4.一种消息分组投递的装置,其特征在于,所述装置包括:
查询模块,用于在使用java消息服务进行通信时,获取待发送消息的队列名称,根据所述队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,获取查询结果,以确定所述发送方终端所在分组内是否存在所述待发送消息的消费方终端;
设置模块,用于根据所述查询结果设置所述待发送消息的message selector属性信息;
发送模块,用于将所述待发送消息发送至消息中间件,以使得所述消息中间件接收所述待发送消息后,根据所述message selector属性信息对所述待发送消息进行组内投递或者组间投递;
其中,所述分组包括一个或多个队列名称;在所述队列名称与终端之间的对应关系中,每一个队列名称对应一个或多个终端及其物理地址,所述终端为能够处理所述队列名称的点对点消息的终端;
所述查询结果包括所述发送方终端所在分组内存在所述待发送消息的消费方终端,或者所述发送方终端所在分组内不存在所述待发送消息的消费方终端;
所述设置模块包括:
第一设置单元,用于若发送方终端所在分组内存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为所述发送方终端所在分组的分组标识,以使得所述消息中间件将所述待发送消息投递至所述发送方终端所在分组内的消费方终端;
第二设置单元,用于若发送方终端所在分组内不存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为默认标识,以使得所述消息中间件将所述待发送消息投递至默认分组内的消费方终端。
5.如权利要求4所述的消息分组投递的装置,其特征在于,所述装置还包括:
获取模块,用于从管理员服务器中获取所述发送方终端所在分组的队列名称与终端之间的对应关系。
6.如权利要求5所述的消息分组投递的装置,其特征在于,所述装置还包括:
更新模块,用于接收管理员服务器发送的更新消息,并根据所述更新消息更新所述队列名称与终端之间的对应关系;
其中,所述更新消息是由所述管理员服务器在监测到消费方终端上下线或者有新的消费方终端注册时所发送的。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序由处理器执行时实现权利要求1至3任一项所述的消息分组投递的方法所述的步骤。
8.一种终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
在使用java消息服务进行通信时,获取待发送消息的队列名称,根据所述队列名称查询发送方终端所在分组内的队列名称与终端之间的对应关系,获取查询结果,以确定所述发送方终端所在分组内是否存在所述待发送消息的消费方终端;
根据所述查询结果设置所述待发送消息的message selector属性信息;
将所述待发送消息发送至消息中间件,以使得所述消息中间件接收所述待发送消息后,根据所述message selector属性信息对所述待发送消息进行组内投递或者组间投递;
其中,所述分组包括一个或多个队列名称;在所述队列名称与终端之间的对应关系中,每一个队列名称对应一个或多个终端及其物理地址,所述终端为能够处理所述队列名称的点对点消息的终端;
所述查询结果包括所述发送方终端所在分组内存在所述待发送消息的消费方终端,或者所述发送方终端所在分组内不存在所述待发送消息的消费方终端;
所述根据所述查询结果设置所述待发送消息的message selector属性信息包括:
若发送方终端所在分组内存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为所述发送方终端所在分组的分组标识,以使得所述消息中间件将所述待发送消息投递至所述发送方终端所在分组内的消费方终端;
若发送方终端所在分组内不存在所述待发送消息的消费方终端时,将所述待发送消息的message selector属性信息设置为默认标识,以使得所述消息中间件将所述待发送消息投递至默认分组内的消费方终端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710676550.9A CN107835203B (zh) | 2017-08-09 | 2017-08-09 | 消息分组投递的方法、装置、存储介质及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710676550.9A CN107835203B (zh) | 2017-08-09 | 2017-08-09 | 消息分组投递的方法、装置、存储介质及终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107835203A CN107835203A (zh) | 2018-03-23 |
CN107835203B true CN107835203B (zh) | 2020-07-10 |
Family
ID=61643067
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710676550.9A Active CN107835203B (zh) | 2017-08-09 | 2017-08-09 | 消息分组投递的方法、装置、存储介质及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107835203B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109408249A (zh) * | 2018-09-17 | 2019-03-01 | 中国建设银行股份有限公司 | 数据同步传输方法、系统、装置和存储介质 |
CN111679918A (zh) * | 2019-03-11 | 2020-09-18 | 华为技术有限公司 | 一种消息传输方法及装置 |
CN112714026A (zh) * | 2021-01-21 | 2021-04-27 | 广州朗国电子科技有限公司 | 一种mqtt协议消费者的集群方法、装置及储存介质 |
CN113032492A (zh) * | 2021-04-21 | 2021-06-25 | 新奥数能科技有限公司 | 一种边缘端数据传输与存储的方法以及装置 |
CN116520996A (zh) * | 2023-07-03 | 2023-08-01 | 南京维赛客网络科技有限公司 | 一种在同一频道场景下的组团游览方法、系统及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101277212A (zh) * | 2007-03-30 | 2008-10-01 | 上海众恒信息产业有限公司 | 资源管理平台及资源管理方法 |
CN101668031A (zh) * | 2008-09-02 | 2010-03-10 | 阿里巴巴集团控股有限公司 | 一种消息处理方法及系统 |
WO2014055145A1 (en) * | 2012-10-02 | 2014-04-10 | Oracle International Corporation | Hardware message queues for intra-cluster communication |
CN104980450A (zh) * | 2014-04-01 | 2015-10-14 | 阿里巴巴集团控股有限公司 | 一种消息传递方法和系统及消息中间件 |
CN105306552A (zh) * | 2015-09-30 | 2016-02-03 | 中国科学院计算技术研究所 | 一种基于消息队列的消费均衡方法及系统 |
CN105323205A (zh) * | 2014-05-30 | 2016-02-10 | 中兴通讯股份有限公司 | 消息推送处理方法、装置、推送服务器及应用服务器 |
CN105791082A (zh) * | 2014-12-23 | 2016-07-20 | 阿里巴巴集团控股有限公司 | 计算机集群间基于消息中间件的消息传输方法及其装置 |
CN106201735A (zh) * | 2016-06-27 | 2016-12-07 | 北京票之家科技有限公司 | 消息传输方法及系统 |
CN106790696A (zh) * | 2017-02-21 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 一种消息传输方法和装置 |
-
2017
- 2017-08-09 CN CN201710676550.9A patent/CN107835203B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101277212A (zh) * | 2007-03-30 | 2008-10-01 | 上海众恒信息产业有限公司 | 资源管理平台及资源管理方法 |
CN101668031A (zh) * | 2008-09-02 | 2010-03-10 | 阿里巴巴集团控股有限公司 | 一种消息处理方法及系统 |
WO2014055145A1 (en) * | 2012-10-02 | 2014-04-10 | Oracle International Corporation | Hardware message queues for intra-cluster communication |
CN104980450A (zh) * | 2014-04-01 | 2015-10-14 | 阿里巴巴集团控股有限公司 | 一种消息传递方法和系统及消息中间件 |
CN105323205A (zh) * | 2014-05-30 | 2016-02-10 | 中兴通讯股份有限公司 | 消息推送处理方法、装置、推送服务器及应用服务器 |
CN105791082A (zh) * | 2014-12-23 | 2016-07-20 | 阿里巴巴集团控股有限公司 | 计算机集群间基于消息中间件的消息传输方法及其装置 |
CN105306552A (zh) * | 2015-09-30 | 2016-02-03 | 中国科学院计算技术研究所 | 一种基于消息队列的消费均衡方法及系统 |
CN106201735A (zh) * | 2016-06-27 | 2016-12-07 | 北京票之家科技有限公司 | 消息传输方法及系统 |
CN106790696A (zh) * | 2017-02-21 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 一种消息传输方法和装置 |
Non-Patent Citations (1)
Title |
---|
"基于Netty的高可服务消息中间件的研究与实现";崔晓旻;《中国硕士学位论文全文数据库信息科技辑》;20140301;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN107835203A (zh) | 2018-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107835203B (zh) | 消息分组投递的方法、装置、存储介质及终端 | |
US11805441B2 (en) | Method and system for group communication, group server, and group member device | |
US11240159B2 (en) | Service link selection control method and device | |
CN108566290B (zh) | 服务配置管理方法、系统、存储介质和服务器 | |
WO2021008414A1 (zh) | 一种物联网设备的告警方法及相关装置 | |
CN105824706B (zh) | 一种配置加速器的方法和装置 | |
CN110311983B (zh) | 服务请求的处理方法、装置、系统、电子设备及存储介质 | |
WO2021008413A1 (zh) | 一种物联网设备的故障提示方法及相关装置 | |
CN111163130B (zh) | 一种网络服务系统及其数据传输方法 | |
US10454795B1 (en) | Intermediate batch service for serverless computing environment metrics | |
CN109889451B (zh) | 网络限速的系统及其方法和服务器 | |
CN110912814A (zh) | 一种接口数据的分发方法及装置 | |
CN111880948A (zh) | 数据刷新方法、装置、电子设备及计算机可读存储介质 | |
CN111581502A (zh) | 一种信息通知方法及装置 | |
CN111491015B (zh) | 预热任务处理方法及系统、代理服务器、服务中心 | |
CN113076380B (zh) | 数据同步方法、装置、系统、设备及存储介质 | |
CN115951923A (zh) | 订阅事件管理方法及相关产品 | |
CN115562757A (zh) | 数据处理方法、配置中心系统、电子设备及存储介质 | |
CN109451016B (zh) | 数据下载管理方法、系统及相关设备 | |
CN113609349A (zh) | 租赁车辆库存检测方法、装置及介质 | |
US20160188748A1 (en) | Method for providing information to determine a graph associated with a data item | |
CN113743879A (zh) | 一种自动化规则处理方法、系统以及相关设备 | |
CN109962962B (zh) | 一种套接字socket连接的方法及设备 | |
CN110995890A (zh) | 域名请求的调度方法及装置 | |
US20230153159A1 (en) | Hardware Accelerator Service Aggregation |
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 |