发布及订阅服务的处理方法、装置及电子设备与流程

文档序号:22334643发布日期:2020-09-25 18:07阅读:109来源:国知局
发布及订阅服务的处理方法、装置及电子设备与流程

本申请涉及发布及订阅技术领域,尤其涉及一种发布及订阅服务的处理方法、装置、电子设备及计算机可读存储介质。



背景技术:

发布及订阅是一种消息范式,消息的发送者,即发布方,不会将消息直接发送给特定的接收者,即订阅方,而是通过中央通信点,例如消息队列遥测传输(messagequeuingtelemetrytransport,mqtt)代理进行发送。mqtt代理负责调度发布方和合法订阅方之间的所有消息。

如图1所示,图1为现有发布及订阅服务的代理服务器通信架构图,向代理服务器发布消息的每个发布方客户端都在消息中包含一个主题,主题是代理服务器的路由信息。每个想要接收消息的订阅方客户端会订阅某个主题,并且代理服务将具有匹配订阅主题的所有消息传递给订阅方客户端。

为保证mqtt代理的可靠性,目前通用做法是mqtt代理的服务端使用心跳检查等手段监测所有代理服务器,并指定唯一可用代理服务器对外提供统一服务,即使用单代理服务器提供服务。但当前代理服务器故障时,其所有已连接客户端设备会断开,服务端需重新分配可用代理服务器供客户端连接。

现有还存在使用多代理服务器对外提供服务的手段,这样虽可服务更多的客户端,但各代理服务器之间消息不互通,当有订阅与被订阅关系的两个客户端分布在不同代理服务器时,订阅者无法收到发布者发出的消息,导致消息丢失。同时因客户端分布在不同的节点,难以进行统一管理和运维。



技术实现要素:

本公开实施例的目的在于提供一种发布及订阅服务的处理方法、装置、电子设备及计算机可读存储介质,以实现客户端的发布消息在多代理服务器之间同步。

根据本公开实施例的第一方面,提供了一种发布及订阅服务的处理方法,所述方法由代理服务器集群中的一个代理服务器执行,所述代理服务器集群包括多个代理服务器,所述多个代理服务器分别与同一个中间服务器连接,所述方法包括:

接收发布方客户端发布的预定主题的第一发布消息;

将包含所述第一发布消息的第一同步信息发送至所述中间服务器,以供所述中间服务器将所述第一同步信息发送到所述代理服务器集群的多个代理服务器,其中,所述第一同步信息包含:所述第一发布消息、所述第一发布消息对应主题的名称、所述代理服务器的自身名称。

可选地,在所述接收发布方客户端发布的预定主题的第一发布消息之后,所述方法还包括:

查找在该代理服务器上订阅所述发布消息对应主题的订阅方客户端;以及

发送所述发布消息至所述订阅方客户端。

可选地,所述方法还包括:

接收所述中间服务器发送的第二同步信息,其中,所述第二同步信息由所述代理服务器集群的另外一个代理服务器发送给所述中间服务器,所述第二同步信息包含:第二发布消息、所述第二发布消息对应主题的名称、发布所述第二发布消息的代理服务器的名称;

发送所述第二发布消息至订阅所述第二发布消息对应主题的订阅方客户端。

可选地,在发送所述第二发布消息至订阅所述发布消息对应主题的订阅方客户端之前,所述方法还包括:

获取所述第二同步信息中所述发布所述第二发布消息的代理服务器的名称;

确定所述发布所述第二发布消息的代理服务器的名称与自身名称是否相同;

在确定所述发布所述第二发布消息的代理服务器的名称与自身名称不同的情况下,获取所述第二同步信息中所述第二发布消息对应主题的名称;

查找向自身订阅所述第二发布消息对应主题的订阅方;

执行所述发送所述第二发布消息至订阅所述第二发布消息对应主题的订阅方客户端的操作。

可选地,所述方法还包括:

在确定所述发布所述第二发布消息的代理服务器的名称与自身名称相同的情况下,不处理所述第二发布消息。

根据本公开实施例的第二方面,提供了一种发布及订阅服务的处理方法,所述方法由一个中间服务器执行,所述中间服务器与代理服务器集群的多个代理服务器分别连接,所述方法包括:

接收一个代理服务器发送的同步信息,所述同步信息包含发布消息、所述发布消息对应主题的名称、发布所述消息的代理服务器的名称;

将接收的同步信息发送到所述多个代理服务器中的全部或部分代理服务器,以供所述全部或部分代理服务器将所述同步信息包含的发布信息,发送至订阅所述发布消息对应主题的订阅方客户端,其中,所述订阅方客户端向至少一个代理服务器订阅信息。

可选地,在所述将接收的同步信息发送到所述多个代理服务器中的全部或部分代理服务器之前,所述方法还包括:

接收一个代理服务器发送的选择消息同步服务的确认请求;

记录所述选择消息同步服务的代理服务器名称;

所述将接收的同步信息发送至所述多个代理服务器中的全部或部分代理服务器包括:

根据所述选择消息同步服务的代理服务器名称的记录,将所述同步信息发送至选择所述消息同步服务的每个代理服务器。

根据本公开实施例的第三方面,提供了一种发布及订阅服务的处理装置,所述装置执行于代理服务器集群中的一个代理服务器,所述代理服务器集群包括多个代理服务器,所述多个代理服务器分别与同一个中间服务器连接,所述装置包括:

第一接收模块,用于接收发布方客户端发布的预定主题的第一发布消息;

第一发送模块,用于将包含所述第一发布消息的第一同步信息发送至所述中间服务器,以供所述中间服务器将所述第一同步信息发送到所述代理服务器集群的多个代理服务器,其中,所述第一同步信息包含:所述第一发布消息、所述第一发布消息对应主题的名称、所述代理服务器的自身名称。

可选地,所述装置还包括订阅消息发送模块,用于:

查找在该代理服务器上订阅所述发布消息对应主题的订阅方客户端;以及

发送所述发布消息至所述订阅方客户端。

可选地,所述装置还包括:

第二接收模块,用于接收所述中间服务器发送的第二同步信息,其中,所述第二同步信息由所述代理服务器集群的另外一个代理服务器发送给所述中间服务器,所述第二同步信息包含:第二发布消息、所述第二发布消息对应主题的名称、发布所述第二发布消息的代理服务器的名称;

第二发送模块,用于发送所述第二发布消息至订阅所述第二发布消息对应主题的订阅方客户端。

可选地,所述装置还包括检测模块,所述检测模块包括:

获取单元,用于获取所述第二同步信息中所述发布所述第二发布消息的代理服务器的名称;

确定单元,用于确定所述发布所述第二发布消息的代理服务器的名称与自身名称是否相同;

第一处理单元,用于在确定所述发布所述第二发布消息的代理服务器的名称与自身名称不同的情况下,获取所述第二同步信息中所述第二发布消息对应主题的名称;查找向自身订阅所述第二发布消息对应主题的订阅方;执行所述发送所述第二发布消息至订阅所述第二发布消息对应主题的订阅方客户端的操作。

可选地,所述检测模块还包括:

第二处理单元,用于在确定所述发布所述第二发布消息的代理服务器的名称与自身名称相同的情况下,不处理所述第二发布消息。

根据本公开实施例的第四方面,提供了一种发布及订阅服务的处理装置,所述装置执行于一个中间服务器,所述中间服务器与代理服务器集群的多个代理服务器分别连接,所述装置包括:

接收模块,用于接收一个代理服务器发送的同步信息,同步信息包含发布消息、所述发布消息对应主题的名称、发布所述消息的所述代理服务器的名称;

发送模块,用于将接收的同步信息发送到所述多个代理服务器中的全部或部分代理服务器,以供所述全部或部分代理服务器将所述同步信息包含的发布信息,发送至订阅所述发布消息对应主题的订阅方客户端,其中,所述订阅方客户端向至少一个代理服务器订阅信息。

可选地,所述装置还包括消息同步模块,所述消息同步模块包括:

接收单元,接收一个代理服务器发送的选择消息同步服务的确认请求;

记录单元,记录所述选择消息同步服务的代理服务器名称;

所述发送模块还用于:

根据所述选择消息同步服务的代理服务器名称的记录,将所述同步信息发送至选择所述消息同步服务的每个代理服务器。

根据本公开实施例的第五方面,提供了一种电子设备,包括:

根据本公开实施例第三方面或者第四方面所述的处理装置;或者,

处理器和存储器,所述存储器用于存储可执行的指令,所述指令用于控制所述处理器执行根据本公开实施例第一方面或者第二方面描述的处理方法。

根据本公开实施例的第六方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序在被处理器执行时实现根据本公开实施例第一方面或者第二方面描述的处理方法。

根据本公开实施例,通过多个代理服务器在消息中间件上订阅消息同步主题,并将客户端在其上发布的消息发送给消息中间件该消息同步主题,由消息中间件进一步将该发布消息发送给订阅该消息同步主题的各个代理服务器,实现客户端的发布消息在多代理服务器之间同步。如此各个代理服务器都可以收到该客户端的发布消息,并对代理服务器对应订阅该发布消息对应主题的订阅客户端发送该发布消息。这样,不仅可以实现多代理服务器服务更多的客户端,还可以实现客户端的发布消息在多代理服务器之间的同步。即使存在订阅与被订阅关系的两个客户端分布在不同代理服务器时,订阅者也可以收到发布者发出的消息,不会造成数据丢失,从而可解决现有方案集群中节点通讯问题。

通过以下参照附图对本公开的示例性实施例的详细描述,本公开的其它特征及其优点将会变得清楚。

附图说明

被结合在说明书中并构成说明书的一部分的附图示出了本公开的实施例,并且连同其说明一起用于解释本公开实施例的原理。

图1现有发布及订阅服务的代理服务器通信架构图。

图2为可用于实现本公开实施例的电子设备的硬件配置结构方框图。

图3为本公开实施例的发布及订阅服务的代理服务器集群通信架构图。

图4为本公开第一实施例的发布及订阅服务的处理方法步骤流程图。

图5为本公开第二实施例的发布及订阅服务的处理方法步骤流程图。

图6为本公开实施例的发布及订阅服务的处理方法应用示例流程图。

图7为本公开第一实施例的发布及订阅服务的处理装置的结构方框图。

图8为本公开第二实施例的发布及订阅服务的处理装置的结构方框图。

图9为本公开实施例的电子设备的结构方框图。

具体实施方式

现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开实施例的范围。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开实施例及其应用或使用的任何限制。

对于相关领域普通技术人物已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

在这里示出和讨论的所有例子中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它例子可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

<实施环境及硬件配置>

图2是示出可以实现本公开的实施例的电子设备1000的硬件配置的结构方框图。

电子设备1000可以是台式计算机、服务器设备等。

服务器设备可以是整体式服务器或是跨多计算机或计算机数据中心的分散式服务器。服务器可以是各种类型的,例如但不限于,内容分发网络的节点设备、分布式存储系统的存储服务器、云数据库服务器、云计算服务器、云管理服务器、网络服务器、新闻服务器、邮件服务器、消息服务器、广告服务器、文件服务器、应用服务器、交互服务器、存储服务器、数据库服务器或代理服务器等。在一些实施例中,每个服务器可以包括硬件,软件,或用于执行服务器所支持或实现的合适功能的内嵌逻辑组件或两个或多个此类组件的组合。例如,服务器例如刀片服务器、云端服务器等,或者可以是由多台服务器组成的服务器群组,可以包括上述类型的服务器中的一种或多种等等。

如图2所示,电子设备1000可以包括处理器1100、存储器1200、接口装置1300、通信装置1400,或者还可以包括显示装置1500、输入装置1600、扬声器1700、麦克风1800等等。其中,处理器1100可以是中央处理器cpu、微处理器mcu等。存储器1200例如包括rom(只读存储器)、ram(随机存取存储器)、诸如硬盘的非易失性存储器等。接口装置1300例如包括usb接口、耳机接口等,用于执行计算机程序。该计算机程序可以采用比如x86、arm、risc、mips、sse等架构的指令集编写。通信装置1400例如能够利用光纤或电缆进行有线通信,或者无线通信,具体地可以包括wifi通信、蓝牙通信、2g/3g/4g/5g通信等。显示装置1500例如是液晶显示屏、触摸显示屏等。输入装置1600例如可以包括触摸屏、键盘、体感输入等。用户可以通过扬声器1700和麦克风1800输入/输出语音信息。

图2所示的电子设备仅仅是说明性的并且决不意味着对本公开实施例、其应用或使用的任何限制。应用于本公开的实施例中,电子设备1000的所述存储器1200用于存储指令,所述指令用于控制所述处理器1100进行操作以执行本公开实施例提供的任意一项发布及订阅服务的处理方法。本领域技术人员应当理解,尽管在图2中对电子设备1000示出了多个装置,但是,本公开实施例可以仅涉及其中的部分装置,例如电子设备1000可以只涉及处理器1100和存储装置1200。技术人员可以根据本公开实施例所公开方案设计指令。指令如何控制处理器进行操作,这是本领域公知,故在此不再详细描述。

<应用场景>

首先,结合图3对本公开实施例的发布及订阅服务的处理方法的应用场景进行描述,其中图3为本公开实施例的发布及订阅服务的代理服务器集群通信架构图。

如图3所示,该实施例中代理服务器集群包括多个代理服务器,例如代理服务器1、代理服务器2、代理服务器3、代理服务器4,本公开实施例的发布及订阅服务的处理方法可以实施在上述代理服务器集群包括的任意一个代理服务器上。

在图3示例中,代理服务器1、3对应于发布方的客户端a和客户端b,代理服务器2、4对应于订阅方的客户端c和客户端d。客户端a、b可以通过负载均衡(loadbalance,lb)连接到代理服务器集群中的对应节点,即代理服务器1、3上,其中被连接的代理服务器1、3维护连接会话与客户端a、b保持心跳,通过心跳指令保持连接通畅。

同样地,客户端c、d通过负载均衡(lb)连接到代理服务器集群中的对应节点,即代理服务器2、4上,被连接的代理服务器2、4维护连接会话与客户端c、d保持心跳。

上述多个理服务器1、2、3、4分别与一中间服务器连接,中间服务器可以是消息中间件。在一个示例中,无论是客户端发布至代理服务器的消息,还是代理服务器发布到中间服务器的消息,均使用json(javascriptobjectnotation,javascript对象简谱,javascript为解释型或即时编译型的编程语言)标准格式,以方便接收方处理消息。

下面,将结合实施例对本公开实施例的发布及订阅服务的处理方法、装置及电子设备分别作出描述。

<方法实施例一>

首先,在本公开一个实施例中,提供一种发布及订阅服务的处理方法,如图4所述,图4为本公开第一实施例的发布及订阅服务的处理方法步骤流程图。该方法可以是由电子设备或由多个电子设备组成的系统实施,该电子设备例如可以是如图1所示的电子设备1000。

在该实施例中,发布及订阅服务的处理方法由代理服务器集群中的一代理服务器执行,代理服务器集群包括多个代理服务器,多个代理服务器分别与同一个中间服务器连接。

所述发布及订阅服务的处理方法包括以下步骤:

步骤102,接收发布方客户端发布的预定主题的第一发布消息。

在基于主题的发布及订阅服务中,发布方的第一发布消息被发布到主题通道上。订阅方将收到其订阅的主题上的所有消息,并且所有订阅同一主题的订阅方将接收到同样的消息。

这里,在发布方在对应客户端上发布预定主题的消息后,为其提供发布服务的代理服务器将收到来自该发布方客户端的该第一发布消息。

步骤104,将包含第一发布消息的第一同步信息发送至中间服务器,以供中间服务器将第一同步信息发送到代理服务器集群的多个代理服务器,其中,第一同步信息包含:第一发布消息、第一发布消息对应主题的名称、代理服务器的自身名称。

在一个实施例中,中间服务器可以是消息中间件,消息中间件可以使用远程字典服务(remotedictionaryserver,redis)、高吞吐量的分布式发布订阅消息系统(kafka)、面向消息的中间件(rabbitmq)或者其他分布式的消息中间件。

第一同步信息包含有代理服务器在步骤102中接收的第一发布消息,是为了将在该代理服务器上发布的第一发布消息同步到中间服务器。发送到中间服务器的第一同步信息中包含的第一发布消息不局限于发布的主题类型,也不局限于来源于哪个发布方。不同发布方在代理服务器的不同类型主题上发布的第一发布消息,均可发送至中间服务器。

第一同步信息除了包含第一发布消息之外,还包含有第一发布消息对应的主题的名称,以及向中间服务器发送该第一同步信息的代理服务器的名称,也即接收该第一发布消息的代理服务器自身名称。

第一发布消息为发布方客户端实际发布的消息内容,以图3为例,比如客户端a发送内容为{"msg":"hello"}的消息至代理服务器1的主题/test/topic中,在接收到发布方客户端a发布到代理服务器1的主题“/test/topic”的第一发布消息“{"msg":"hello"}”后,代理服务器1向中间服务器发送第一同步信息,格式例如如下:

其中,第一同步信息中的broker-1表示代理服务器1;node对应的“broker1”表示发送该第一同步信息的节点名称,即代理服务器1的名称;topic对应的“test”表示客户端a发布到代理服务器1的第一发布消息对应主题的名称;msg对应的“hello”表示客户端a发布到代理服务器1的第一发布消息的内容。

如此,该代理服务器则可以将在其主题上发布的第一发布消息同步到中间服务器,以便中间服务器执行后续操作,下文中将展开描述。

在步骤102接收到第一发布消息之后,除了将第一发布消息同步至中间服务器,代理服务器还根据该第一发布消息,正常为在该代理服务器上订阅该预定主题的订阅方推送该第一发布消息。

可选的,在一个实施例中,在所述接收发布方客户端发布的预定主题的第一发布消息之后,所述方法还包括:查找在该代理服务器上订阅所述第一发布消息对应主题的订阅方;以及发送所述第一发布消息至所述订阅方客户端。

订阅方通过在该代理服务器上进行注册和订阅主题,从而该代理服务器可以为订阅方提供基于该订阅主题的发布及订阅服务。

一旦存在发布到订阅主题的第一发布消息,订阅方就会根据代理服务器的消息推送,收到其在代理服务器的订阅主题上的所有消息。

代理服务器在接收到在其上主题发布的第一发布消息后,会查找订阅将该第一发布消息对应主题的订阅方,并在存在订阅该主题的订阅方时,将该第一发布消息发送给该订阅方的客户端。如果查询不存在该主题的订阅方,则不处理该第一发布消息。但是,无论当前代理服务器是否查询到订阅该主题的订阅方,代理服务器都会在收到发布方的第一发布消息后,将包含该第一发布消息的同步信息发送到中间服务器。

上述实施例中,代理服务器会以第一同步信息的形式,将发布在其上预定主题的第一发布消息发送至中间服务器,此外,代理服务器同样会收到中间服务器发送的第一同步信息。

可选的,在一个实施例中,所述方法还包括:接收所述中间服务器发送的第二同步信息,其中,所述第二同步信息由所述代理服务器集群的一个代理服务器发送给所述中间服务器,所述第二同步信息包含:第二发布消息、所述第二发布消息对应主题的名称、发布所述第二消息的代理服务器的名称;发送所述第二发布消息至订阅所述发布消息对应主题的订阅方客户端。

代理服务器从中间服务器接收的第二同步信息所包含的内容形式,可以与该代理服务器发送至中间服务器的第一同步信息的内容形式相同,例如都包含第一(第二)发布消息、该第一(第二)发布消息对应的主题名称、代理服务器的名称。当然,对于当前代理服务器来说,发送至中间服务器的第一同步信息中的代理服务器名称为当前代理服务器自身名称;接收的中间服务器的第二同步信息中的代理服务器名称,为发送该第二同步信息的代理服务器名称。

通过上述实施例,当前代理服务器不仅可以将在自己代理服务器的主题上发布的第一发布消息,推送到对应该主题的订阅方客户端,还可以通过中间服务器将在其他代理服务器的主题上发布的第二发布消息,推送到在自己代理服务器上订阅该主题的订阅方客户端。

当前代理服务器从中间服务器接收的第二同步信息,可以来自于与中间服务器连接的全部代理服务器或者部分代理服务器。中间服务器在发送同步信息至各个代理服务器时,不区分发送的该同步信息是否与再次同步发送的代理服务器为同一个,即,收到有代理服务器发送的同步信息之后,就将该同步信息发送到与其连接的代理服务器,当然也可能包括当前代理服务器本身。

如此,当前代理服务器会再次接收到自己发送给中间服务器的第一(第二)同步信息。由于当前代理服务器在接收到在其上主题发布的发布消息后,会查找订阅将该发布消息对应主题的订阅方,并在存在对应主题的订阅方时,将该发布消息发送给该订阅方的客户端。此时,在当前代理服务器再次收到其之前发送给中间服务器的同步信息后,为避免将同步信息包含的发布消息再次发送给已经收到该发布消息的订阅方,则需要判断该同步信息是否为自己发出的。

可选的,在一个实施例中,在发送所述第二发布消息至订阅所述第二发布消息对应主题的订阅方客户端之前,所述方法还包括:获取所述第二同步信息中所述发布所述第二消息的代理服务器的名称;确定所述发布所述第二消息的代理服务器的名称与所述代理服务器的自身名称是否相同;在确定所述发布所述第二消息的代理服务器的名称与所述代理服务器的自身名称不同的情况下,获取所述第二同步信息中所述第二发布消息对应主题的名称;查找在所述代理服务器上订阅所述第二发布消息对应主题的订阅方;执行所述发送所述第二发布消息至订阅所述第二发布消息对应主题的订阅方客户端的操作。

所述方法还包括:在确定所述发布所述第二消息的代理服务器的名称与所述代理服务器的名称相同的情况下,不处理所述第二发布消息。

根据上述实施例,对于判断不是自己发送到中间服务器的同步信息,代理服务器会根据该同步信息中的发布消息对应主题名称,查找其上是否有订阅该主题的订阅方。如上文所述,代理服务器根据查找结果执行对应的发布消息推送操作,这里不再赘述。

对于接收到的中间服务器发送的同步信息,若判断是当前代理服务器自己发送到中间服务器的同步信息,则代理服务器在接收到该同步信息后不进行处理。

<方法实施例二>

在本公开另一个实施例中,提供一种发布及订阅服务的处理方法,如图5所述,图5为本公开第二实施例的发布及订阅服务的处理方法步骤流程图。该方法可以是由电子设备或由多个电子设备组成的系统实施,该电子设备例如可以是如图1所示的电子设备1000。

在该实施例中,发布及订阅服务的处理方法由中间服务器执行,所述中间服务器与代理服务器集群的多个代理服务器分别连接。

如图5所示,所述发布及订阅服务的处理方法包括以下步骤:

步骤112,接收一个代理服务器发送的同步信息,同步信息包含发布消息、所述发布消息对应主题的名称、发布所述消息的代理服务器的名称。

如上文所述,中间服务器可以是消息中间件。中间服务器接收的同步信息,可以来自代理服务器集群中的某一代理服务器,该代理服务器可以是上述第一实施例的代理服务器。

步骤114,将接收的同步信息发送到所述多个代理服务器中的全部或部分代理服务器,以供所述多个代理服务器将所述同步信息包含的发布信息,发送至订阅所述发布消息对应主题的订阅方客户端,其中,所述订阅方客户端向至少一个代理服务器订阅信息。

中间服务器将接收到的同步信息发送到预定的代理服务器上,能够收到中间服务器发送的同步信息的代理服务器,可以按照预定的协议建立与中间服务器之间的同步信息传输,以使得中间服务器在收到同步信息后,即发送到该代理服务器上。

可选的,在一个实施例中,在所述将接收的同步信息发送到所述多个代理服务器中的全部或部分代理服务器之前,所述方法还包括:接收一个代理服务器发送的选择消息同步服务的确认请求;记录所述选择消息同步服务的代理服务器名称;所述将接收的同步信息发送至所述多个代理服务器中的全部或部分代理服务器包括:根据所述选择消息同步服务的代理服务器名称的记录,将所述同步信息发送至选择所述消息同步服务的每个代理服务器。

在一个实施例中,各代理服务器与中间服务器例如可以通过发布及订阅服务的形式建立同步信息传输,其中代理服务器可以作为订阅方在该中间服务器上订阅消息同步主题,该主题用于将代理服务器发送的同步消息进行推送。若代理服务器集群中的某代理服务器在中间服务器上订阅了该消息同步主题,则中间服务器在收到代理服务器集群中任一代理服务器发送的同步信息之后,会将该同步信息推送到订阅该主题的订阅方代理服务器。即,代理服务器可以看作是订阅方,中间服务器看作是代理服务器。

在一个实施例中,代理服务器在将同步信息发送到中间服务器时,也可以通过发布及订阅服务的形式进行发送,其中代理服务器可以作为发布方在该中间服务器上的消息同步主题上发布同步信息,从而将同步信息发送到中间服务器。即,该代理服务器可以看作是发布方,中间服务器看作是代理服务器。

此时,代理服务器发送的选择消息同步服务的确认请求,可以是代理服务器在该中间服务器上订阅消息同步主题。

<例子>

下面,将结合具体示例,对本公开实施例的发布及订阅服务的处理方法作出描述。

现在参考图6,图6为本公开实施例的发布及订阅服务的处理方法示例流程图。

如图所示,该实施例中发布及订阅服务的处理方法包括以下步骤:

步骤302,代理服务器集群启动,其中代理服务器集群的各代理服务器启动后连接中间服务器。

代理服务器在启动时建立与中间服务器连接是因为代理服务器需要与消息中间件保持长链接,以保证当有新的消息发出的时候,订阅方客户端能第一时间收到。如果以固定间隔获取,比如1秒,就会出现刚断开连接时如果有新消息进来需要等1秒后,重新建立连接代理服务器才能收到,同时与从中间服务器发送消息到代理服务器所消耗的时间相比,重新建立连接耗时比较长,不断重复建立连接很浪费计算和网络资源,因此代理服务器在启动时与中间服务器建立连接并通过心跳指令保持此连接通畅。

步骤304,代理服务器在中间服务器上通过订阅消息同步主题的方式,建立与中间服务器的同步信息传输;

步骤306,客户端发起代理服务器连接;这里,该客户端可以既可以是发布方客户端,也可以是订阅方客户端。

步骤308,通过负载均衡分发将客户端连接到代理服务器集群中的某一代理服务器;

步骤310,被连接的该代理服务器与客户端建立连接,并维护连接会话,以与客户端保持心跳。

步骤312,客户端连接后可以向该代理服务器注册并订阅主题,订阅关系由当前代理服务器维护。该步骤中,客户端为订阅方客户端,接收该代理服务器发送的该订阅主题的相关消息。

步骤314,客户端将发布消息发送至当前代理服务器的特定主题。该步骤中,客户端为发布方客户端,向该代理服务器上的对应主题发布消息。

步骤316,当前代理服务器收到发布方的发布消息后,会在自己的代理服务器本地查找是否有订阅此主题的订阅方,如果有,当前代理服务器则将发布消息发送给订阅方客户端。

步骤318,当前代理服务器收到发布方的发布消息后,会将包含发布消息、发布消息对应主题名称、当前代理服务器的自身名称的同步信息,推送至中间服务器的消息同步主题。由中间服务器将该同步信息推送至在其上订阅消息同步主题的代理服务器。这里,只要该当前代理服务器也订阅了消息同步主题,则其他代理服务器中也包括当前代理服务器。

步骤320,在中间服务器上订阅消息同步主题的代理服务器,接收到中间服务器发送的同步信息。

步骤322,接收到同步信息的代理服务器对同步信息进行解析,判断其自身的代理服务器名称是否与同步信息中包含的发布所述消息的代理服务器的名称相同。

步骤324,如果名称不同,则查找在本代理服务器上订阅此发布消息对应主题的订阅方,并将该发布消息发送给该订阅方客户端。

步骤326,如果名称相同,则结束,不进行处理。

根据本公开实施例,通过代理服务器集群的代理服务器,将其接收的发布方在其预定主题上发布的发布消息发送给中间服务器,由中间服务器进一步将该发布消息发送给其他的代理服务器,实现客户端的发布消息在多个代理服务器之间同步和共享。如此各个代理服务器都可以收到该客户端的发布消息,并对本代理服务器上订阅该发布消息对应主题的订阅方发送该发布消息。

这样,不仅可以实现多个代理服务器服务更多的客户端,还可以在订阅与被订阅关系的两个客户端分布在不同代理服务器的情况下,订阅方也可以收到发布方发布的消息,不会造成发布消息丢失。

此外,即使订阅和被订阅关系的客户端分布在不同的代理服务器,通过本公开实施例的发布及订阅服务的处理方法,也可以实现对客户端和代理服务器的统一管理和运维。

在一个实施例中,同步信息数据可以为轻量化数据,例如使用json格式的数据进行传输,因此具有较小的资源损耗小。并且,本公开实施例利用代理服务器集群的多代理服务器提供服务,具有客户端连接承载能力强的优点,可支持大规模设备接入,实现分布式消息订阅。

根据本公开实施例,单代理节点可对例如10万以上数量的客户端提供连接及消息发布及订阅服务,在代理集群的代理服务器节点数为n的情况下,可提供数量为10万×n的客户端服务能力。并且代理服务器与客户端设备连接稳定,具有极高的数据可靠性。

<装置实施例一>

在本公开另一个实施例中,还提供了一种用于发布及订阅服务的处理装置2000,如图7所示,图7为本公开实施例的发布及订阅服务的处理装置的结构方框图。

在该实施例中,所述处理装置2000执行在代理服务器集群中的一代理服务器端,所述代理服务器集群包括多个代理服务器,所述多个代理服务器分别与同一个中间服务器连接。

如图7所示,处理装置2000包括:

第一接收模块2200,用于接收发布方客户端发布的预定主题的第一发布消息。

第一发送模块2400,用于将包含所述第一发布消息的第一同步信息发送至所述中间服务器,以供所述中间服务器将所述第一同步信息发送到所述代理服务器集群的多个代理服务器,其中,所述第一同步信息包含:所述第一发布消息、所述第一发布消息对应主题的名称、所述代理服务器的自身名称。

在一个实施例中,所述装置还包括订阅消息发送模块,用于:查找在该代理服务器上订阅所述发布消息对应主题的订阅方客户端;以及发送所述发布消息至所述订阅方客户端。

在一个实施例中,所述装置还包括:第二接收模块,用于接收所述中间服务器发送的第二同步信息,其中,所述第二同步信息由所述代理服务器集群的另外一个代理服务器发送给所述中间服务器,所述第二同步信息包含:第二发布消息、所述第二发布消息对应主题的名称、发布所述第二发布消息的代理服务器的名称;

第二发送模块,用于发送所述第二发布消息至订阅所述第二发布消息对应主题的订阅方客户端。

在一个实施例中,所述装置还包括检测模块,所述检测模块包括:获取单元,用于获取所述第二同步信息中所述发布所述第二发布消息的代理服务器的名称;确定单元,用于确定所述发布所述第二发布消息的代理服务器的名称与自身名称是否相同;第一处理单元,用于在确定所述发布所述第二发布消息的代理服务器的名称与自身名称不同的情况下,获取所述第二同步信息中所述第二发布消息对应主题的名称;查找向自身订阅所述第二发布消息对应主题的订阅方;执行所述发送所述第二发布消息至订阅所述第二发布消息对应主题的订阅方客户端的操作。

在一个实施例中,所述检测模块还包括:第二处理单元,用于在确定所述发布所述第二发布消息的代理服务器的名称与自身名称相同的情况下,不处理所述第二发布消息。

<装置实施例二>

在本公开又一个实施例中,还提供了一种用于发布及订阅服务的处理装置3000,如图8所示,图8为本公开第二实施例的发布及订阅服务的处理装置的结构方框图。

在该实施例中,处理装置3000执行在中间服务器端,所述中间服务器与代理服务器集群的多个代理服务器分别连接。

如图8所示,处理装置3000包括:

接收模块3200,用于接收一个代理服务器发送的同步信息,同步信息包含发布消息、所述发布消息对应主题的名称、发布所述消息的所述代理服务器的名称。

发送模块3400,用于将接收的同步信息发送到所述多个代理服务器中的全部或部分代理服务器,以供所述全部或部分代理服务器将所述同步信息包含的发布信息,发送至订阅所述发布消息对应主题的订阅方客户端,其中,所述订阅方客户端向至少一个代理服务器订阅信息。

在一个实施例中,所述处理装置3000还包括消息同步模块,所述消息同步模块包括:接收单元,接收一个代理服务器发送的选择消息同步服务的确认请求;记录单元,记录所述选择消息同步服务的代理服务器名称。所述发送模块还用于:根据所述选择消息同步服务的代理服务器名称的记录,将所述同步信息发送至选择所述消息同步服务的每个代理服务器。

<电子设备实施例>

根据本公开的再一个实施例,还提供了一种电子设备,该电子设备4000可以是图1所示的电子设备1000。图9为本公开实施例的电子设备的结构方框图。

一方面,该电子设备4000可以包括前述的发布及订阅服务的处理装置,用于实施本公开任意实施例的发布及订阅服务的处理方法。

另一方面,如图9所示,电子设备4000可以包括存储器4200和处理器4400,存储器4200用于存储可执行的指令;该指令用于控制处理器4400执行前述的发布及订阅服务的处理方法。

在本实施例中,电子设备4000可以平板电脑、掌上电脑、台式机、笔记本电脑、工作站、游戏机、服务器等任意具有存储器4200以及处理器4400的电子产品。

<计算机可读存储介质实施例>

最后,根据本公开的又一个实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序在被处理器执行时实现根据本公开任意实施例所述的发布及订阅服务的处理方法。

本公开实施例可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本公开实施例的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本公开实施例操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开实施例的各个方面。

这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开实施例的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。对于本领域技术人物来说公知的是,通过硬件方式实现、通过软件方式实现以及通过软件和硬件结合的方式实现都是等价的。

以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人物来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人物能理解本文披露的各实施例。本公开实施例的范围由所附权利要求来限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1