CN116089125A - 分布式消息队列系统、消息发布方法及消息接收方法 - Google Patents
分布式消息队列系统、消息发布方法及消息接收方法 Download PDFInfo
- Publication number
- CN116089125A CN116089125A CN202310149692.5A CN202310149692A CN116089125A CN 116089125 A CN116089125 A CN 116089125A CN 202310149692 A CN202310149692 A CN 202310149692A CN 116089125 A CN116089125 A CN 116089125A
- Authority
- CN
- China
- Prior art keywords
- message
- client
- topic
- identifier
- theme
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开了一种分布式消息队列系统、消息发布方法及消息接收方法,属于计算机技术领域。该系统中,服务端向第一客户端发送第一标识,第一标识用于标识第一客户端所在的计算机设备;向第二客户端发送第一标识;第一客户端,将第一标识与第一消息主题合并,得到第二消息主题;向服务端发送第二消息,第二消息携带有第二消息主题;第二客户端,将第一标识与第一消息主题合并,得到第二消息主题;第二客户端,通过服务端订阅第二消息主题;服务端,向订阅第二消息主题的客户端发送第二消息。由于第二消息主题是新定义的消息主题,因此可实现动态添加消息主题,并且在添加消息主题的过程中,无需修改代码,简化了添加消息主题的过程。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种分布式消息队列系统、消息发布方法及消息接收方法。
背景技术
在分布式消息队列(也称Nats)系统中,计算机设备的进程之间通过订阅或发布消息主题下的消息,来实现发送或接收所需的消息。
上述每个计算机设备的进程与分布式消息队列系统中的一个客户端对应,消息发布方(发布消息的客户端)所发布的消息主题以及消息接收方(接收消息的客户端)订阅的消息主题会预先定义在客户端中。消息发布方会向服务端发送其发布的消息主题下的消息,消息接收方会通过服务端接收其订阅的消息主题下的消息,以此实现了不同进程之间消息的收发。
上述方案中,在客户端需要发布新的消息主题下的消息或订阅新的消息主题下的消息的情况下,由于消息主题需要预先定义在代码中,因此需要修改相关代码,实现过程较为复杂。
发明内容
本申请提供了一种分布式消息队列系统、消息发布方法及消息接收方法,可以简化添加消息主题的过程。所述技术方案如下:
根据本申请的一方面,提供了一种分布式消息队列系统,所述系统包括:服务端、第一客户端和第二客户端;
所述服务端,用于向所述第一客户端发送第一标识,所述第一标识用于标识所述第一客户端所在的计算机设备;所述服务端,还用于向所述第二客户端发送所述第一标识;
所述第一客户端,用于将所述第一标识与第一消息主题合并,得到第二消息主题,所述第一消息主题是所述第一客户端已发布的第一消息的消息主题,所述第二消息主题是所述第一客户端待发布的消息主题;所述第一客户端,还用于向所述服务端发送第二消息,所述第二消息携带有所述第二消息主题;
所述第二客户端,用于将所述第一标识与所述第一消息主题合并,得到所述第二消息主题,所述第一消息主题是所述第二客户端已订阅的所述第一消息的消息主题,所述第二消息主题是所述第二客户端待订阅的消息主题;所述第二客户端,还用于通过所述服务端订阅所述第二消息主题;
所述服务端,还用于向订阅所述第二消息主题的客户端发送所述第二消息。
根据本申请的另一方面,提供了一种应用于分布式消息队列系统的消息发布方法,所述方法应用于第一客户端,所述方法包括:
通过服务端获取所述第一客户端的第一标识,所述第一标识用于标识所述第一客户端所在的计算机设备;
将所述第一标识与第一消息主题合并,得到第二消息主题;
通过所述服务端发布所述第二消息主题下的消息。
根据本申请的另一方面,提供了一种应用于分布式消息队列系统的消息接收方法,所述方法应用于第二客户端,所述方法包括:
通过服务端获取第一客户端的第一标识,所述第一标识用于标识所述第一客户端所在的计算机设备;
将所述第一标识与第一消息主题合并,得到第二消息主题;
通过所述服务端接收所述第二消息主题下的消息。
根据本申请的另一方面,提供了一种应用于分布式消息队列系统的消息收发方法,所述方法应用于服务端,所述方法包括:
向第一客户端发送第一标识,所述第一标识用于标识所述第一客户端所在的计算机设备;
向第二客户端发送所述第一标识;
接收所述第一客户端发布的第二消息主题下的消息;
向所述第二客户端发送所述第二消息主题下的消息;
其中,所述第一客户端和所述第二客户端用于将所述第一标识与第一消息主题合并,得到所述第二消息主题。
根据本申请的另一方面,提供了一种应用于分布式消息队列系统的消息发布装置,所述装置包括:
收发模块,用于通过服务端获取所述装置的第一标识,所述第一标识用于标识所述装置所在的计算机设备;
处理模块,用于将所述第一标识与第一消息主题合并,得到第二消息主题;
所述收发模块,用于通过所述服务端发布所述第二消息主题下的消息。
在一个可选的设计中,所述装置还包括:
获取模块,用于获取所述装置所在的计算机设备的第二标识;
所述收发模块,用于向所述服务端发送第一请求,所述第一请求中携带有所述第二标识;
所述收发模块,用于接收所述服务端发送的所述第一标识,所述第一标识是所述服务端根据所述第二标识生成的。
在一个可选的设计中,所述第二标识包括如下至少一种:
媒体访问控制(Media Access Control,MAC)地址;
网际互连协议(Internet Protocol,IP)地址;
处理器设备号。
在一个可选的设计中,所述收发模块,用于:
接收所述服务端发送的所述第一标识,所述第一标识是所述服务端根据接收所述第一请求的时间戳生成的。
在一个可选的设计中,所述处理模块,用于:
将所述第一标识添加至所述第一消息主题的末尾,得到所述第二消息主题。
根据本申请的另一方面,提供了一种应用于分布式消息队列系统的消息接收装置,所述装置包括:
收发模块,用于通过服务端获取第一客户端的第一标识,所述第一标识用于标识所述第一客户端所在的计算机设备;
处理模块,用于将所述第一标识与第一消息主题合并,得到第二消息主题;
所述收发模块,用于通过所述服务端接收所述第二消息主题下的消息。
在一个可选的设计中,所述收发模块,用于:
向所述服务端发送第二请求;
接收所述服务端发送的所述第一标识,所述第一标识是所述服务端根据第二标识生成的,所述第二标识是所述第一客户端获取的所述第一客户端所在的计算机设备的标识。
在一个可选的设计中,所述处理模块,用于:
将所述第一标识添加至所述第一消息主题的末尾,得到所述第二消息主题。
根据本申请的另一方面,提供了一种应用于分布式消息队列系统的消息收发装置,所述装置包括:
收发模块,用于向第一客户端发送第一标识,所述第一标识用于标识所述第一客户端所在的计算机设备;
所述收发模块,用于向第二客户端发送所述第一标识;
所述收发模块,用于接收所述第一客户端发布的第二消息主题下的消息;
所述收发模块,用于向所述第二客户端发送所述第二消息主题下的消息;
其中,所述第一客户端和所述第二客户端用于将所述第一标识与第一消息主题合并,得到所述第二消息主题。
在一个可选的设计中,所述装置还包括:
所述收发模块,用于接收所述第一客户端发送的第一请求,所述第一请求中携带有第二标识,所述第二标识是所述第一客户端获取的所述第一客户端所在的计算机设备的标识;
生成模块,用于根据所述第二标识生成所述第一标识;
所述收发模块,用于向所述第一客户端发送所述第一标识。
在一个可选的设计中,所述生成模块,用于:
根据接收所述第一请求的时间戳生成所述第一标识。
在一个可选的设计中,所述第二标识包括所述第一客户端所在的计算机设备的MAC地址和/或IP地址;所述装置还包括:
确定模块,用于在所述第二消息主题下的消息出现发布异常的情况下,根据所述MAC地址和/或所述IP地址确定出现异常的所述第一客户端所在的计算机设备。
根据本申请的另一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上方面所述的应用于分布式消息队列系统的消息发布方法、应用于分布式消息队列系统的消息接收方法或应用于分布式消息队列系统的消息收发方法。
根据本申请的另一方面,提供了一种计算机可读存储介质,所述可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上方面所述的应用于分布式消息队列系统的消息发布方法、应用于分布式消息队列系统的消息接收方法或应用于分布式消息队列系统的消息收发方法。
根据本申请的另一方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方面的各种可选实现方式中提供的应用于分布式消息队列系统的消息发布方法、应用于分布式消息队列系统的消息接收方法或应用于分布式消息队列系统的消息收发方法。
本申请提供的技术方案带来的有益效果至少包括:
通过在第一消息主题中加入消息发布方的标识,从而得到新生成的第二消息主题,消息发布方通过第二消息主题即可发布第二消息主题下的消息。由于第二消息主题是新定义的消息主题,因此可实现动态添加消息主题,并且在添加消息主题的过程中,无需修改代码,简化了添加消息主题的过程。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个示例性实施例提供的相关技术中通过分布式消息队列实现消息收发的示意图;
图2是本申请一个示例性实施例提供的计算机系统的结构示意图;
图3是本申请一个示例性实施例提供的收发消息的过程的示意图;
图4是本申请一个示例性实施例提供的分布式消息队列系统的结构框图;
图5是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息发布方法的流程示意图;
图6是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息发布方法的流程示意图;
图7是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息收发方法的流程示意图;
图8是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息收发方法的流程示意图;
图9是本申请一个示例性实施例提供的服务端发送第一标识的过程的示意图;
图10是本申请一个示例性实施例提供的发布和订阅消息主题的过程的示意图;
图11是本申请一个示例性实施例提供的接收消息的过程的示意图;
图12是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息发布装置的结构示意图;
图13是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息发布装置的结构示意图;
图14是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息接收装置的结构示意图;
图15是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息收发装置的结构示意图;
图16是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息收发装置的结构示意图;
图17是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息收发装置的结构示意图;
图18是本申请一个示例性实施例提供的计算机设备的结构示意图。
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先,对本申请实施例涉及的相关名词进行介绍:
分布式消息队列(也称Nats):进程间通过订阅事件和发布事件,驱动分布式消息队列提供的模型来收发数据。进程只需要订阅自己感兴趣的消息主题(subject),无需知道对方程序。并且分布式消息队列自带负载均衡,无需服务注册发现。在具体的应用场景下,分布式消息队列系统是通过消息发布客户端发布消息主题下的消息以及消息接收客户端订阅消息主题下的消息,以在消息发布客户端和消息接收客户端之间传递消息主题下的消息的系统。
服务端(Nats Server):消息队列中间件,用来注册、转发消息。可单机或集群部署,可水平扩容。
客户端(Nats Client):用于订阅/发布消息。
在多程序协同合作场景下,经常需要服务(进程)间进行通信,常用技术有Kafka(一种开源流处理平台,具体是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据)等。上述服务均具有自己需要执行的事务以及接收消息后另起线程所处理的事务。
相关技术中,通常采用分布式消息队列(也称Nats)系统,通过计算机设备的进程之间订阅或发布消息主题下的消息,来实现发送或接收所需的消息。示例地,图1是本申请一个示例性实施例提供的相关技术中通过分布式消息队列实现消息收发的示意图。如图1所示,上述每个计算机设备的进程与分布式消息队列系统中的一个客户端对应,消息发布方101(发布消息的客户端)所发布的消息主题以及消息接收方102(接收消息的客户端)订阅的消息主题会预先定义在客户端中。消息发布方会向服务端103发送其发布的消息主题下的消息,消息接收方会通过服务端103接收其订阅的消息主题下的消息,以此实现了不同进程之间消息的收发。
相关技术中,分布式消息队列系统的订阅和发布模式会将订阅的消息主题进行分离,即针对需要传输的不同消息可设置其对应的消息主题。在客户端需要发布新的消息主题下的消息或订阅新的消息主题下的消息的情况下,例如需要进程实现多消息主题同时交互时,只能通过添加消息主题或在消息主题后再新增子主题的方式实现。但由于消息主题需要预先定义在代码中,因此需要修改相关代码,实现过程较为复杂,无法实现动态添加消息主题并在订阅的消息主题之间进行通信。
本申请实施例提供的方法中,通过分布式云调度模式可将子主题作为订阅中的最小单位,且子主题是根据已有消息主题和客户端所在计算机设备的标识动态生成的,因此可实现动态添加子主题。本申请在添加子主题的过程中,无需修改代码,简化了添加子主题的过程。并且,由于子主题在声明时可以基于消息发布方的网际互连协议(InternetProtocol,IP)地址和/或媒体访问控制(Media Access Control,MAC)地址进行唯一标识,因此还提高了安全性及后续追踪能力。
图2是本申请一个示例性实施例提供的计算机系统的结构示意图。如图2所示,该计算机系统200中包括服务器201、第一计算机设备202以及第二计算机设备203。
服务器201可以是一台服务器,或者由若干台服务器组成的服务器集群,或者是一个云计算服务中心中的虚拟服务器等。服务器201中部署有分布式消息队列系统中的服务端,服务端用于接收分布式消息队列系统中的消息发布方所发送的其管理的消息主题下的消息,以及用于向分布式消息队列系统中的消息接收方发送其订阅的消息主题下的消息。
服务器201和第一计算机设备202以及第二计算机设备203之间分别可以通过有线网络或无线网络建立连接。第一计算机设备202中部署有分布式消息队列系统中的第一客户端,该第一客户端为消息发布方,第一客户端用于通过服务端发布其管理的消息主题下的消息。第二计算机设备203中部署有分布式消息队列系统中的第二客户端,该第二客户端为消息接收方,第二客户端用于通过服务端接收其订阅的消息主题下的消息。其中,第一客户端所发布的消息主题下的消息包括第二客户端所订阅的消息主题下的消息。
需要说明的是,上述服务器201、第一计算机设备202以及第二计算机设备203的数量仅用作示意,不作为对本申请实施例提供的计算机系统的限制。例如在分布式消息队列系统中,还能够存在更多的消息发布方和消息接收方。
另外,上述第一客户端和第二客户端除了部署在不同的计算机设备中,也能够部署在同一个计算机设备中。也即是第一计算机设备202和第二计算机设备203可以是相同的计算机设备也可以是不同的计算机设备,图2主要以第一计算机设备202和第二计算机设备203为不同计算机设备进行举例说明。
另外,上述划分第一客户端和第二客户端作为消息发布方或消息接收方的方式,主要是根据两者针对同一消息主题是提供消息发布功能还是消息接收功能所确定的。可以理解的是,第一客户端和第二客户端还能够即作为消息发布方也作为消息接收方,即第一客户端和第二客户端能够同时支持发布消息的功能和订阅消息的功能。
图3是本申请一个示例性实施例提供的收发消息的过程的示意图。如图3所示,分布式消息队列系统中的第一客户端301(消息发布方)通过向服务端303发送第一请求,从而能够获取服务端303发送的第一标识,该第一标识用于标识第一客户端301所在的计算机设备。其中,第一请求携带有第一客户端301所在计算机设备的第二标识,该第一标识是服务端303根据第二标识生成的。之后,分布式消息队列系统中的第二客户端302(消息接收方)能够向服务端303发送第二请求,以获取上述第一标识。
第一客户端301和第二客户端302在获取到第一标识后,会将第一标识与已存在的第一消息主题(例如在第一消息主题尾部添加第一标识)合并,从而得到第二消息主题。得到第二消息主题后,第一客户端301能够通过服务端303发布第二消息主题下的消息,第二客户端302能够通过服务端303接收第二消息主题下的消息。
通过在第一消息主题中加入消息发布方的标识,从而得到新生成的第二消息主题,消息发布方通过第二消息主题即可发布第二消息主题下的消息,消息接收方通过第二消息主题即可接收第二消息主题下的消息。由于第二消息主题是新定义的消息主题,因此可实现动态添加消息主题,并且在添加消息主题的过程中,无需修改代码,简化了添加消息主题的过程。
图4是本申请一个示例性实施例提供的分布式消息队列系统的结构框图。该分布式消息队列系统400包括服务端401、第一客户端402和第二客户端403;
服务端401,用于向第一客户端402发送第一标识,第一标识用于标识第一客户端402所在的计算机设备;服务端401,还用于向第二客户端403发送第一标识;
第一客户端402,用于将第一标识与第一消息主题合并,得到第二消息主题,第一消息主题是第一客户端402已发布的第一消息的消息主题,第二消息主题是第一客户端402待发布的消息主题;第一客户端402,还用于向服务端401发送第二消息,第二消息携带有第二消息主题;
第二客户端403,用于将第一标识与第一消息主题合并,得到第二消息主题,第一消息主题是第二客户端403已订阅的第一消息的消息主题,第二消息主题是第二客户端403待订阅的消息主题;第二客户端403,还用于通过服务端401订阅第二消息主题;
服务端401,还用于向订阅第二消息主题的客户端发送第二消息。
一些实施例中,第一客户端402,还用于获取第一客户端402所在的计算机设备的第二标识;第一客户端402,还用于向服务端401发送第一请求,第一请求中携带有第二标识;
服务端401,还用于根据第二标识生成第一标识;
其中,第二标识包括如下至少一种:
·MAC地址;
·IP地址;
·处理器设备号。
一些实施例中,服务端401,还用于根据接收第一请求的时间戳生成第一标识。
一些实施例中,第一客户端402,还用于将第二消息的内容输入分类模型,得到第二消息的分类;第一客户端402,还用于将第二消息的分类与第一客户端402所在的计算机设备的第二标识合并,得到第一标识;
其中,分类模型是根据样本消息的内容和样本消息的样本分类训练得到的。
一些实施例中,第二客户端403,还用于向服务端401发送第二请求,第二请求用于请求服务端401向第二客户端403发送第一标识。
一些实施例中,第二标识包括第一客户端402所在的计算机设备的MAC地址和/或IP地址;
服务端401,还用于在第二消息主题下的消息出现发布异常的情况下,根据MAC地址和/或IP地址确定出现异常的第一客户端402所在的计算机设备。
一些实施例中,第一消息主题是分布式消息队列系统400中的第一父主题或第一子主题;
在第一消息主题是第一父主题的情况下,第二消息主题是第一父主题的第二子主题;
在第一消息主题是第一子主题的情况下,第二消息主题是第二子主题对应的第二父主题的第三子主题。
综上所述,本实施例提供的系统,通过在第一消息主题中加入消息发布方的标识,从而得到新生成的第二消息主题,消息发布方通过第二消息主题即可发布第二消息主题下的消息。由于第二消息主题是新定义的消息主题,因此可实现动态添加消息主题,并且在添加消息主题的过程中,无需修改代码,简化了添加消息主题的过程。
图5是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息发布方法的流程示意图。该方法可以用于分布式消息队列系统中的第一客户端。如图5所示,该方法包括:
步骤502:通过服务端获取第一客户端的第一标识。
第一客户端与分布式消息队列系统中的服务端建立有通信连接,第一客户端为消息发布方,即第一客户端具有发布某一消息主题下的消息的功能。示例性的,分布式消息队列系统中的消息是程序运行所产生的消息。第一客户端可实现成为前端,例如全球广域网(World Wide Web,WEB)端。
上述第一标识用于标识第一客户端所在的计算机设备,例如第一标识用于在分布式消息队列系统中唯一标识第一客户端所在的计算机设备。
可选地,第一标识是服务端根据第一客户端所在计算机设备的第二标识生成的,或者是根据时间戳生成的。可选地,第一客户端在获取第一标识的过程中,会获取其所在计算机设备的第二标识,并向服务端发送携带该第二标识的第一请求,从而使得服务端根据第一请求中的第二标识生成第一标识并发送至第一客户端。可选地,服务端也能够根据接收该第一请求的时间戳来生成第一标识。
步骤504:将第一标识与第一消息主题合并,得到第二消息主题。
第一消息主题是在第一客户端中已定义的消息主题,即第一客户端是已支持发布第一消息主题下的消息的客户端,第二消息主题是基于第一标识新定义的消息主题。
在分布式消息队列系统中,消息主题可分为父主题(父消息主题)和子主题(子消息主题)。其中,父主题不存在上一级消息主题,子主题存在上一级消息主题,即子主题的父主题。通过子主题可对父主题下的消息进行划分。例如,父主题为天气信息,父主题下的各子主题为各个省份的天气信息。客户端能够订阅全部省份的天气信息(即订阅父主题),也能够订阅部分省份的天气信息(即订阅子主题)。
示例地,父主题下存在消息1、消息2和消息3,该父主题的子主题1下存在消息1和消息2,该父主题的子主题2下存在消息3。
可选地,第一消息主题是分布式消息队列系统中的第一父主题或第一子主题。在第一消息主题是第一父主题的情况下,第二消息主题是第一父主题的第二子主题。在第一消息主题是第一子主题的情况下,第二消息主题是第二子主题对应的第二父主题的第三子主题。
示例地,第一消息主题为上述父主题或子主题,在第一消息主题为父主题的情况下,第二消息主题为新生成的第一消息主题的子主题。在第一消息主题为子主题的情况下,第二消息主题为新生成的第一消息主题的父主题的子主题。例如,第一消息主题为上述包括消息1、消息2和消息3的父主题,则第二消息主题为该父主题的下新定义的子主题(例如不同于子主题1和子主题2的子主题3),该情况下第二消息主题可包括消息1、消息2和消息3中的一个或多个,或者第二消息主题也能够包括该父主题下新定义的消息。例如,第一消息主题为上述包括消息3的子主题2,则第二消息主题为该子主题2的父主题下新定义的子主题,该情况下第二消息主题可包括消息1、消息2和消息3中的一个或多个,或者第二消息主题也能够包括该父主题下新定义的消息。
可选地,第一客户端在将第一标识与第一消息主题合并时,第一客户端会在第一消息主题的头部、中部或末尾添加第一标识从而得到第二消息主题。例如第二消息主题为“第一消息主题.第一标识”。
步骤506:通过服务端发布第二消息主题下的消息。
第一客户端在确定第二消息主题后,即可发布第二消息主题下的消息。第一客户端会向服务端发送第二消息主题下的消息,之后服务端会将第二消息主题下的消息发送至订阅了第二消息主题的消息接收方,从而实现了不同进程间消息的收发。
第二消息主题下的消息与第二消息主题的对应关系,是通人工配置建立的。可选地,上述第一客户端通过服务端获取第一标识从而确定第二消息主题,进而发布第二消息主题下的消息的过程,是通过指令以及预定义的代码使得第一客户端执行的。该指令和预定义的代码是人工设置的,该预定义的代码包括用于定义上述生成新的子主题的规则的内容。
综上所述,本实施例提供的方法,通过在第一消息主题中加入消息发布方的标识,从而得到新生成的第二消息主题,消息发布方通过第二消息主题即可发布第二消息主题下的消息。由于第二消息主题是新定义的消息主题,因此可实现动态添加消息主题,并且在添加消息主题的过程中,无需修改代码,简化了添加消息主题的过程。
图6是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息接收方法的流程示意图。该方法可以用于分布式消息队列系统中的第二客户端。如图6所示,该方法包括:
步骤602:通过服务端获取第一客户端的第一标识。
第二客户端与分布式消息队列系统中的服务端建立有通信连接,第二客户端为消息接收方,即第二客户端具有订阅某一消息主题下的消息的功能。可选地,第二客户端包括一个或多个客户端。示例性的,分布式消息队列系统中的消息是程序运行所产生的消息。第二客户端可实现成为前端,例如WEB端。
第一标识用于标识第一客户端所在的计算机设备,例如第一标识用于在分布式消息队列系统中唯一标识第一客户端所在的计算机设备。
步骤604:将第一标识与第一消息主题合并,得到第二消息主题。
第一消息主题是在第二客户端中已定义的消息主题,即第二客户端是已支持订阅第一消息主题下的消息的客户端,第二消息主题是基于第一标识新定义的消息主题。
可选地,第一消息主题为父主题或子主题,在第一消息主题为父主题的情况下,第二消息主题为新生成的第一消息主题的子主题。在第一消息主题为子主题的情况下,第二消息主题为新生成的第一消息主题的父主题的子主题。
可选地,第二客户端在将第一标识与第一消息主题合并时,第二客户端会在第一消息主题的头部、中部或末尾添加第一标识从而得到第二消息主题。
步骤606:通过服务端接收第二消息主题下的消息。
上述第一客户端为第二消息主题的消息发布方,第一客户端也会根据第一标识和第一消息主题生成第二消息主题,在第一客户端确定第二消息主题后,会发布第二消息主题下的消息。第二客户端根据第一标识和第一消息主题生成第二消息主题的方式,与第一客户端相同。即第一客户端确定的第二消息主题与第二客户端确定的第二消息主题相同。
第一客户端会向服务端发送第二消息主题下的消息,之后服务端会将第二消息主题下的消息发送至订阅了第二消息主题的消息接收方,也即是第二客户端,从而实现了不同进程间消息的收发。
第二消息主题下的消息与第二消息主题的对应关系,是通人工配置建立的。可选地,上述第二客户端通过服务端获取第一标识从而确定第二消息主题,进而接收第二消息主题下的消息的过程,是通过指令以及预定义的代码使得第二客户端执行的。该指令和预定义的代码是人工设置的,该预定义的代码包括用于定义上述生成新的子主题的规则的内容。
综上所述,本实施例提供的方法,通过在第一消息主题中加入消息发布方的标识,从而得到新生成的第二消息主题,消息接收方通过第二消息主题即可接收第二消息主题下的消息。由于第二消息主题是新定义的消息主题,因此可实现动态添加消息主题,并且在添加消息主题的过程中,无需修改代码,简化了添加消息主题的过程。
图7是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息收发方法的流程示意图。该方法可以用于分布式消息队列系统中的服务端。如图7所示,该方法包括:
步骤702:向第一客户端发送第一标识。
服务端与分布式消息队列系统中的第一客户端和第二客户端建立有通信连接。第一客户端为消息发布方,即第一客户端具有发布某一消息主题下的消息的功能。第二客户端为消息接收方,即第二客户端具有订阅某一消息主题下的消息的功能。示例性的,分布式消息队列系统中的消息是程序运行所产生的消息。第一客户端和第二客户端可实现成为前端,例如WEB端。
第一标识用于标识第一客户端所在的计算机设备,例如第一标识用于在分布式消息队列系统中唯一标识第一客户端所在的计算机设备。
可选地,第一标识是服务端根据第一客户端所在计算机设备的第二标识生成的,或者是根据时间戳生成的。可选地,服务端在向第一客户端发送第一标识的过程中,第一客户端会获取其所在计算机设备的第二标识,并向服务端发送携带该第二标识的第一请求,从而使得服务端根据第一请求中的第二标识生成第一标识并发送至第一客户端。可选地,服务端也能够根据接收该第一请求的时间戳来生成第一标识。
第一客户端用于将第一标识与第一消息主题合并,得到第二消息主题。第一消息主题是在第一客户端中已定义的消息主题,即第一客户端是已支持发布第一消息主题下的消息的客户端,第二消息主题是基于第一标识新定义的消息主题。
步骤704:向第二客户端发送第一标识。
第二客户端用于将第一标识与第一消息主题合并,得到第二消息主题。第一消息主题是在第二客户端中已定义的消息主题,即第二客户端是已支持订阅第一消息主题下的消息的客户端,第二消息主题是基于第一标识新定义的消息主题。
步骤706:接收第一客户端发布的第二消息主题下的消息。
第一客户端在确定第二消息主题后,即可发布第二消息主题下的消息,第一客户端会向服务端发送第二消息主题下的消息。
步骤708:向第二客户端发送第二消息主题下的消息。
第二客户端根据第一标识和第一消息主题生成第二消息主题的方式,与第一客户端根据第一标识和第一消息主题生成第二消息主题的方式相同。即第一客户端确定的第二消息主题与第二客户端确定的第二消息主题相同。服务端会将第一客户端发布的第二消息主题下的消息发送至订阅了第二消息主题的消息接收方,也即是第二客户端,从而实现了不同进程间消息的收发。
第二消息主题下的消息与第二消息主题的对应关系,是通人工配置建立的。可选地,上述服务端生成第一标识以及发送第一标识的过程,是通过预定义的代码使得服务端执行的,该预定义的代码是人工设置的,该预定义的代码包括用于定义上述生成新的子主题的规则的内容。
综上所述,本实施例提供的方法,通过在第一消息主题中加入消息发布方的标识,从而得到新生成的第二消息主题,消息发布方通过第二消息主题即可发布第二消息主题下的消息,消息接收方通过第二消息主题即可接收第二消息主题下的消息。由于第二消息主题是新定义的消息主题,因此可实现动态添加消息主题,并且在添加消息主题的过程中,无需修改代码,简化了添加消息主题的过程。
图8是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息收发方法的流程示意图。该方法可以用于图2所示的系统。如图8所示,该方法包括:
步骤802:第一客户端向服务端发送第一请求。
服务端与分布式消息队列系统中的第一客户端和第二客户端建立有通信连接。第一客户端为消息发布方,即第一客户端具有发布某一消息主题下的消息的功能。第二客户端为消息接收方,即第二客户端具有订阅某一消息主题下的消息的功能。
在发送第一请求的过程中,第一客户端会获取第一客户端所在的计算机设备的第二标识,从而向服务端发送第一请求,该第一请求中携带有第二标识。可选地,第一服务端会将第二标识封装为JS(一种编程语言)对象简谱(Java Script Object Notation,JSON)数据,并通过请求(request)的方式发送至服务端。
可选地,上述第二标识包括如下至少一种:
·MAC地址;
·IP地址;
·处理器设备号。
其中,处理器设备号包括第一客户端所在计算机设备的中央处理器(CentralProcessing Unit,CPU)设备号和/或图形处理器(Graphics Processing Unit,GPU)设备号。
步骤804:服务端生成第一标识。
该第一标识用于标识第一客户端所在的计算机设备。服务端在接收到第一客户端发送的第一请求后,会根据第一请求中的第二标识生成第一标识。可选地,服务端也能够根据接收第一请求的时间戳来生成第一标识。可选地,服务端也能够根据接收第一请求的时间戳以及第二标识来生成第一标识。
可选地,服务端基于哈希算法生成上述第一标识。该哈希算法包括信息摘要算法4(Message Digest Algorithm 4,MD4)、信息摘要算法5(Message Digest Algorithm 5,MD5)和安全散列算法(Secure Hash Algorithm,SHA)等算法。需要说明的是,上述算法仅用作实例,服务端还能够通过其它算法来生成第一标识,本申请实施例对此不做限制。
示例地,服务端获取的第二标识为MAC地址“52:54:00:3b:ca:3f”,服务端通过MD5生成的第一标识为“0420fb09ef6f397586d5aaeac6205fa8”。服务端接收第一请求的时间戳为“2022-12-22 22:22:22”,服务端通过SHA224生成的第一标识为“6e9fa0ede868248f2fb38b9394651fa55c87409e5259856c4fd766f7”。服务端获取的第二标识为MAC地址“52:54:00:3b:ca:3f”和IP地址“192.168.1.1”,服务端通过SHA3-512生成的第一标识为“52a3bc14f44f202d713beb6049b357744f6e968746d13a9a2a94e3f0b8872bfbb130d93d5bdc3f4235e6ecf209b26c9a465d72d9952731a97fb8c7aae74767dc”。
可选地,服务端在接收到第一请求后,会查询存储的数据中是否包括第二标识。在存储的数据中包括第二标识的情况下,服务端会获取已生成的第二标识对应的第一标识。在存储的数据中不包括第二标识的情况下,服务端会根据第二标识生成第一标识。
步骤806:服务端向第一客户端发送第一标识。
服务端在根据第一请求生成第一客户端所在计算机设备的第一标识后,会将该第一标识发送至第一客户端,以使第一客户端根据第一标识生成新的消息主题。
示例地,图9是本申请一个示例性实施例提供的服务端发送第一标识的过程的示意图。如图9所示,第一客户端901向服务端902发送携带其所在计算机设备的标识的请求,服务端902在接收到该请求后,会根据请求中的数据生成标识并发送至第一客户端901。
可选地,第一客户端也能够不通过服务器获取第一标识,而自行生成第一标识。第一客户端将第二消息的内容输入分类模型,得到第二消息的分类。示例地,第二消息的内容包括第二消息对应的标题、第二消息对应的文本、第二消息对应的图片、第二消息对应的视频等信息中的至少一种。之后第一客户端会将第二消息的分类与第一客户端所在的计算机设备的第二标识合并,从而得到第一标识。该分类模型是根据样本消息的内容和样本消息的样本分类训练得到的。可选地,该分类模型是基于卷积神经网络(Convolutional NeuralNetworks,CNN)实现的。通过机器学习模型对待发布消息进行分类,结合客户端所在设备的标识,能够得到即唯一标识客户端还反映消息的类型的消息主题,根据生成的消息主题可便捷获知消息的种类,便于后续维护。
第一客户端在按照上述方式生成第一标识后,会将生成的第一标识发送至服务端,服务端可将该第一标识发送至分布式消息队列系统中需要订阅第二消息主题的其它客户端,例如第二客户端。可选地,上述生成第一标识的过程也能够由服务器执行,在此情况下,第一客户端会将第二消息的内容和第一客户端所在的计算机设备的第二标识发送至服务端,服务端按照上述方式通过本地的分类模型生成第一标识后,再向第一客户端和其它需要订阅第二消息主题的客户端反馈生成的第一标识。
步骤808:第一客户端将第一标识与第一消息主题合并,得到第二消息主题。
第一消息主题是在第一客户端中已定义的消息主题,即第一客户端是已支持发布第一消息主题下的消息的客户端,第二消息主题是基于第一标识新定义的消息主题。可选地,第一消息主题为上述父主题或子主题,在第一消息主题为父主题的情况下,第二消息主题为新生成的第一消息主题的子主题。在第一消息主题为子主题的情况下,第二消息主题为新生成的第一消息主题的父主题的子主题。
可选地,第一客户端在将第一标识与第一消息主题合并时,第一客户端会在第一消息主题的头部、中部或末尾添加第一标识从而得到第二消息主题。例如第二消息主题为“第一消息主题.第一标识”。
步骤810:第一客户端向服务端发布第二消息主题下的消息。
第一客户端在确定第二消息主题后,即可发布第二消息主题下的消息,第一客户端会向服务端发送第二消息主题下的消息。
步骤812:第二客户端向服务端发送第二请求。
该第二请求用于请求服务端发送第一客户端所在计算机设备的第一标识,以使第二客户端根据第一标识生成新的消息主题。可选地,第二客户端向服务端发送第二请求在第一客户端向服务端发送第一请求之后。第二客户端向服务端发送第二请求也能够在第一客户端向服务端发送第一请求之前。在该情况下,服务端也能够根据第二客户端获取的其所在计算机设备的标识,和/或接收第二请求的时间戳来生成上述第一标识。并在第一客户端发送第一请求时向第一客户端发送生成的该第一标识。以使第一客户端和第二客户端生成新的消息主题。
步骤814:服务端向第二客户端发送第一标识。
该第一标识是服务端根据第二标识和/或接收第一客户端的第一请求的时间戳生成的,第二标识是第一客户端获取的第一客户端所在的计算机设备的标识。
步骤816:第二客户端将第一标识与第一消息主题合并,得到第二消息主题。
第一消息主题是在第二客户端中已定义的消息主题,即第二客户端是已支持订阅第一消息主题下的消息的客户端,第二消息主题是基于第一标识新定义的消息主题。可选地,第二客户端在将第一标识与第一消息主题合并时,第二客户端会在第一消息主题的头部、中部或末尾添加第一标识从而得到第二消息主题。
第二客户端根据第一标识和第一消息主题生成第二消息主题的方式,与第一客户端相同。即第一客户端确定的第二消息主题与第二客户端确定的第二消息主题相同。
可选地,上述第一客户端所在的计算机设备主要用于执行图形渲染相关的任务,在该情况下,第一标识可称为GPU标识(GPU_ID)。
示例地,图10是本申请一个示例性实施例提供的发布和订阅消息主题的过程的示意图。如图10所示,第一客户端1001在接收到服务端1002发送的“GPU_ID”后,会在第一消息主题“转换(conversion)”后添加“GPU_ID”,从而得到第二消息主题“转换.GPU_ID(conversion.GPU_ID)”,之后可根据该第二消息主题发布消息。第二客户端1003在接收到服务端1002发送的“GPU_ID”后,会在第一消息主题“转换(conversion)”后添加“GPU_ID”,从而得到第二消息主题“转换.GPU_ID(conversion.GPU_ID)”,之后可订阅该第二消息主题以接收消息。
示例地,第一消息主题为父主题“conversion”,第一客户端向服务端发送的第二标识为MAC地址“52:54:00:3b:ca:3f”,服务端根据该MAC地址生成的第一标识为“0420fb09ef6f397586d5aaeac6205fa8”。服务端向第一客户端和第二客户端发送该第一标识,第一客户端和第二客户端根据第一消息主题和第一标识生成的第二消息主题为“conversion.0420fb09ef6f397586d5aaeac6205fa8”。
示例地,第一消息主题为子主题“conversion.1”,第一客户端向服务端发送的第二标识为MAC地址“52:54:00:3b:ca:3f”,服务端根据该MAC地址生成的第一标识为“0420fb09ef6f397586d5aaeac6205fa8”。服务端向第一客户端和第二客户端发送该第一标识,第一客户端和第二客户端根据第一消息主题和第一标识生成的第二消息主题为“conversion.1.0420fb09ef6f397586d5aaeac6205fa8”或“conversion.0420fb09ef6f397586d5aaeac6205fa8”。
步骤818:第二客户端接收服务端发送的第二消息主题下的消息。
第一客户端会向服务端发送第二消息主题下的消息,之后服务端会将第二消息主题下的消息发送至订阅了第二消息主题的消息接收方,也即是第二客户端,从而实现了不同进程间消息的收发。第二消息主题下的消息与第二消息主题的对应关系,是通人工配置建立的。
示例地,图11是本申请一个示例性实施例提供的接收消息的过程的示意图。如图11所示,第一客户端1101向服务端1102发布第二消息主题下的消息,该消息用于指示执行某一指令。之后服务端1102会向第二客户端1103发送该第二消息主题下的消息,即第二客户端1103接收该第二消息主题下的消息。在接收到该消息后,第二客户端1103会执行该消息中的指令。
步骤820:在第二消息主题下的消息出现发布异常的情况下,服务端确定出现异常的第一客户端所在的计算机设备。
在第二消息主题下的消息出现发布异常的情况下,服务端能够根据其获取的第一客户端所在的计算机设备的MAC地址和/或IP地址,来定位第一客户端所在的计算机设备,从而实现快速定位到问题的所在,方便后续问题的查处以及优化迭代。由于计算机设备的MAC地址和IP地址均能够唯一标识计算机设备,且MAC地址通常不会发生变化,因此通过上述方式定位计算机设备具有准确性。
在一个具体的例子中,消息发布方(Publish)用于发布第一消息主题下的消息,消息接收方(Subscribe)用于订阅第一消息主题下的消息。在消息发布方和消息接收方之间通过第一消息主题传输的消息无法满足当前需求,即需要为第一消息主题创建新的子主题时,消息发布方会向服务端请求生成第一标识,以获取第一标识。服务端会向消息接收方发送其生成的第一标识。获取到第一标识后,消息发布方和消息接收方均会通过在第一消息主题后增加第一标识,以生成相同的新的第二消息主题。之后消息发布方和消息接收方即可通过新的第二消息主题传输所需的消息。
需要说明的是,在上述示例中的分布式消息队列系统中,还能够存在第三客户端、第四客户端等多个客户端,这些客户端也能够通过上述方式订阅消息发布方(第一客户端)新发布的第二消息主题,从而接收第二消息主题下的消息。这些客户端(第三客户端、第四客户端等)订阅第二消息主题以及接收第二消息主题下的消息的具体实现过程可参照针对消息订阅方(第二客户端)的描述,本申请实施例对此不作赘述。另外,这些客户端也能够按照与第一客户端相同的方式,请求服务端为其生成标识(GPU_ID),并基于生成的标识来生成新的消息主题,从而发布新生成的消息主题下的消息。分布式消息队列系统中的客户端均能够订阅这些新生成的消息主题,从而接收这些消息主题下的消息。上述方案实现了针对分布式消息队列系统中的消息主题的动态扩容。
综上所述,本实施例提供的方法,通过在第一消息主题中加入消息发布方的标识,从而得到第二消息主题,消息发布方通过第二消息主题即可发布第二消息主题下的消息,消息接收方通过第二消息主题即可接收第二消息主题下的消息。由于第二消息主题是新定义的消息主题,因此可实现动态添加消息主题,并且在添加消息主题的过程中,无需修改代码,简化了添加消息主题的过程。
另外,本申请实施例提供的方法将父主题与子主题进行分离,用户在动态添加子主题时,只需要设置自己的生成规则(即生成第二消息主题的规则),无需修改原有的总消息主题。即需求变更时,只需要更改局部代码,可以更好的引进新功能。并且,子主题在声明时可以由发布方的IP地址及MAC地址进行唯一标识,企业在部署相关服务时,若Nats服务出现问题。可以根据此标识快速定位到问题所在,方便后续问题的查处以及快速优化迭代。
需要说明的是,本申请实施例提供的方法步骤的先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本申请的保护范围之内,因此不再赘述。
图12是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息发布装置的结构示意图。如图12所示,该装置包括:
收发模块1201,用于通过服务端获取所述装置的第一标识,所述第一标识用于标识所述装置所在的计算机设备;
处理模块1202,用于将所述第一标识与第一消息主题合并,得到第二消息主题;
所述收发模块1201,用于通过所述服务端发布所述第二消息主题下的消息。
在一个可选的设计中,如图13所示,所述装置还包括:
获取模块1203,用于获取所述装置所在的计算机设备的第二标识;
所述收发模块1201,用于向所述服务端发送第一请求,所述第一请求中携带有所述第二标识;
所述收发模块1201,用于接收所述服务端发送的所述第一标识,所述第一标识是所述服务端根据所述第二标识生成的。
在一个可选的设计中,所述第二标识包括如下至少一种:
MAC地址;
IP地址;
处理器设备号。
在一个可选的设计中,所述收发模块1201,用于:
接收所述服务端发送的所述第一标识,所述第一标识是所述服务端根据接收所述第一请求的时间戳生成的。
在一个可选的设计中,所述处理模块1202,用于:
将所述第一标识添加至所述第一消息主题的末尾,得到所述第二消息主题。
图14是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息接收装置的结构示意图。如图14所示,该装置包括:
收发模块1401,用于通过服务端获取第一客户端的第一标识,所述第一标识用于标识所述第一客户端所在的计算机设备;
处理模块1402,用于将所述第一标识与第一消息主题合并,得到第二消息主题;
所述收发模块1401,用于通过所述服务端接收所述第二消息主题下的消息。
在一个可选的设计中,所述收发模块1401,用于:
向所述服务端发送第二请求;
接收所述服务端发送的所述第一标识,所述第一标识是所述服务端根据第二标识生成的,所述第二标识是所述第一客户端获取的所述第一客户端所在的计算机设备的标识。
在一个可选的设计中,所述处理模块1402,用于:
将所述第一标识添加至所述第一消息主题的末尾,得到所述第二消息主题。
图15是本申请一个示例性实施例提供的应用于分布式消息队列系统的消息收发装置的结构示意图。如图15所示,该装置包括:
收发模块1501,用于向第一客户端发送第一标识,所述第一标识用于标识所述第一客户端所在的计算机设备;
所述收发模块1501,用于向第二客户端发送所述第一标识;
所述收发模块1501,用于接收所述第一客户端发布的第二消息主题下的消息;
所述收发模块1501,用于向所述第二客户端发送所述第二消息主题下的消息;
其中,所述第一客户端和所述第二客户端用于将所述第一标识与第一消息主题合并,得到所述第二消息主题。
在一个可选的设计中,如图16所示,所述装置还包括:
所述收发模块1501,用于接收所述第一客户端发送的第一请求,所述第一请求中携带有第二标识,所述第二标识是所述第一客户端获取的所述第一客户端所在的计算机设备的标识;
生成模块1502,用于根据所述第二标识生成所述第一标识;
所述收发模块1501,用于向所述第一客户端发送所述第一标识。
在一个可选的设计中,所述生成模块1502,用于:
根据接收所述第一请求的时间戳生成所述第一标识。
在一个可选的设计中,所述第二标识包括所述第一客户端所在的计算机设备的MAC地址和/或IP地址;如图17所示,所述装置还包括:
确定模块1503,用于在所述第二消息主题下的消息出现发布异常的情况下,根据所述MAC地址和/或所述IP地址确定出现异常的所述第一客户端所在的计算机设备。
需要说明的是:上述实施例提供的消息的发布装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的消息的发布装置与应用于分布式消息队列系统的消息发布方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
同理,上述实施例提供的消息的接收装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的消息的接收装置与应用于分布式消息队列系统的消息接收方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
同理,上述实施例提供的消息的收发装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的消息的收发装置与应用于分布式消息队列系统的消息收发方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本申请的实施例还提供了一种计算机设备,该计算机设备包括:处理器和存储器,存储器中存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现上述各方法实施例提供的应用于分布式消息队列系统的消息发布方法、应用于分布式消息队列系统的消息接收方法或应用于分布式消息队列系统的消息收发方法。
示例地,图18是本申请一个示例性实施例提供的计算机设备的结构示意图。
所述计算机设备1800包括中央处理单元(Central Processing Unit,CPU)1801、包括随机存取存储器(Random Access Memory,RAM)1802和只读存储器(Read-OnlyMemory,ROM)1803的系统存储器1804,以及连接系统存储器1804和中央处理单元1801的系统总线1805。所述计算机设备1800还包括帮助计算机设备内的各个器件之间传输信息的基本输入/输出系统(Input/Output系统,I/O系统)1806,和用于存储操作系统1813、应用程序1814和其他程序模块1815的大容量存储设备1807。
所述基本输入/输出系统1806包括有用于显示信息的显示器1808和用于用户输入信息的诸如鼠标、键盘之类的输入设备1809。其中所述显示器1808和输入设备1809都通过连接到系统总线1805的输入输出控制器1810连接到中央处理单元1801。所述基本输入/输出系统1806还可以包括输入输出控制器1810以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器1810还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备1807通过连接到系统总线1805的大容量存储控制器(未示出)连接到中央处理单元1801。所述大容量存储设备1807及其相关联的计算机可读存储介质为计算机设备1800提供非易失性存储。也就是说,所述大容量存储设备1807可以包括诸如硬盘或者只读光盘(Compact Disc Read-Only Memory,CD-ROM)驱动器之类的计算机可读存储介质(未示出)。
不失一般性,所述计算机可读存储介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读存储指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、可擦除可编程只读寄存器(Erasable Programmable Read OnlyMemory,EPROM)、电子抹除式可复写只读存储器(Electrically-Erasable ProgrammableRead-Only Memory,EEPROM)、闪存或其他固态存储设备、CD-ROM、数字多功能光盘(DigitalVersatile Disc,DVD)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器1804和大容量存储设备1807可以统称为存储器。
存储器存储有一个或多个程序,一个或多个程序被配置成由一个或多个中央处理单元1801执行,一个或多个程序包含用于实现上述方法实施例的指令,中央处理单元1801执行该一个或多个程序实现上述各个方法实施例提供的方法。
根据本申请的各种实施例,所述计算机设备1800还可以通过诸如因特网等网络连接到网络上的远程计算机设备运行。也即计算机设备1800可以通过连接在所述系统总线1805上的网络接口单元1811连接到网络1812,或者说,也可以使用网络接口单元1811来连接到其他类型的网络或远程计算机设备系统(未示出)。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,所述一个或者一个以上程序包含用于进行本申请实施例提供的方法中由计算机设备所执行的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和各模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例中还提供了一种计算机可读存储介质,该可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,当该至少一条指令、至少一段程序、代码集或指令集由计算机设备的处理器加载并执行时,实现上述各方法实施例提供的应用于分布式消息队列系统的消息发布方法、应用于分布式消息队列系统的消息接收方法或应用于分布式消息队列系统的消息收发方法。
本申请还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例提供的应用于分布式消息队列系统的消息发布方法、应用于分布式消息队列系统的消息接收方法或应用于分布式消息队列系统的消息收发方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的可读存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同切换、改进等,均应包含在本申请的保护范围之内。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同切换、改进等,均应包含在本申请的保护范围之内。
Claims (11)
1.一种分布式消息队列系统,其特征在于,所述系统包括:服务端、第一客户端和第二客户端;
所述服务端,用于向所述第一客户端发送第一标识,所述第一标识用于标识所述第一客户端所在的计算机设备;所述服务端,还用于向所述第二客户端发送所述第一标识;
所述第一客户端,用于将所述第一标识与第一消息主题合并,得到第二消息主题,所述第一消息主题是所述第一客户端已发布的第一消息的消息主题,所述第二消息主题是所述第一客户端待发布的消息主题;所述第一客户端,还用于向所述服务端发送第二消息,所述第二消息携带有所述第二消息主题;
所述第二客户端,用于将所述第一标识与所述第一消息主题合并,得到所述第二消息主题,所述第一消息主题是所述第二客户端已订阅的所述第一消息的消息主题,所述第二消息主题是所述第二客户端待订阅的消息主题;所述第二客户端,还用于通过所述服务端订阅所述第二消息主题;
所述服务端,还用于向订阅所述第二消息主题的客户端发送所述第二消息。
2.根据权利要求1所述的系统,其特征在于,
所述第一客户端,还用于获取所述第一客户端所在的计算机设备的第二标识;所述第一客户端,还用于向所述服务端发送第一请求,所述第一请求中携带有所述第二标识;
所述服务端,还用于根据所述第二标识生成所述第一标识;
其中,所述第二标识包括如下至少一种:
媒体访问控制MAC地址;
网际互连协议IP地址;
处理器设备号。
3.根据权利要求2所述的系统,其特征在于,
所述服务端,还用于根据接收所述第一请求的时间戳生成所述第一标识。
4.根据权利要求2所述的系统,其特征在于,
所述第一客户端,还用于将所述第二消息的内容输入分类模型,得到所述第二消息的分类;所述第一客户端,还用于将所述第二消息的分类与所述第一客户端所在的计算机设备的第二标识合并,得到所述第一标识;
其中,所述分类模型是根据样本消息的内容和所述样本消息的样本分类训练得到的。
5.根据权利要求1至4任一所述的系统,其特征在于,
所述第二客户端,还用于向所述服务端发送第二请求,所述第二请求用于请求所述服务端向所述第二客户端发送所述第一标识。
6.根据权利要求2至4任一所述的系统,其特征在于,所述第二标识包括所述第一客户端所在的计算机设备的MAC地址和/或IP地址;
所述服务端,还用于在所述第二消息主题下的消息出现发布异常的情况下,根据所述MAC地址和/或所述IP地址确定出现异常的所述第一客户端所在的计算机设备。
7.根据权利要求1至4任一所述的系统,其特征在于,所述第一消息主题是所述分布式消息队列系统中的第一父主题或第一子主题;
在所述第一消息主题是所述第一父主题的情况下,所述第二消息主题是所述第一父主题的第二子主题;
在所述第一消息主题是所述第一子主题的情况下,所述第二消息主题是所述第二子主题对应的第二父主题的第三子主题。
8.一种应用于分布式消息队列系统的消息发布方法,其特征在于,所述方法应用于第一客户端,所述方法包括:
通过服务端获取所述第一客户端的第一标识,所述第一标识用于标识所述第一客户端所在的计算机设备;
将所述第一标识与第一消息主题合并,得到第二消息主题,所述第一消息主题是所述第一客户端已发布的第一消息的消息主题,所述第二消息主题是所述第一客户端待发布的消息主题;
向所述服务端发送第二消息,所述第二消息携带有所述第二消息主题,所述服务端用于向订阅所述第二消息主题的客户端发送所述第二消息。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
获取所述第一客户端所在的计算机设备的第二标识;
向所述服务端发送第一请求,所述第一请求中携带有所述第二标识。
10.一种应用于分布式消息队列系统的消息接收方法,其特征在于,所述方法应用于第二客户端,所述方法包括:
通过服务端获取第一客户端的第一标识,所述第一标识用于标识所述第一客户端所在的计算机设备;
将所述第一标识与第一消息主题合并,得到第二消息主题,所述第一消息主题是所述第一客户端已发布且所述第二客户端已订阅的第一消息的消息主题,所述第二消息主题是所述第一客户端发布的第二消息的消息主题,所述第二消息主题是所述第二客户端待订阅的消息主题;
通过所述服务端订阅所述第二消息主题以接收所述第二消息主题下的所述第二消息。
11.一种应用于分布式消息队列系统的消息收发方法,其特征在于,所述方法应用于服务端,所述方法包括:
向第一客户端发送第一标识,所述第一标识用于标识所述第一客户端所在的计算机设备;
向第二客户端发送所述第一标识;
接收所述第一客户端发布的第二消息主题下的第二消息;
向所述第二客户端发送所述第二消息主题下的所述第二消息;
其中,所述第一客户端和所述第二客户端用于将所述第一标识与第一消息主题合并,得到所述第二消息主题,所述第一消息主题是所述第一客户端已发布且所述第二客户端已订阅的第一消息的消息主题。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310149692.5A CN116089125A (zh) | 2023-02-16 | 2023-02-16 | 分布式消息队列系统、消息发布方法及消息接收方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310149692.5A CN116089125A (zh) | 2023-02-16 | 2023-02-16 | 分布式消息队列系统、消息发布方法及消息接收方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116089125A true CN116089125A (zh) | 2023-05-09 |
Family
ID=86208337
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310149692.5A Pending CN116089125A (zh) | 2023-02-16 | 2023-02-16 | 分布式消息队列系统、消息发布方法及消息接收方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116089125A (zh) |
-
2023
- 2023-02-16 CN CN202310149692.5A patent/CN116089125A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110086636B (zh) | 一种基于mqtt的消息分发方法、服务器及存储介质 | |
EP3182284A1 (en) | Data pipeline architecture for cloud processing of structured and unstructured data | |
CN111711663A (zh) | 发布及订阅服务的处理方法、装置及电子设备 | |
US7865550B2 (en) | Message processing control in a publish/subscribe system | |
CN112118315A (zh) | 数据处理系统、方法、装置、电子设备和存储介质 | |
US20130066980A1 (en) | Mapping raw event data to customized notifications | |
CN114024972B (zh) | 一种长连接通信方法、系统、装置、设备及存储介质 | |
CN110753129A (zh) | 消息传输方法、系统、装置、设备及计算机可读存储介质 | |
US20080244613A1 (en) | Method and system for processing messages in an application cluster | |
CN114610504A (zh) | 消息处理方法、装置、电子设备及存储介质 | |
CN107342929B (zh) | 一种新消息通知的发送方法、装置及系统 | |
CN110727507B (zh) | 一种消息的处理方法、装置、计算机设备和存储介质 | |
CN116107710A (zh) | 用于处理离线渲染任务的方法、装置、设备和介质 | |
US7818426B2 (en) | Method and system for processing a message by a message provider | |
JP5961471B2 (ja) | 複数の情報システムおける出力比較方法 | |
CN111614726A (zh) | 一种数据转发方法、集群系统及存储介质 | |
CN115022275B (zh) | 一种分布式邮件流转方法、装置、系统、设备及存储介质 | |
CN116401034A (zh) | 任务执行方法、计算机设备及计算机存储介质 | |
CN116089125A (zh) | 分布式消息队列系统、消息发布方法及消息接收方法 | |
US9442882B2 (en) | Efficient maintenance of a distributed system membership view | |
CN113472638B (zh) | 边缘网关控制方法及系统、装置、电子设备、存储介质 | |
CN112532534B (zh) | 一种数据传输方法、装置以及计算机可读存储介质 | |
CN110247808B (zh) | 信息发送方法、装置、设备及可读存储介质 | |
CN109309583B (zh) | 基于分布式系统的信息获取方法、装置、电子设备和介质 | |
CN115202800A (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 |