CN114401303A - 应用于微服务的服务注册与发现方法、***和装置 - Google Patents
应用于微服务的服务注册与发现方法、***和装置 Download PDFInfo
- Publication number
- CN114401303A CN114401303A CN202111565825.4A CN202111565825A CN114401303A CN 114401303 A CN114401303 A CN 114401303A CN 202111565825 A CN202111565825 A CN 202111565825A CN 114401303 A CN114401303 A CN 114401303A
- Authority
- CN
- China
- Prior art keywords
- service
- internet protocol
- port
- cache
- registration
- 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
- 238000000034 method Methods 0.000 title claims abstract description 57
- 230000008569 process Effects 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 15
- 230000004044 response Effects 0.000 claims description 8
- 238000012544 monitoring process Methods 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000000605 extraction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
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/14—Session management
-
- 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/2866—Architectures; Arrangements
- H04L67/30—Profiles
-
- 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/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开了一种应用于微服务的服务注册与发现方法、***和装置,本方法通过响应于服务端的服务启动,获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册;响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务。本申请解决相关技术中服务的管理和控制复杂繁琐的技术问题,通过自动化的方式来注册服务,自动发现服务。避免传统的手工写死ip所带来的巨大人工成本以及出错概率。
Description
技术领域
本申请属于计算机技术领域,具体而言,涉及一种应用于微服务的服务注册与发现方法、***、电子设备及存储介质。
背景技术
在微服务时代,我们所有的服务都被尽量拆分成最小的粒度,原先所有的服务都在混在1个server里,现在就被按照功能或者对象拆分成N个服务模块,服务的管理和控制变得异常的复杂和繁琐,人工维护难度变大。
所以急需一种自动化的方式来注册服务,自动发现服务,避免手工写死ip所带来的巨大人工成本以及出错概率。
发明内容
本申请实施例的第一目的在于提供一种应用于微服务的服务注册与发现方法,旨在解决上述现有技术存在的至少一个问题。
本申请实施例是这样实现的,一种应用于微服务的服务注册与发现方法,包括:
响应于服务端的服务启动,获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册;
响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务。
在一个实施例中,在获取所述服务的服务名、互联网协议和服务端口之前,还包括:获取服务启动命令中的服务端口,检查所述服务端口是否被占用,若被占用则报错退出,若没有被占用,则获取所述服务的服务进程,启动所述服务对应的进程数。
在一个实施例中,所述获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册包括:获取配置文件中的服务模块列表,识别当前服务对应的服务模块,启动线程将所述服务模块写入缓存中;获取配置文件中的所述当前服务的所述互联网协议参数;生成一个随机的对象标识作为所述当前服务的服务编号唯一标识,以所述服务编号唯一标识为密钥,以所述互联网协议参数和所述服务端口为值设置所述缓存的键值对;遍历识别出的所有所述服务模块,设置服务模块在缓存中的所述服务名,完成服务注册。
在一个实施例中,还包括:在获取配置文件中的所述当前服务的所述互联网协议参数时,若配置文件中没有所述当前服务的所述互联网协议参数,则获取当前服务器的互联网协议得到所述互联网协议参数。
在一个实施例中,还包括:响应于服务端的服务因故障退出,遍历缓存中的所述服务对应的所有服务模块,删除所有服务模块;发布服务下线通知消息至客户端,使得客户端监听到消息后,删除连接池中所述服务模块的连接。
在一个实施例中,所述响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务包括:响应于接收到客户端发起的服务调用请求,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,从所述连接池中获取与所述目标服务的连接。
在一个实施例中,所述获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务包括:获取所述目标服务的服务名在缓存中的任一所述服务编号唯一标识,根据所述服务编号唯一标识获取所述服务名对应的所述服务模块的所述互联网协议参数和所述服务端口,以建立与所述目标服务的连接调用所述目标服务。
本申请实施例的另一目的在于提供一种应用于微服务的服务注册与发现***,包括:
服务注册模块,用于响应于服务端的服务启动,获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册;
服务发现模块,用于服务响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务。
本申请实施例的又一目的在于提供一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行所述应用于微服务的服务注册与发现方法的步骤。
本申请实施例的再一目的在于一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行所述应用于微服务的服务注册与发现方法的步骤。
本申请实施例提供的一种应用于微服务的服务注册与发现方法、***、电子设备及存储介质,通过响应于服务端的服务启动,获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册;响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务。由此,通过自动化的方式来注册服务,自动发现服务。避免传统的手工写死ip所带来的巨大人工成本以及出错概率。使部署成本降到最低,仅使用最少且最常见的缓存或数据库来达到自动注册和发现服务的功能。用简练易懂的代码和框架实现目标,将理解成本降到最低。
附图说明
图1为本申请一个实施例提供的应用于微服务的服务注册与发现方法的实现流程;
图2为本申请一个实施例提供的应用于微服务的服务注册与发现***的主要模块示意图;
图3为本申请实施例提供的可以应用于其中的示例性***架构图;
图4为适于用来实现本申请实施例的终端设备或服务器的计算机***的结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在本申请实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请实施例和所附权利要求书中所使用的单数形式的“一种”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。
需要指出的是,在不冲突的情况下,本申请中的实施例以及实施例中的特征可以互相组合。
为了进一步阐述本申请为实现预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本申请的具体实施方式、结构、特征及其功效,详细说明如下。
在微服务时代,所有的服务都被尽量拆分成最小的粒度,原先所有的服务都在混在1个server里,现在就被按照功能或者对象拆分成N个服务模块,服务的管理和控制变得异常的复杂和繁琐,人工维护难度变大。
一般的服务注册发现组件容易出现部署繁琐,成本较高的问题。一套传统的服务发现组件,需要产生额外的部署资源,以及部署操作本身也非常繁琐。在服务器资源有限、人力成本有限的情况下并不适用。且其组件复杂,内部逻辑复杂繁琐,对于不熟悉的人员理解成本较高,且大多由go或java语言实现,在java生态中使用较为便利,但对于python语言生态不够友好,使用起来极为复杂。
所以急需一种自动化的方式来注册服务,自动发现服务,避免手工写死ip所带来的巨大人工成本以及出错概率。
图1示出了本申请一个实施例提供的一种应用于微服务的服务注册与发现方法的实现流程,为了便于说明,仅示出与本申请实施例相关的部分,详述如下:
一种应用于微服务的服务注册与发现方法,包括以下步骤:
S101:响应于服务端的服务启动,获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册;
S102:响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务。
在步骤S101中:响应于服务端的服务启动,获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册。由此实现自动化服务注册,避免手工写死互联网协议(ip)所带来的巨大人工成本以及出错概率。
在这里,服务注册主要针对RPC服务的服务端,服务端在服务启动时,将自己服务的服务名、ip和服务端口写入缓存中即为注册成功,其中缓存可以为Redis,也可以为其他缓存或数据库,比如基于MongoDB/Mysql/Memcached的RPC服务注册与服务发现。
具体的,在服务端的服务启动时,可以获取该服务的服务名、IP和服务端口,将服务名、IP和服务端口写入Redis中,完成服务注册。以便于后续通过服务名进行自动化发现和调用服务。
在一个实施例中,在获取所述服务的服务名、互联网协议和服务端口之前,还包括:获取服务启动命令中的服务端口,检查所述服务端口是否被占用,若被占用则报错退出,若没有被占用,则获取所述服务的服务进程,启动所述服务对应的进程数。由此,为获取所述服务的服务名、互联网协议和服务端口做准备,避免因服务被占用而获取服务名、互联网协议和服务端口失败导致服务注册失败。
具体的,所述获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册包括:获取配置文件中的服务模块列表,识别当前服务对应的服务模块,启动线程将所述服务模块写入缓存中;获取配置文件中的所述当前服务的所述互联网协议参数;生成一个随机的对象标识作为所述当前服务的服务编号唯一标识,以所述服务编号唯一标识为密钥,以所述互联网协议参数和所述服务端口为值设置所述缓存的键值对;遍历识别出的所有所述服务模块,设置服务模块在缓存中的所述服务名,完成服务注册。在这里,在获取配置文件中的所述当前服务的所述互联网协议参数时,若配置文件中没有所述当前服务的所述互联网协议参数,则获取当前服务器的互联网协议得到所述互联网协议参数。
可以通过配置文件进行配置一些服务模块形成服务模块列表,在进行注册服务时,直接通过获取解析配置文件,从配置文件中的服务模块列表中获取服务对应的服务模块,然后启动线程将所述服务模块写入缓存中。在配置服务模块时,每个服务模块还配置有IP参数,即互联网协议参数,以在服务注册时,将服务对应的IP写进缓存中,便于后续服务发现和调用。
在解析完配置文件后,可以生成一个随机的对象标识作为所述当前服务的服务编号唯一标识,用以在将服务写入缓存中时以所述服务编号唯一标识为密钥,便于后续的服务发现查询。可以以所述互联网协议参数和所述服务端口为值设置所述缓存的值。当所有的服务模块都写入缓存中后,遍历识别出的所有的服务模块,设置服务模块在缓存中的服务名,完成服务注册。由此,在进行服务调用时,可以直接通过服务名发现服务,然后通过服务名对应的IP和服务端口进行调用服务。
需要说明的是,在获取配置文件中的所述当前服务的所述互联网协议参数时,若配置文件中没有配置所述当前服务的所述互联网协议参数,则获取当前服务器的IP作为所述互联网协议参数。
在一个实施例中,还包括:响应于服务端的服务因故障退出,遍历缓存中的所述服务对应的所有服务模块,删除所有服务模块;发布服务下线通知消息至客户端,使得客户端监听到消息后,删除连接池中所述服务模块的连接。由此,当服务端因故退出后,需要将缓存中的服务注销,删除中中对应的服务名、ip、服务端口,并且发布消息通知所有客户端删除当前服务。防止客户端调用服务失败后报错。
在一个具体示例中,以基于redis的rpc服务注册为例进行说明。当RPC服务端启动后,获取启动命令中的端口,当没有指定端口时默认为RPC_SERVER_PORT,检查当前端口是否被占用,若被占用则报错退出,停止注册,若没有占用,则获取RPC_PROCESSES启动对应进程数。然后获取配置中的RPC_MODULE_LIST识别当前服务对应的服务模块,判断该服务模块是否已被注册,若已经完成注册,则接收TCP请求;若没有被注册,则启动线程将识别出的服务模块写入Redis进行注册。在进行注册时,获取配置中的RPC_SERVER_IP参数,若没有则获取当前服务器IP从而得到当前服务的IP,生成一个随机的ObjectId作为当前服务的server_id唯一标识,设置rediskey:value为:__RPC_ADDR_{server_id}:ip:port,遍历识别获取到的所有服务模块,设置redis:sadd__RPC_SVR_{service},{server_id},以完成服务注册。
在服务端的服务异常退出需要服务注销时,遍历写入Redis中的所有服务模块,sremrediskey__RPC_SVR_{service},发布消息通知所有客户端当前服务下线__RPC_UNREG_{service}server_id(msgpack),所有RPC客户端监听消息,将自己连接池中对应的服务模块连接删除,可通过函数:unreg_srv_handler实现。
在步骤S102中:响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务。在客户端进行服务调用时,通过连接池建立客户端与服务的连接,进而实现服务的发现进行调用。
在一个实施例中,所述响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务包括:响应于接收到客户端发起的服务调用请求,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,从所述连接池中获取与所述目标服务的连接。
进一步的,所述获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务包括:获取所述目标服务的服务名在缓存中的任一所述服务编号唯一标识,根据所述服务编号唯一标识获取所述服务名对应的所述服务模块的所述互联网协议参数和所述服务端口,以建立与所述目标服务的连接调用所述目标服务。
例如,在基于redis的rpc服务调用为例进行说明。当客户端发起一次RPC服务调用时,响应于接收到调用请求,检查当前是否有连接池,若没有则初始化连接池,从连接池中获取与该服务的连接,若连接失败,则进行初始化连接,具体为获取Rediskey:srandmember_RPC_SVR_{service_name}中随机一个服务端在服务注册中注册过的server_id,获取Redis key:get__RPC_ADDR_{server_id}拿到对应服务端的IP、服务端口。通过以上信息生成一个连接供客户端使用。
由此,本申请实施例提供的应用于微服务的服务注册与发现方法,通过响应于服务端的服务启动,获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册;响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务。由此,通过自动化的方式来注册服务,自动发现服务。避免传统的手工写死ip所带来的巨大人工成本以及出错概率。使部署成本降到最低,仅使用最少且最常见的缓存或数据库来达到自动注册和发现服务的功能。用简练易懂的代码和框架实现目标,将理解成本降到最低,用简练易懂的代码和框架实现目标,对于python体系的开发人员更为友好。
一种应用于微服务的服务注册与发现***200,包括:
服务注册模块201,用于响应于服务端的服务启动,获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册;
服务发现模块202,用于服务响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务。
对于服务注册模块201:用于响应于服务端的服务启动,获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册。由此实现自动化服务注册,避免手工写死互联网协议(ip)所带来的巨大人工成本以及出错概率。
在这里,服务注册主要针对RPC服务的服务端,服务端在服务启动时,将自己服务的服务名、ip和服务端口写入缓存中即为注册成功,其中缓存可以为Redis,也可以为其他缓存或数据库,比如基于MongoDB/Mysql/Memcached的RPC服务注册与服务发现。
具体的,在服务端的服务启动时,可以获取该服务的服务名、IP和服务端口,将服务名、IP和服务端口写入Redis中,完成服务注册。以便于后续通过服务名进行自动化发现和调用服务。
在一个实施例中,在获取所述服务的服务名、互联网协议和服务端口之前,还包括:获取服务启动命令中的服务端口,检查所述服务端口是否被占用,若被占用则报错退出,若没有被占用,则获取所述服务的服务进程,启动所述服务对应的进程数。由此,为获取所述服务的服务名、互联网协议和服务端口做准备,避免因服务被占用而获取服务名、互联网协议和服务端口失败导致服务注册失败。
具体的,所述获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册包括:获取配置文件中的服务模块列表,识别当前服务对应的服务模块,启动线程将所述服务模块写入缓存中;获取配置文件中的所述当前服务的所述互联网协议参数;生成一个随机的对象标识作为所述当前服务的服务编号唯一标识,以所述服务编号唯一标识为密钥,以所述互联网协议参数和所述服务端口为值设置所述缓存的键值对;遍历识别出的所有所述服务模块,设置服务模块在缓存中的所述服务名,完成服务注册。在这里,在获取配置文件中的所述当前服务的所述互联网协议参数时,若配置文件中没有所述当前服务的所述互联网协议参数,则获取当前服务器的互联网协议得到所述互联网协议参数。
可以通过配置文件进行配置一些服务模块形成服务模块列表,在进行注册服务时,直接通过获取解析配置文件,从配置文件中的服务模块列表中获取服务对应的服务模块,然后启动线程将所述服务模块写入缓存中。在配置服务模块时,每个服务模块还配置有IP参数,即互联网协议参数,以在服务注册时,将服务对应的IP写进缓存中,便于后续服务发现和调用。
在解析完配置文件后,可以生成一个随机的对象标识作为所述当前服务的服务编号唯一标识,用以在将服务写入缓存中时以所述服务编号唯一标识为密钥,便于后续的服务发现查询。可以以所述互联网协议参数和所述服务端口为值设置所述缓存的值。当所有的服务模块都写入缓存中后,遍历识别出的所有的服务模块,设置服务模块在缓存中的服务名,完成服务注册。由此,在进行服务调用时,可以直接通过服务名发现服务,然后通过服务名对应的IP和服务端口进行调用服务。
需要说明的是,在获取配置文件中的所述当前服务的所述互联网协议参数时,若配置文件中没有配置所述当前服务的所述互联网协议参数,则获取当前服务器的IP作为所述互联网协议参数。
在一个实施例中,还包括:响应于服务端的服务因故障退出,遍历缓存中的所述服务对应的所有服务模块,删除所有服务模块;发布服务下线通知消息至客户端,使得客户端监听到消息后,删除连接池中所述服务模块的连接。由此,当服务端因故退出后,需要将缓存中的服务注销,删除中中对应的服务名、ip、服务端口,并且发布消息通知所有客户端删除当前服务。防止客户端调用服务失败后报错。
在一个具体示例中,以基于redis的rpc服务注册为例进行说明。当RPC服务端启动后,获取启动命令中的端口,当没有指定端口时默认为RPC_SERVER_PORT,检查当前端口是否被占用,若被占用则报错退出,停止注册,若没有占用,则获取RPC_PROCESSES启动对应进程数。然后获取配置中的RPC_MODULE_LIST识别当前服务对应的服务模块,判断该服务模块是否已被注册,若已经完成注册,则接收TCP请求;若没有被注册,则启动线程将识别出的服务模块写入Redis进行注册。在进行注册时,获取配置中的RPC_SERVER_IP参数,若没有则获取当前服务器IP从而得到当前服务的IP,生成一个随机的ObjectId作为当前服务的server_id唯一标识,设置rediskey:value为:__RPC_ADDR_{server_id}:ip:port,遍历识别获取到的所有服务模块,设置redis:sadd__RPC_SVR_{service},{server_id},以完成服务注册。
在服务端的服务异常退出需要服务注销时,遍历写入Redis中的所有服务模块,sremrediskey__RPC_SVR_{service},发布消息通知所有客户端当前服务下线__RPC_UNREG_{service}server_id(msgpack),所有RPC客户端监听消息,将自己连接池中对应的服务模块连接删除,可通过函数:unreg_srv_handler实现。
对于服务发现模块202:用于响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务。在客户端进行服务调用时,通过连接池建立客户端与服务的连接,进而实现服务的发现进行调用。
在一个实施例中,所述响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务包括:响应于接收到客户端发起的服务调用请求,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,从所述连接池中获取与所述目标服务的连接。
进一步的,所述获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务包括:获取所述目标服务的服务名在缓存中的任一所述服务编号唯一标识,根据所述服务编号唯一标识获取所述服务名对应的所述服务模块的所述互联网协议参数和所述服务端口,以建立与所述目标服务的连接调用所述目标服务。
例如,在基于redis的rpc服务调用为例进行说明。当客户端发起一次RPC服务调用时,响应于接收到调用请求,检查当前是否有连接池,若没有则初始化连接池,从连接池中获取与该服务的连接,若连接失败,则进行初始化连接,具体为获取Rediskey:srandmember_RPC_SVR_{service_name}中随机一个服务端在服务注册中注册过的server_id,获取Rediskey:get__RPC_ADDR_{server_id}拿到对应服务端的IP、服务端口。通过以上信息生成一个连接供客户端使用。
由此,本申请实施例提供的应用于微服务的服务注册与发现***,通过响应于服务端的服务启动,获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册;响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务。由此,通过自动化的方式来注册服务,自动发现服务。避免传统的手工写死ip所带来的巨大人工成本以及出错概率。使部署成本降到最低,仅使用最少且最常见的缓存或数据库来达到自动注册和发现服务的功能。用简练易懂的代码和框架实现目标,将理解成本降到最低,用简练易懂的代码和框架实现目标,对于python体系的开发人员更为友好。
本申请实施例还提供一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现本申请实施例的应用于微服务的服务注册与发现方法
本申请实施例还提供一种计算机可读介质,其上存储有计算机程序,程序被处理器执行时实现本申请实施例的应用于微服务的服务注册与发现方法。
图3示出了可以应用本申请实施例的应用于微服务的服务注册与发现方法或***的示例性***架构300。
如图3所示,***架构300可以包括终端设备301、302、303,网络304和服务器305。网络304用以在终端设备301、302、303和服务器305之间提供通信链路的介质。网络304可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备301、302、303通过网络304与服务器305交互,以接收或发送消息等。终端设备301、302、303上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备301、302、303可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于车载智能屏、智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器305可以是提供各种服务的服务器,例如对用户利用终端设备301、302、303所发送的往来消息提供支持的后台管理服务器。后台管理服务器可以在接收到终端设备请求后进行分析等处理,并将处理结果反馈给终端设备。
需要说明的是,本申请实施例所提供的应用于微服务的服务注册与发现方法一般由服务器305执行,相应地,应用于微服务的服务注册与发现***一般设置于服务器305中。
应该理解,图3中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图4,其示出了适于用来实现本申请实施例的电子设备的计算机***400的结构示意图。图4示出的计算机***仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图4所示,计算机***400包括中央处理单元(CPU)401,其可以根据存储在只读存储器(ROM)402中的程序或者从存储部分408加载到随机访问存储器(RAM)403中的程序而执行各种适当的动作和处理。在RAM 403中,还存储有***400操作所需的各种程序和数据。CPU 401、ROM 402以及RAM 403通过总线404彼此相连。输入/输出(I/O)接口405也连接至总线404。
以下部件连接至I/O接口405:包括键盘、鼠标等的输入部分406;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分407;包括硬盘等的存储部分408;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分409。通信部分409经由诸如因特网的网络执行通信处理。驱动器410也根据需要连接至I/O接口405。可拆卸介质411,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器410上,以便于从其上读出的计算机程序根据需要被安装入存储部分408。
特别地,根据本申请公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分409从网络上被下载和安装,和/或从可拆卸介质411被安装。在该计算机程序被中央处理单元(CPU)401执行时,执行本申请的***中限定的上述功能。
需要说明的是,本申请所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括确定模块、提取模块、训练模块和筛选模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,确定模块还可以被描述为“确定候选用户集的模块”。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种应用于微服务的服务注册与发现方法,其特征在于,包括:
响应于服务端的服务启动,获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册;
响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务。
2.根据权利要求1所述的应用于微服务的服务注册与发现方法,其特征在于,在获取所述服务的服务名、互联网协议和服务端口之前,还包括:获取服务启动命令中的服务端口,检查所述服务端口是否被占用,若被占用则报错退出,若没有被占用,则获取所述服务的服务进程,启动所述服务对应的进程数。
3.根据权利要求2所述的应用于微服务的服务注册与发现方法,其特征在于,所述获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册包括:获取配置文件中的服务模块列表,识别当前服务对应的服务模块,启动线程将所述服务模块写入缓存中;获取配置文件中的所述当前服务的所述互联网协议参数;生成一个随机的对象标识作为所述当前服务的服务编号唯一标识,以所述服务编号唯一标识为密钥,以所述互联网协议参数和所述服务端口为值设置所述缓存的键值对;遍历识别出的所有所述服务模块,设置服务模块在缓存中的所述服务名,完成服务注册。
4.根据权利要求3所述的应用于微服务的服务注册与发现方法,其特征在于,还包括:在获取配置文件中的所述当前服务的所述互联网协议参数时,若配置文件中没有所述当前服务的所述互联网协议参数,则获取当前服务器的互联网协议得到所述互联网协议参数。
5.根据权利要求3所述的应用于微服务的服务注册与发现方法,其特征在于,还包括:响应于服务端的服务因故障退出,遍历缓存中的所述服务对应的所有服务模块,删除所有服务模块;发布服务下线通知消息至客户端,使得客户端监听到消息后,删除连接池中所述服务模块的连接。
6.根据权利要求3所述的应用于微服务的服务注册与发现方法,其特征在于,所述响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务包括:响应于接收到客户端发起的服务调用请求,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,从所述连接池中获取与所述目标服务的连接。
7.根据权利要求6所述的应用于微服务的服务注册与发现方法,其特征在于,所述获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务包括:获取所述目标服务的服务名在缓存中的任一所述服务编号唯一标识,根据所述服务编号唯一标识获取所述服务名对应的所述服务模块的所述互联网协议参数和所述服务端口,以建立与所述目标服务的连接调用所述目标服务。
8.一种应用于微服务的服务注册与发现***,其特征在于,包括:
服务注册模块,用于响应于服务端的服务启动,获取所述服务的服务名、互联网协议和服务端口,将所述服务名、互联网协议和服务端口写入缓存中进行服务注册;
服务发现模块,用于服务响应于客户端进行服务调用,初始化连接池,通过所述连接池在所述缓存中查询调用的目标服务,获取所述目标服务的互联网协议和服务端口,通过所述互联网协议和服务端口调用所述目标服务。
9.一种电子设备,其特征在于,包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行权利要求1至7中任一项所述的应用于微服务的服务注册与发现方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行权利要求1至7中任一项所述的应用于微服务的服务注册与发现方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111565825.4A CN114401303A (zh) | 2021-12-20 | 2021-12-20 | 应用于微服务的服务注册与发现方法、***和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111565825.4A CN114401303A (zh) | 2021-12-20 | 2021-12-20 | 应用于微服务的服务注册与发现方法、***和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114401303A true CN114401303A (zh) | 2022-04-26 |
Family
ID=81226474
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111565825.4A Pending CN114401303A (zh) | 2021-12-20 | 2021-12-20 | 应用于微服务的服务注册与发现方法、***和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114401303A (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180152534A1 (en) * | 2015-06-03 | 2018-05-31 | Telefonaktiebolaget Lm Ericsson (Publ) | Implanted agent within a first service container for enabling a reverse proxy on a second container |
CN109274734A (zh) * | 2018-09-07 | 2019-01-25 | 海信集团有限公司 | 一种基于物联网云平台的服务进程调用方法及装置 |
US10212041B1 (en) * | 2016-03-04 | 2019-02-19 | Avi Networks | Traffic pattern detection and presentation in container-based cloud computing architecture |
CN109582472A (zh) * | 2018-10-19 | 2019-04-05 | 华为技术有限公司 | 一种微服务处理方法及设备 |
CN109714319A (zh) * | 2018-12-06 | 2019-05-03 | 深圳市中农网有限公司 | 微服务的管理***、方法、装置、计算机设备及存储介质 |
CN110048879A (zh) * | 2019-03-12 | 2019-07-23 | 平安医疗健康管理股份有限公司 | 微服务注册方法、装置、电子设备和计算机可读存储介质 |
CN110324177A (zh) * | 2019-05-31 | 2019-10-11 | 中国人民解放军国防科技大学 | 一种微服务架构下的服务请求处理方法、***及介质 |
CN112114979A (zh) * | 2020-08-31 | 2020-12-22 | 厦门安胜网络科技有限公司 | 远程过程调用方法和装置 |
CN112217864A (zh) * | 2020-09-04 | 2021-01-12 | 微民保险代理有限公司 | 微服务监控方法、装置、***、计算机设备和存储介质 |
-
2021
- 2021-12-20 CN CN202111565825.4A patent/CN114401303A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180152534A1 (en) * | 2015-06-03 | 2018-05-31 | Telefonaktiebolaget Lm Ericsson (Publ) | Implanted agent within a first service container for enabling a reverse proxy on a second container |
US10212041B1 (en) * | 2016-03-04 | 2019-02-19 | Avi Networks | Traffic pattern detection and presentation in container-based cloud computing architecture |
CN109274734A (zh) * | 2018-09-07 | 2019-01-25 | 海信集团有限公司 | 一种基于物联网云平台的服务进程调用方法及装置 |
CN109582472A (zh) * | 2018-10-19 | 2019-04-05 | 华为技术有限公司 | 一种微服务处理方法及设备 |
CN109714319A (zh) * | 2018-12-06 | 2019-05-03 | 深圳市中农网有限公司 | 微服务的管理***、方法、装置、计算机设备及存储介质 |
CN110048879A (zh) * | 2019-03-12 | 2019-07-23 | 平安医疗健康管理股份有限公司 | 微服务注册方法、装置、电子设备和计算机可读存储介质 |
CN110324177A (zh) * | 2019-05-31 | 2019-10-11 | 中国人民解放军国防科技大学 | 一种微服务架构下的服务请求处理方法、***及介质 |
CN112114979A (zh) * | 2020-08-31 | 2020-12-22 | 厦门安胜网络科技有限公司 | 远程过程调用方法和装置 |
CN112217864A (zh) * | 2020-09-04 | 2021-01-12 | 微民保险代理有限公司 | 微服务监控方法、装置、***、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111045833B (zh) | 接口调用的方法和装置 | |
CN111126948A (zh) | 用于审批流程的处理方法和装置 | |
CN114979295B (zh) | 一种网关管理的方法和装置 | |
CN111385255B (zh) | 一种异步调用实现方法、装置、服务器及服务器集群 | |
CN109981546B (zh) | 获取应用模块间的远程调用关系的方法和装置 | |
CN110730197B (zh) | 一种服务发现方法和*** | |
CN112468585B (zh) | 数据传输方法、装置、电子设备及存储介质 | |
CN113127335B (zh) | 一种***测试的方法和装置 | |
CN112202605A (zh) | 服务配置方法、装置、设备及存储介质 | |
CN113010238A (zh) | 一种微应用调用接口的权限确定方法、装置和*** | |
CN116737662A (zh) | 业务数据处理的方法、装置、电子设备和存储介质 | |
CN114401303A (zh) | 应用于微服务的服务注册与发现方法、***和装置 | |
CN113535439B (zh) | 业务请求处理方法、装置、设备及存储介质 | |
CN111124523A (zh) | 用于初始化应用的方法和装置 | |
CN112559001B (zh) | 更新应用的方法和装置 | |
CN114398035A (zh) | 利用组件提供服务的方法、装置、设备和计算机可读介质 | |
CN113704079A (zh) | 基于Protobuf的接口测试方法和装置 | |
CN113742617A (zh) | 一种缓存更新的方法和装置 | |
CN113760487A (zh) | 一种业务处理方法和装置 | |
CN112214500A (zh) | 数据对比的方法、装置、电子设备和存储介质 | |
CN113645259A (zh) | 微服务弹性伸缩方法、***及相关设备 | |
CN113448652A (zh) | 一种请求处理方法和装置 | |
CN113760886B (zh) | 提供数据服务的方法、装置、设备和计算机可读介质 | |
CN113495747B (zh) | 一种灰度发布方法和装置 | |
CN114428805A (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 |