一种远程调用方法、消息中间件集群及系统与流程

文档序号:11864506阅读:235来源:国知局
一种远程调用方法、消息中间件集群及系统与流程

本发明涉及计算机技术领域,特别涉及一种远程调用方法、消息中间件集群及系统。



背景技术:

远程调用是由主节点发出请求,从节点根据请求执行结果并返回给主节点。在现有的远程调用过程中,主节点与从节点往往处于同一网络下如TCP、HTTP等,通过网络协议进行通信。由于不同的网络的协议和调用模式往往不同,而现有的网络协议的方式,并不能实现不同网络间的远程调用。



技术实现要素:

本发明实施例提供了一种远程调用方法、消息中间件集群及系统,实现了跨网络远程调用。

一种远程调用方法,设置至少一个消息中间件,确定至少一个主节点和至少一个从节点,在每一个消息中间件为所述至少一个主节点设置共用队列,为每一个从节点设置对应的队列,还包括:

所述至少一个消息中间件中任意消息中间件中的每一个从节点对应的队列作为当前队列,接收所述至少一个主节点中任意主节点发送的消息命令;

所述当前队列将所述消息命令发送给对应的当前从节点;

所述共用队列接收所述当前从节点发送的消息命令对应的执行结果,并将所述执行结果发送给所述至少一个主节点中任意一个主节点。

优选地,上述方法进一步包括:确定每一个消息中间件中同一个从节点对应的队列间的镜像关系;

在所述接收所述至少一个主节点中任意主节点发送的消息命令之后,在所述当前队列将所述消息命令发送给对应的当前从节点之前,进一步包括:根据所述同一个从节点对应的队列间的镜像关系,将所述消息命令镜像到所述当前队列对应的镜像队列;

当当前从节点与所述当前队列相连时,则执行所述当前队列将所述消息命令发送给对应的当前从节点;

当当前从节点与所述当前队列对应的镜像队列相连时,则所述镜像队列将所述消息命令发送给对应的当前从节点。

优选地,上述方法进一步包括:确定每一个消息中间件中共用队列间的镜像关系;

所述共用队列接收所述当前从节点发送的消息命令对应的执行结果,包括:任意消息中间件中的共用队列接收所述当前从节点发送的消息命令对应的执行结果,并根据所述共用队列间的镜像关系,将所述执行结果镜像到每一个消息中间件中的共用队列。

优选地,所述消息命令,包括:Json格式封装的消息命令;

所述执行结果,包括:Json格式封装的执行结果。

一种消息中间件集群,包括:至少两个包含消息中间件的服务器,其中,

每一个包含消息中间件的服务器,与外设的至少一个主节点和至少一个从节点相连,用于在包含的消息中间件中,为所述外设的至少一个主节点设置共用队列,为外设的每一个从节点设置对应的队列,利用每一个从节点对应的队列接收所述外设的至少一个主节点中任意主节点发送的消息命令,将所述消息命令发送给对应的外设的从节点,利用所述共用队列接收外设的从节点发送的消息命令对应的执行结果,并将所述执行结果发送给所述外设的至少一个主节点中任意一个主节点。

优选地,至少两个包含消息中间件的服务器间具有镜像关系,其中,

任意一个包含消息中间件的服务器,用于当利用任意从节点对应的队列接收到消息命令时,根据所述镜像关系,将所述消息命令镜像到每一个包含消息中间件的服务器中对应的镜像队列中。

优选地,任意一个包含消息中间件的服务器,用于当利用共用队列接收到执行结果时,根据所述镜像关系,将所述执行结果镜像到每一个包含消息中间件的服务器中的共用队列中。

一种远程调控系统,其特征在于,包括:上述任一所述的消息中间件集群、至少一个主节点和至少一个从节点,其中,

所述至少一个主节点中,每一个主节点与所述消息中间件集群中每一个包含消息中间件的服务器相连,用于向任意一个消息中间件中的目标从节点对应的队列发送消息命令,并接收任意一个消息中间件中的共用队列发送的执行结果;

所述至少一个从节点中,每一个从节点,与所述消息中间件集群中每一个包含消息中间件的服务器相连,用于接收任意一个消息中间件中该从节点对应的队列发送的消息命令,并执行该消息命令,生成执行结果,将该执行结果发送给任意一个消息中间件中的共用队列。

优选地,所述每一个主节点,用于将接收到的执行结果备份到所有主节点中。

优选地,所述每一个主节点,用于为发送的消息命令生成对应的ID,根据ID将消息命令发送给至少一个从节点对应的队列。

优选地,所述每一个主节点,用于通过json格式对消息命令进行封装,将json格式的消息命令发送给任意一个消息中间件中的目标从节点对应的队列,并接收json格式的执行结果;

所述每一个从节点,包含Executor进程,作为目标节点时,接收json格式的消息命令,并解析所述json格式的消息命令,并将解析后的消息命令发送给Executor进程,生成执行结果,并通过json格式对执行结果进行封装,并将封装后的执行结果发送给任意消息中间件中的共用队列。

本发明实施例提供了一种远程调用方法、消息中间件集群及系统,该方法通过设置至少一个消息中间件,确定至少一个主节点和至少一个从节点,在每一个消息中间件为至少一个主节点设置共用队列,为每一个从节点设置对应的队列,至少一个消息中间件中任意消息中间件中的每一个从节点对应的队列作为当前队列,接收至少一个主节点中任意主节点发送的消息命令;当前队列将消息命令发送给对应的当前从节点;共用队列接收当前从节点发送的消息命令对应的执行结果,并将执行结果发送给至少一个主节点中任意一个主节点,由于消息中间件本身适用于多种网络,那么处于不同网络中的各个主节点和各个从节点能够通过消息中间件中的队列发送和接收信息,实现了跨网络远程调用。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一个实施例提供的一种远程调用方法的流程图;

图2是本发明一个实施例提供的一种消息中间件集群的结构示意图;

图3是本发明一个实施例提供的一种远程调用系统的结构示意图;

图4是本发明另一个实施例提供的一种远程调用系统的结构示意图;

图5是本发明另一个实施例提供的一种远程调用方法的流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,本发明实施例提供了一种远程调用方法,该方法可以包括以下步骤:

步骤101:设置至少一个消息中间件,确定至少一个主节点和至少一个从节点;

步骤102:在每一个消息中间件为至少一个主节点设置共用队列,为每一个从节点设置对应的队列;

步骤103:至少一个消息中间件中任意消息中间件中的每一个从节点对应的队列作为当前队列,接收至少一个主节点中任意主节点发送的消息命令;

步骤104:当前队列将消息命令发送给对应的当前从节点;

步骤105:共用队列接收当前从节点发送的消息命令对应的执行结果,并将执行结果发送给至少一个主节点中任意一个主节点。

在图1所示的实施例中,通过设置至少一个消息中间件,确定至少一个主节点和至少一个从节点,在每一个消息中间件为至少一个主节点设置共用队列,为每一个从节点设置对应的队列,至少一个消息中间件中任意消息中间件中的每一个从节点对应的队列作为当前队列,接收至少一个主节点中任意主节点发送的消息命令;当前队列将消息命令发送给对应的当前从节点;共用队列接收当前从节点发送的消息命令对应的执行结果,并将执行结果发送给至少一个主节点中任意一个主节点,由于消息中间件本身适用于多种网络,那么处于不同网络中的各个主节点和各个从节点能够通过消息中间件中的队列发送和接收信息,实现了跨网络远程调用。

在本发明一个实施例中,为了进一步提高不同网络中节点间的调用,上述方法进一步包括:确定每一个消息中间件中同一个从节点对应的队列间的镜像关系;在步骤103之后,步骤104之前,进一步包括:根据同一个从节点对应的队列间的镜像关系,将消息命令镜像到当前队列对应的镜像队列,当当前从节点与当前队列相连时,则执行步骤104;当当前从节点与当前队列对应的镜像队列相连时,则镜像队列将消息命令发送给对应的当前从节点。例如:在该方法中设置有2个消息中间件,其中,消息中间件1中从节点1对应的队列a与消息中间件2中从节点1对应的队列a’具有镜像关系,可以设置消息中间件1与主节点位于同一网络下,消息中间件2与从节点1位于同一网络下,那么,当消息中间件1中的队列a接收到消息命令时,将消息命令镜像到消息中间件2中的队列a’中,那么,从节点1可以接收队列a’发送的消息命令,当从节点1能够与消息中间件1通信时,其还可以直接接收消息中间件1中的队列a发送的消息命令,值得说明的是,具有镜像关系的队列时刻保持一致,即中存储或删除的消息命令一致。

在本发明一个实施例中,为了保障不同网络间的调用,上述方法进一步包括:确定每一个消息中间件中共用队列间的镜像关系;步骤105的具体实施方式,包括:任意消息中间件中的共用队列接收当前从节点发送的消息命令对应的执行结果,并根据共用队列间的镜像关系,将执行结果镜像到每一个消息中间件中的共用队列。例如:在该方法中设置有2个消息中间件,其中,消息中间件1中共用队列b与消息中间件2中共用队列b’具有镜像关系,可以设置消息中间件1与主节点2位于同一网络下,消息中间件2与从节点1位于同一网络下,那么,当消息中间件2中的共用队列b’接收到从节点1发送的执行结果时,将执行结果镜像到消息中间件1中的共用队列b中,那么,主节点2可以接收共用队列b发送的执行结果,当主节点2能够与消息中间件2通信时,其还可以直接接收消息中间件2中的共用队列b发送的执行结果,值得说明的是,具有镜像关系的共用队列时刻保持一致,即中存储或删除的执行结果一致。

在本发明一个实施例中,为了进一步提高跨网络调用的可行性,消息命令,包括:Json格式封装的消息命令;执行结果,包括:Json格式封装的执行结果,该Json格式能够被不同网络下的节点所解析,从而避免了数据跨网络传输过程中造成的格式错误。

如图2所示,本发明实施例提供一种消息中间件集群,包括:至少两个包含消息中间件的服务器,其中,

至少两个包含消息中间件201的服务器202间相连,其中,每一个包含消息中间件201的服务器202,与外设的至少一个主节点和至少一个从节点相连,用于在包含的消息中间件中,为外设的至少一个主节点设置共用队列,为外设的每一个从节点设置对应的队列,利用每一个从节点对应的队列接收外设的至少一个主节点中任意主节点发送的消息命令,将消息命令发送给对应的外设的从节点,利用共用队列接收外设的从节点发送的消息命令对应的执行结果,并将执行结果发送给外设的至少一个主节点中任意一个主节点。

在本发明另一个实施例中,至少两个包含消息中间件201的服务器202间具有镜像关系,其中,任意一个包含消息中间件201的服务器202,用于当利用任意从节点对应的队列接收到消息命令时,根据镜像关系,将消息命令镜像到每一个包含消息中间件的服务器中对应的镜像队列中。例如:消息中间件1中的从节点1对应的队列a将其接收到的消息命令,镜像到消息中间件2中的从节点1对应的队列a’中等等。

在本发明又一实施例中,任意一个包含消息中间件201的服务器202,用于当利用共用队列接收到执行结果时,根据镜像关系,将执行结果镜像到每一个包含消息中间件的服务器中的共用队列中。例如:消息中间件1中的共用队列b将其接收到的执行结果,镜像到消息中间件2中的共用队列b’中等等。

如图3所示,本发明实施例提供一种远程调控系统,包括:上述任意一种消息中间件集群301、至少一个主节点302和至少一个从节点303,其中,

至少一个主节点302中,每一个主节点302与消息中间件集群301中每一个包含消息中间件的服务器相连,用于向任意一个消息中间件中的目标从节点对应的队列发送消息命令,并接收任意一个消息中间件中的共用队列发送的执行结果;

至少一个从节点303中,每一个从节点303,与消息中间件集群301中每一个包含消息中间件的服务器相连,用于接收任意一个消息中间件中该从节点对应的队列发送的消息命令,并执行该消息命令,生成执行结果,将该执行结果发送给任意一个消息中间件中的共用队列。

在本发明另一实施例中,每一个主节点302,用于将接收到的执行结果备份到所有主节点302中,例如:在该系统中包含主节点1和主节点2,当主节点1接收到执行结果时,将该执行结果备份到主节点2中。

在本发明又一实施例中,每一个主节点302,用于为发送的消息命令生成对应的ID,根据ID将消息命令发送给至少一个从节点303对应的队列。

在本发明另一实施例中,每一个主节点302,用于通过json格式对消息命令进行封装,将json格式的消息命令发送给任意一个消息中间件中的目标从节点对应的队列,并接收json格式的执行结果;

每一个从节点303,包含Executor进程,作为目标节点时,接收json格式的消息命令,并解析json格式的消息命令,并将解析后的消息命令发送给Executor进程,生成执行结果,并通过json格式对执行结果进行封装,并将封装后的执行结果发送给任意消息中间件中的共用队列。

为了更加清楚地阐述系统中消息中间件集群、主节点及从节点之间的信息交互,以图4所示的远程调用系统为例,展开说明远程调用方法,如图5所示,该远程调用方法可以包括以下步骤:

步骤501:设置至少一个消息中间件,确定至少一个主节点和至少一个从节点;

如图4所示,在消息中间件集群(401)中包含两个消息中间件分别为消息中间件1(4011)和消息中间件2(4012),该确定出具有两个主节点分别为主节点1(402)和主节点2(403),其中,主节点1(402)位于网络1中、主节点2(403)位于网络2中,至少一个从节点包括:网络3中的从节点1(404)和从节点2(405),网络4中的从节点3(406)和从节点4(407),网络5中的从节点5(408)和从节点6(409)。

步骤502:在每一个从节点中设置Executor进程;

如图4所示,在从节点1(404)、从节点2(405)、从节点3(406)、从节点4(407)、从节点5(408)和从节点6(409)中分别设置Executor进程。

步骤503:在每一个消息中间件为至少一个主节点设置共用队列,为每一个从节点设置对应的队列;

如图4所示,在消息中间件1中为主节点1和主节点2设置共用队列a,为从节点1设置对应的队列b、为从节点2设置对应的队列c、为从节点3设置对应的队列d、为从节点4设置对应的队列e、为从节点5设置对应的队列f及为从节点6设置对应的队列g;在消息中间件2中为主节点1和主节点2设置共用队列a’,为从节点1设置对应的队列b’、为从节点2设置对应的队列c’、为从节点3设置对应的队列d’、为从节点4设置对应的队列e’、为从节点5设置对应的队列f’及为从节点6设置对应的队列g’。

步骤504:确定每一个消息中间件中同一个从节点对应的队列间的镜像关系;

如图4所示,队列b和队列b’为镜像关系;队列c和队列c’为镜像关系;队列d和队列d’为镜像关系;队列e和队列e’为镜像关系;队列f和队列f’为镜像关系;队列g和队列g’为镜像关系。

步骤505:确定每一个消息中间件中共用队列间的镜像关系;

如图4所示,共用队列a和共用队列a’为镜像关系。

步骤506:任意主节点通过json格式封装消息命令,并为封装后的消息命令生成ID;

如图4所示,主节点1通过json格式封装消息命令1,为封装的消息命令1生成ID。

步骤507:根据ID,发送封装后的消息命令给集群中目标队列;

步骤508:目标队列接收任意主节点发送的封装后的消息命令;

在步骤507和步骤508中,对于一类型的业务来说,执行命令的从节点可能不止一个,那么通过该ID,可以将封装后的消息命令发送给目标从节点对应的目标队列。例如:在该步骤中,确定的目标队列为图4所示的队列b,则队列b接收主节点1或者主节点2发送的封装后的消息命令。

步骤509:根据同一个从节点对应的队列间的镜像关系,将封装后的消息命令镜像到目标队列对应的镜像队列,当当前从节点与目标队列相连时,执行步骤510,当当前从节点与镜像队列相连时,执行步骤511;

步骤510:目标队列将封装后的消息命令发送给对应的当前从节点,并执行步骤512;

步骤511:镜像队列将封装后的消息命令发送给对应的当前从节点;

步骤509至步骤511的过程:如队列a将封装后的消息命令镜像到队列b’中,当从节点1与队列b相连时,执行队列b发送封装后的消息命令给从节点1;当从节点1与队列b’相连时,执行队列b’发送封装后的消息命令给从节点1;值得说明的是,当队列b或者队列b’发送封装后的消息命令之后,将该消息命令从队列b和队列b’中删除,起到了镜像作用。

步骤512:当前从节点接收封装后的消息命令,解析封装后的消息命令;

步骤513:Executor进程执行解析后的消息命令,生成执行结果;

步骤514:通过json格式对执行结果进行封装;

步骤515:将封装后的执行结果发送给任意消息中间件中的共用队列;

步骤516:根据共用队列间的镜像关系,将封装后的执行结果镜像到每一个消息中间件中的共用队列;

步骤517:任意共用队列将执行结果发送给至少一个主节点中任意一个主节点;

步骤518:任意一个主节点将接收到的执行结果备份到其他主节点中。

步骤515至步骤518的具体过程:如图4所示,从节点2将执行结果发送给共用队列a,则共用队列a将接收到的执行结果镜像到共用队列a’中,如果主节点1与共用队列a’相连,则主节点1接收共用队列a’发送的执行结果,主节点1将执行结果备份到主节点2中,保障了信息的安全性。

根据上述方案,本发明的各实施例,至少具有如下有益效果:

1.通过设置至少一个消息中间件,确定至少一个主节点和至少一个从节点,在每一个消息中间件为至少一个主节点设置共用队列,为每一个从节点设置对应的队列,至少一个消息中间件中任意消息中间件中的每一个从节点对应的队列作为当前队列,接收至少一个主节点中任意主节点发送的消息命令;当前队列将消息命令发送给对应的当前从节点;共用队列接收当前从节点发送的消息命令对应的执行结果,并将执行结果发送给至少一个主节点中任意一个主节点,由于消息中间件本身适用于多种网络,那么处于不同网络中的各个主节点和各个从节点能够通过消息中间件中的队列发送和接收信息,实现了跨网络远程调用。

2.通过确定每一个消息中间件中同一个从节点对应的队列间的镜像关系和每一个消息中间件中共用队列间的镜像关系,根据同一个从节点对应的队列间的镜像关系,将消息命令镜像到当前队列对应的镜像队列;当当前从节点与当前队列相连时,则执行当前队列将消息命令发送给对应的当前从节点;当前从节点与当前队列对应的镜像队列相连时,则镜像队列将消息命令发送给对应的当前从节点,同时,任意消息中间件中的共用队列接收当前从节点发送的消息命令对应的执行结果,并根据共用队列间的镜像关系,将执行结果镜像到每一个消息中间件中的共用队列,通过该镜像关系使得主节点与从节点间可以通过不同的消息中间件实现调用,确保远程调用的稳定,另外,通过Json格式封装消息命令和执行结果,保障不同网络调用过程中,消息的可读性。

3.通过为消息命令生成对应的ID,根据ID,将消息命令发送给至少一个从节点对应的队列,即当ID对应多个从节点时,将消息命令发送给这多个从节点各自对应的队列,从而保证调用的高可靠性。

需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个〃·····”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。

最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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