一种远程服务调用方法、装置和系统与流程

文档序号:14124656阅读:265来源:国知局
一种远程服务调用方法、装置和系统与流程

本发明涉及服务调用领域,具体涉及一种远程服务调用方法、装置和系统。



背景技术:

随着用户需求的增长,应用功能不断增多,如何使得应用功能得到有效的技术支持是一个重要问题。原有的应用框架无法满足功能的拓展和增强,纯粹靠提升计算设备的性能并不能彻底解决该问题。因此出现了将单一应用框架按功能拆分为多个服务的新框架,随之也就出现了如何管理这些服务的新问题。现有技术中采用服务消费者直接从服务提供者调用服务的方法,这就需要主动为服务消费者配置服务提供者的端口、地址等多种信息,非常的不便。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的远程服务调用方法、装置和系统。

依据本发明的一个方面,提供了一种远程服务调用方法,包括:

接收服务提供者发送的包含服务配置信息的服务注册请求;

将所述服务配置信息保存为相应服务的服务注册信息;

当接收到服务消费者发送的服务注册信息获取请求时,根据所述服务注册信息获取请求查找出相应的服务注册信息,并返回给所述服务消费者,以使所述服务消费者根据所述服务注册信息,从一个或多个服务提供者处调用相应的服务。

可选地,所述将所述服务配置信息保存为相应服务的服务注册信息包括:

根据所述配置提供信息中的服务名称,在服务列表中查找相应的服务名称节点;

若查找到,则在该服务名称节点下建立与该服务提供者对应的子节点,在该子节点下建立服务注册信息子节点,在该服务注册信息子节点中保存生成的服务注册信息;

若未查找到,则建立服务名称节点,在该服务名称节点下建立与该服务提供者对应的子节点,在该子节点下新建服务注册信息子节点,在该服务注册信息子节点中保存生成的服务注册信息;

所述根据所述服务注册信息获取请求查找出相应的服务注册信息包括:

根据所述服务注册信息请求中的服务名称,在服务列表中查找相应的服务名称节点;

从查找到的服务名称节点下的所有服务注册信息子节点中提取服务注册信息。

可选地,当所述查找到的服务名称节点中的信息发生改变时,重新从该服务名称节点下的所有服务注册信息子节点中提取服务注册信息发送给所述服务消费者,以使所述服务消费者根据本次接收到的服务注册信息更新本地的服务注册信息。

可选地,与所述服务提供者和/或所述服务消费者之间数据的数据通信采用长连接,以及数据通信的序列化框架是可配置的。

依据本发明的另一方面,提供了一种远程服务调用装置,包括:

通信单元,用于接收服务提供者发送的包含服务配置信息的服务注册请求;以及用于接收服务消费者发送的服务注册信息获取请求;

注册单元,用于将所述服务配置信息保存为相应服务的服务注册信息;以及用于根据所述服务注册信息获取请求查找出相应的服务注册信息;

所述通信单元,还用于将所述查找出的服务注册信息返回给所述服务消费者,以使所述服务消费者根据所述服务注册信息,从一个或多个服务提供者处调用相应的服务。

可选地,所述注册单元,用于根据所述配置提供信息中的服务名称,在服务列表中查找相应的服务名称节点;若查找到,则在该服务名称节点下建立与该服务提供者对应的子节点,在该子节点下建立服务注册信息子节点,在该服务注册信息子节点中保存生成的服务注册信息;若未查找到,则建立服务名称节点,在该服务名称节点下建立与该服务提供者对应的子节点,在该子节点下新建服务注册信息子节点,在该服务注册信息子节点中保存生成的服务注册信息;以及用于根据所述服务注册信息请求中的服务名称,在服务列表中查找相应的服务名称节点;从查找到的服务名称节点下的所有服务注册信息子节点中提取服务注册信息。

可选地,所述注册单元,还用于在所述查找到的服务名称节点中的信息发生改变时,重新从该服务名称节点下的所有服务注册信息子节点中提取服务注册信息;

所述通信单元,还用于将重新提取出的服务注册信息发送给所述服务消费者,以使所述服务消费者根据本次接收到的服务注册信息更新本地的服务注册信息。

可选地,所述通信单元与所述服务提供者和/或所述服务消费者之间数据的数据通信采用长连接,以及数据通信的序列化框架是可配置的。

依据本发明的又一方面,提供了一种远程服务调用系统,包括:

如上述任一项所述的远程服务调用装置,一个或多个服务提供装置,一个或多个服务消费装置;

所述服务提供装置,用于将服务配置信息发送给所述远程服务调用装置;

所述服务消费装置,用于向所述远程服务调用装置发送服务注册信息获取请求,接收并保存所述远程服务调用装置返回的服务注册信息;以及用于在需要调用服务时,根据相应的服务注册信息从一个或多个服务提供装置调用相应的服务。

可选地,所述远程服务调用装置部署在分布式集群上,所述远程服务调用装置、服务提供装置、服务消费装置之间数据通信采用的序列化框架是可配置的;

所述服务提供装置,还用于通过长连接将服务配置信息发送给所述远程服务调用装置,以及通过所述长连接监听根据该服务配置信息生成的服务注册信息;当所述长连接断开时,重新与所述远程服务装置建立长连接;当监听到所述服务注册信息被删除时,重新将所述服务配置信息发送给所述远程服务调用装置;

所述远程服务调用装置,还用于在与任一服务提供装置间建立的长连接断开达到预设时间时,删除与该服务提供装置对应的服务注册信息。

由上述可知,本发明的技术方案,将服务提供者发送的服务注册请求中的服务配置信息保存为相应服务的服务注册信息,从而在接收到服务消费者发送的服务注册信息获取请求时,根据服务注册信息获取请求查找出相应的服务注册信息,并返回给服务消费者,以使服务消费者根据服务注册信息,从一个或多个服务提供者处调用相应的服务。根据该技术方案可以建立并维护一个服务注册中心,只需要服务消费者确定所要调用的服务名称和服务注册中心地址,即可向服务注册中心地址发送包含服务名称的服务注册信息获取请求,获取服务注册信息并根据该信息调用相应的服务,因而方便了服务消费者的配置,实现了服务的自动发现。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明一个实施例的一种远程服务调用方法的流程示意图;

图2示出了根据本发明一个实施例的一种远程服务调用装置的结构示意图;以及

图3示出了根据本发明一个实施例的一种远程服务调用系统的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1示出了根据本发明一个实施例的一种远程服务调用方法的流程示意图,如图1所示,该方法包括:

步骤s110,接收服务提供者发送的包含服务配置信息的服务注册请求;所述服务配置信息至少包括:服务名称。

其中,服务配置信息还可以包括如下中的一种或多种:服务地址、服务端口、服务内容、服务描述信息、服务内容。

步骤s120,将服务配置信息保存为相应服务的服务注册信息。

例如,可以维护一个服务列表将服务注册信息保存在其中,也就是进行服务注册。

步骤s130,当接收到服务消费者发送的服务注册信息获取请求时,根据服务注册信息获取请求中的服务名称查找出相应的服务注册信息,并返回给服务消费者,以使服务消费者根据服务注册信息,从一个或多个服务提供者处调用相应的服务。

可见,图1所示的方法,将服务提供者发送的服务注册请求中的服务配置信息保存为相应服务的服务注册信息,从而在接收到服务消费者发送的服务注册信息获取请求时,根据服务注册信息获取请求查找出相应的服务注册信息,并返回给服务消费者,以使服务消费者根据服务注册信息,从一个或多个服务提供者处调用相应的服务。根据该技术方案可以建立并维护一个服务注册中心,只需要服务消费者确定所要调用的服务名称和服务注册中心地址,即可向服务注册中心地址发送包含服务名称的服务注册信息获取请求,获取服务注册信息并根据该信息调用相应的服务,因而方便了服务消费者的配置,实现了服务的自动发现。

在本发明的一个实施例中,图1所示的方法中,将服务配置信息保存为相应服务的服务注册信息包括:根据配置提供信息中的服务名称,在服务列表中查找相应的服务名称节点;若查找到,则在该服务名称节点下建立与该服务提供者对应的子节点,在该子节点下建立服务注册信息子节点,在该服务注册信息子节点中保存生成的服务注册信息;若未查找到,则建立服务名称节点,在该服务名称节点下建立与该服务提供者对应的子节点,在该子节点下新建服务注册信息子节点,在该服务注册信息子节点中保存生成的服务注册信息;根据服务注册信息获取请求查找出相应的服务注册信息包括:根据服务注册信息请求中的服务名称,在服务列表中查找相应的服务名称节点;从查找到的服务名称节点下的所有服务注册信息子节点中提取服务注册信息。

举例而言,可以采用zookeeper维护一个服务注册中心。zookeeper是一个分布式的应用程序协调服务,可以对数据进行存储和管理,其特点在于,数据结构具有层次,因此非常适于本实施例的具体实施。

例如,在一个分布式集群中部署zookeeper,当集群中的任一台机器接收到包含服务配置信息的服务注册请求时,都可以把该服务注册请求中的配置信息按照指定格式存储到相应的节点下。试看下例:

服务注册中心中保存的服务列表中,一级节点为应用名称,如应用a、应用b等,以应用a为例,在该应用节点下一级的节点为该应用所使用的服务,例如日志服务、用户服务等。日志服务的下一级节点是与具体的服务提供者对应的,每个服务提供者对应独立的一个节点。在每个节点下设置服务注册信息子节点,用于存储服务注册信息。例如id为koii4684h8f8gg的服务提供者向服务注册中心发送服务注册请求,服务注册中心根据服务注册请求中的服务配置信息,判断出该服务提供者提供的是应用a的日志服务,那么就在服务列表中进行查找,如果发现与应用a对应的节点的子节点中存在日志服务,那么就在该子节点中创建名称为koii4684h8f8gg的次一级子节点,在该子节点下再创建服务注册信息子节点,保存服务配置信息。如果发现与应用a对应的节点的子节点中不存在日志服务,那么就在创建日志服务节点作为与应用a对应的节点的子节点,再在该节点下创建名称为koii4684h8f8gg的次一级子节点,在该子节点下再创建服务注册信息子节点,保存服务配置信息。

而对于服务消费者而言,其只需明确所要调用的服务,以及获知服务注册中心的地址即可生成服务注册信息获取请求,例如,服务消费者希望调用应用a的日志服务,那么服务注册中心根据相应的服务注册请求查找服务列表,发现应用a的日志服务子节点下,还存在koii4684h8f8gg、ukiih46844068rj等子节点,这些子节点下都存在包含服务注册信息的子节点,那么就将这些子节点中的服务注册信息都提取出来返回给服务消费者。这样,服务消费者就获得了可以提供应用a的日志服务的所以服务提供者的服务注册信息,根据这些信息,服务消费者可以根据相应的策略,在需要调用应用a的日志服务时,从一个或多个服务提供者那里调用相应的服务,例如采用随机选取或轮询等负载均衡的方式将根据服务注册信息构建的服务调用请求转发至相应的服务提供者。

本实施例的有益效果在于:数据结构的可拓展性强,由于应用的功能是随着用户需求的变化而增减的,对应地就要删除或增加一些服务,那么对于需要删除的服务,可以直接删除与该服务对应的节点下的所有数据;对于需要增加的服务,也可以方便地新增与该服务对应的节点,完全不会影响其他服务名称节点中的数据。同理,服务提供者的增加或删除也可以方便地实现。

对于服务消费者而言,其只需要向服务注册中心发送一次请求,就可以将所请求的服务注册信息缓存在本地,不需要反复地访问服务注册中心,降低了资源损耗和服务注册中心的压力。但在服务提供者或服务本身有变动的情况下,例如服务提供者ukiih46844068rj不再提供应用a的日志服务,这时如果服务消费者还是根据缓存中的服务注册信息生成服务调用请求,就有可能向服务提供者ukiih46844068rj请求调用应用a的日志服务,这样就会失败。因此在本发明的一个实施例中,上述方法中,当服务名称节点中的信息发生改变时,重新从该服务名称节点下的所有服务注册信息子节点中提取服务注册信息发送给服务消费者,以使服务消费者根据本次接收到的服务注册信息更新本地的服务注册信息。

在本实施例中服务消费者监听相应的服务名称节点,例如,服务消费者希望调用应用a的日志服务,向服务注册中心发送了获取应用a的日志服务的服务注册信息的请求后,就监听与应用a的日志服务对应的节点中的数据是否发生改变。当服务名称节点中的信息发生改变时,服务注册中心就重新从该服务名称节点下的所有服务注册信息子节点中提取服务注册信息发送给服务消费者,服务消费者根据本次接收到的服务注册信息,更新本地缓存中的服务注册信息,例如,如果服务提供方ukiih46844068rj不再提供应用a的日志服务,就从缓存中剔除相应的服务注册信息。

在本发明的一个实施例中,图1所示的方法中,与服务提供者和/或服务消费者之间数据的数据通信采用长连接,以及数据通信的序列化框架是可配置的。

在远程服务调用中,数据通信时发送方会先对数据进行序列化处理,转为二进制数据,再由接收方对接收到的二进制数据进行反序列化处理。序列化处理方式并不是本发明的重点,现有技术中很多序列化框架都可以实现,例如thrift就是一种支持多编程语言的序列化框架。考虑到用户使用的序列化框架各有差异,因此将在本实施例中进行数据通信的序列化框架设置为可配置的,即松耦合的。这样可以方便地对序列化框架进行替换、升级和扩展。而必要的数据如服务注册中心的地址可以以通用的数据格式写成模板,便于第三方序列化框架的应用。举例而言,可以利用zookeeper的可拓展性强的优点,利用zookeeper维护一个服务注册中心。zookeeper中客户端和服务器之间的数据通信是采用长连接的,这样如果服务注册中心中的服务名称节点中的信息发生了改变,可以通过长连接将服务注册信息重新下发至服务消费者,非常方便。

图2示出了根据本发明一个实施例的一种远程服务调用装置的结构示意图,如图2所示,远程服务调用装置200包括:

通信单元210,用于接收服务提供者发送的包含服务配置信息的服务注册请求;以及用于接收服务消费者发送的服务注册信息获取请求。所述服务配置信息至少包括:服务名称。

注册单元220,用于将服务配置信息保存为相应服务的服务注册信息;以及用于根据服务注册信息获取请求中的服务名称查找出相应的服务注册信息。

通信单元210,还用于将查找出的服务注册信息返回给服务消费者,以使服务消费者根据服务注册信息,从一个或多个服务提供者处调用相应的服务。

可见,图2所示的装置,通过各单元的相互配合,将服务提供者发送的服务注册请求中的服务配置信息保存为相应服务的服务注册信息,从而在接收到服务消费者发送的服务注册信息获取请求时,根据服务注册信息获取请求查找出相应的服务注册信息,并返回给服务消费者,以使服务消费者根据服务注册信息,从一个或多个服务提供者处调用相应的服务。根据该技术方案可以建立并维护一个服务注册中心,只需要服务消费者确定所要调用的服务名称和服务注册中心地址,即可向服务注册中心地址发送包含服务名称的服务注册信息获取请求,获取服务注册信息并根据该信息调用相应的服务,因而方便了服务消费者的配置,实现了服务的自动发现。

在本发明的一个实施例中,图2所示的装置中,注册单元220,用于根据配置提供信息中的服务名称,在服务列表中查找相应的服务名称节点;若查找到,则在该服务名称节点下建立与该服务提供者对应的子节点,在该子节点下建立服务注册信息子节点,在该服务注册信息子节点中保存生成的服务注册信息;若未查找到,则建立服务名称节点,在该服务名称节点下建立与该服务提供者对应的子节点,在该子节点下新建服务注册信息子节点,在该服务注册信息子节点中保存生成的服务注册信息;以及用于根据服务注册信息请求中的服务名称,在服务列表中查找相应的服务名称节点;从查找到的服务名称节点下的所有服务注册信息子节点中提取服务注册信息。

在本发明的一个实施例中,上述装置中,注册单元220,还用于在查找到的服务名称节点中的信息发生改变时,重新从该服务名称节点下的所有服务注册信息子节点中提取服务注册信息;通信单元210,还用于将重新提取出的服务注册信息发送给服务消费者,以使服务消费者根据本次接收到的服务注册信息更新本地的服务注册信息。

在本发明的一个实施例中,图2所示的装置中,通信单元210与服务提供者和/或服务消费者之间数据的数据通信采用长连接,以及数据通信的序列化框架是可配置的。

需要说明的是,上述各装置实施例的具体实施方式与前述对方法实施例的具体实施方式相同,在此不再赘述。

图3示出了根据本发明一个实施例的一种远程服务调用系统的结构示意图,如图3所示,远程服务调用系统300包括:

如上述任一实施例中的远程服务调用装置310,一个或多个服务提供装置320,一个或多个服务消费装置330。

服务提供装置320,用于将服务配置信息发送给远程服务调用装置310。

服务消费装置330,用于向远程服务调用装置310发送服务注册信息获取请求,接收并保存远程服务调用装置310返回的服务注册信息;以及用于在需要调用服务时,根据相应的服务注册信息从一个或多个服务提供装置320调用相应的服务。

在本发明的一个实施例中,图3所示的系统中,远程服务调用装置310部署在分布式集群上,远程服务调用装置310、服务提供装置320、服务消费装置330之间数据通信采用的序列化框架是可配置的;服务提供装置320,还用于通过长连接将服务配置信息发送给远程服务调用装置,以及通过长连接监听根据该服务配置信息生成的服务注册信息;当长连接断开时,重新与远程服务装置建立长连接;当监听到服务注册信息被删除时,重新将服务配置信息发送给远程服务调用装置;远程服务调用装置310,还用于在与任一服务提供装置间建立的长连接断开达到预设时间时,删除与该服务提供装置对应的服务注册信息。

举例而言,在本实施例中远程服务调用装置部署在分布式集群中的多台机器上并由zookeeper进行管理。各台机器上所保存的服务注册信息是相同的,当一台机器上的服务注册信息被更新时,其他机器上的服务注册信息也会被更新。服务提供装置在发送包含服务配置信息的服务注册请求时,实际是与分布式集群中的一台机器建立长连接,但会获得服务提供装置提供的一个唯一的全局sessionid,当由于网络不稳等原因,长连接断开后,根据zookeeper的规则,服务提供装置可以从地址列表中选取其他地址再进行建立连接,建立的长连接基于原sessionid,就可以认为服务提供装置与远程服务调用装置仍然维持原长连接。那么如果在与任一服务提供装置间建立的长连接断开达到预设时间(session_timeout)后,服务提供装置会删除与该服务提供装置对应的服务注册信息。那么如果该服务提供装置在预设时间后重新建立与远程服务装置建立长连接(此时原sessionid已不可用,会获得一个新的sessionid),就会主动重新将服务配置信息发送给远程服务调用装置,重新进行服务的注册。如果在另一预设时间后该服务提供装置还无法与远程服务装置建立长连接,那么该服务提供装置还可以进行报警处理。

综上所述,本发明的技术方案,将服务提供者发送的服务注册请求中的服务配置信息保存为相应服务的服务注册信息,从而在接收到服务消费者发送的服务注册信息获取请求时,根据服务注册信息获取请求查找出相应的服务注册信息,并返回给服务消费者,以使服务消费者根据服务注册信息,从一个或多个服务提供者处调用相应的服务。根据该技术方案可以建立并维护一个服务注册中心,只需要服务消费者确定所要调用的服务名称和注册中心地址,即可向服务注册中心地址发送包含服务名称的服务注册信息获取请求,获取服务注册信息并根据该信息调用相应的服务,因而方便了服务消费者的配置,实现了服务的自动发现;同时服务注册中心根据保存的服务注册信息还可以方便地对服务进行管理。

以上所述,仅为本发明的具体实施方式,在本发明的上述教导下,本领域技术人员可以在上述实施例的基础上进行其他的改进或变形。本领域技术人员应该明白,上述的具体描述只是更好的解释本发明的目的,本发明的保护范围以权利要求的保护范围为准。

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