java整合Nacos,nacos服务注册和发现原理

302 阅读3分钟

目前开源的注册中心框架有很多,国内比较常见的有:

  • Eureka:Netflix公司出品,目前被集成在SpringCloud当中,一般用于Java应用
  • Nacos:Alibaba公司出品,目前被集成在SpringCloudAlibaba中,一般用于Java应用
  • Consul:HashiCorp公司出品,目前集成在SpringCloud中,不限制微服务语言 Nacos由Alibaba发布的,官网为国内服务器,访问和中文文档相对便于使用。

一、Nacos注册中心的作用

1728524419577.png 1、代理服务提供方部署的多个访问实例,并实时监测服务提供方是否正常运行的信息提供给服务调用方

  • 服务提供者会定期向注册中心发送请求,报告自己的健康状态(心跳请求)
  • 当注册中心长时间收不到提供者的心跳时,会认为该实例宕机,将其从服务的实例列表中剔除
  • 当服务有新实例启动时,会发送注册服务请求,其信息会被记录在注册中心的服务实例列表
  • 当注册中心服务列表变更时,会主动通知微服务,更新本地服务列表

2、服务调用方可通过注册中心随机访问服务实例端口,服务调用方自己对实例列表负载均衡,挑选一个实例

二、注册中心入门使用

1、进入nacos.io Nacos官网中将所需版本的Nacos安装包下载

2、解压安装包部署到服务器英文目录下,再将解压后config文件中的sql文件导入服务器数据库中

3、更改配置文件nacos\conf\application.properties中连接数据库信息配置,其中包括数据库服务器地址ip、连接用户名和密码

image.png

4、启动Nacos 指令:

windows

startup.cmd -m standalone

mac/Linux

sh startup.sh -m standalone

5、 未修改默认服务端口号的情况下 访问:http://localhost:8848/nacos 地址进入Nacos网页管理界面 初始默认登入的账号密码都为:nacos image.png

三、javaSpringBoot整合Nacos

1、在官方文档中进入Java SDK

image.png

2、导入对应Nacos依赖 Maven 坐标:

<!--nacos 服务注册发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

3、在对应服务中配置Nacos服务地址和服务对象

spring:
  application:
    name: name-service # 服务名称
  cloud:
    nacos:
      server-addr: 192.168.150.101:8848 # nacos地址

完成后可进入Nacos管理网页,点击服务列表可查看注册成功的服务:

image.png

4、完成上诉配置后,进入Service运行窗口中,右键可创建多个实例的服务,选择CopyConfiguration后进入选配界面

image.png

image.png

image.png

选配界面:

image.png

四、javaSpringBoot不同服务中调用Nacos注册中心的所需的其他服务

image.png

通过注入SpringCloud中的DiscoveryClient配置类,调用方法获取所有服务目标实例:

getInstances("参数为对应注册中心中的服务名称")
List<ServiceInstance> instances = discoveryClient.getInstances(serviceId);
  // 通过randomInt随机数 使每次访问的服务实例随机
        int index = RandomUtil.randomInt(instances.size());
       ServiceInstance serviceInstance = instances.get(index);
       //再获取实例的uri
        URI uri = serviceInstance.getUri();

在通过springBean文件注入 RestTemplate,通过RestTemplate利用获取到的服务实例uri发起对应的Http请求,完成注册中心的远程并且随机调用服务实例;