搭建完高可用架构之后,我们就可以利用Nacos来实现服务注册和发现了。当我们想要在微服务中集成Nacos时,不要忘记在POM(项目对象模型)文件中添加如代码清单2-3所示的依赖包,该依赖包内置了Nacos服务发现和注册的所有功能。
代码清单2-3 引入Nacos注册中心依赖包代码
在本节接下来的内容中,我们将分别从服务注册和服务发现这两个维度出发讨论Nacos的使用方法和最佳实践。
当想要通过Nacos将某一个微服务注册到注册中心时,开发人员唯一要做的事情就是在配置文件中添加一组配置项。例如,我们可以在SpringOrder系统的account-service中添加如代码清单2-4所示的配置项内容。
代码清单2-4 微服务集成Nacos注册中心配置代码
请注意,这里我们通过spring.application.name配置项指定了服务名称为account-service,然后通过spring.cloud.nacos.discovery.server-addr配置项指定Nacos服务器的地址。通过这行配置方式,该微服务就可以和Nacos建立连接并将自身自动注册到Nacos中。图2-12展示了account-service注册到Nacos之后的效果。
当我们将某一个微服务注册到Nacos服务器之后,其他微服务就可以通过Nacos发现并调用它。我们会在下一章中结合OpenFeign框架来讨论实现过程。而在本节接下来的内容中,我们将通过Nacos为开发人员暴露的API来验证服务注册和发现的效果。
本书不对Nacos原生API进行深入讲解,Nacos官网给出了关于Nacos原生API的所有细节描述,你可以通过以下地址获取这些信息:https://nacos.io/zh-cn/docs/v2/guide/user/sdk.html。这里我们通过一个基础示例来对上一步已注册的account-service进行访问,示例代码如代码清单2-5所示。
图2-12 account-service注册效果
代码清单2-5 基于Nacos API获取访问服务实例信息代码
在代码清单2-5中用到了Nacos中一个非常有用的注解@NacosInjected,该注解专门用来注入Nacos中的核心对象。这里通过该注解注入了Nacos中实现服务注册发现的NamingService类。那么,这个NamingService提供了哪些功能呢?对于开发人员来说,NamingService是Nacos对外提供给客户端服务的接口。归纳起来,NamingService提供了以下方法。
❑ registerInstance:注册服务实例。
❑ deregisterInstance:注销服务实例。
❑ getAllInstances:获取某一服务的所有实例。
❑ selectInstances:获取某一服务健康或不健康的实例。
❑ selectOneHealthyInstance:根据权重选择一个健康的实例。
❑ getServerStatus:检测服务端健康状态。
❑ subscribe:注册对某个服务的监听。
❑ unsubscribe:注销对某个服务的监听。
❑ getSubscribeServices:获取被监听的服务。
❑ getServicesOfServer:获取某一个命名空间下的所有服务名。
在Nacos中,NamingService的实现类为com.alibaba.nacos.client.naming.NacosNamingService。显然,在上述代码中,我们基于NamingService类的selectOneHealthyInstance方法来获取“account-service”的一个健康实例,并进一步获取了该实例的IP和端口信息。