前言

Nacos官网

一、什么是Nacos

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态 服务发现、服务配置、服务元数据及流量管理。
Nacos 的关键特性包括:

  1. 服务发现和服务健康监测
  2. 动态配置服务
  3. 动态 DNS服务
  4. 服务及其元数据管理

简单而言,Nacos就是帮助我们管理微服务的组件。

二、Nacos的安装

Nacos是一个服务,需要安装上,然后微服务才能去注册。Nacos的安装分为单机版和集群版。官方文档中已经有详细部署手册,参考如下:
集群部署
监控手册
其中,监控手册中提到的两个工具:prometheus和grafana是集成的第三方的监测工具,有时间可以单独研究这两个工具的使用,方便项目的检测。
注意:
在实际安装过程中,遇到了一些问题,记录一下。
首先,阿里系列的产品,大多都有一个特性,就是耗内存。现在说的Nacos,包括之前讲到的RocketMQ,对内存的消耗都比较大。所以如果一个服务器上如果不仅仅配置了Nacos服务,还有其他服务的话,需要修改启动脚本中关于java虚拟机内存的配置,如下:
修改bn/startup.sh内容:
在这里插入图片描述
Nacos默认web端口是8848。但是在启动后,还会占用8848附件的几个端口。所以,在学习测试过程中,如果在一台服务器上装nacos集群时,web端口不要设置为连续的几个端口,防止端口冲突。

Nacos数据源有两种配置方式,一种方式是使用默认内置数据源,一种方式是使用数据库外部数据源。两种模式的启动命令有所区别,官网都有介绍。

Nacos启动成功后,通过访问8848端口,可以查看web管理界面,用户名密码默认都是nacos。

配置好Nacos集群后,需要配置nginx反向代理,这样,浏览器只访问nginx即可,nginx进行集群访问的负载均衡。

三、Nacos架构

Nacos有注册中心和配置中心的作用,本篇主要介绍其注册中心的架构,如下图:
在这里插入图片描述
核心功能:
服务注册:
Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自 身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信 息存储在一个双层的内存Map中。

服务心跳:
在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服 务一直处于可用状态,防止被剔除。默认5s发送一次心跳。

服务同步:
Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。

服务发现:
服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给 Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存

服务健康检查:
Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过 15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如 果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新 注册)

四、Nacos开发环境搭建

4.1 版本兼容
使用SpringCloud Alibaba时,其对SpringBoot以及SpringCloud组件的版本要求很高,必须按照要求版本搭建环境,否则可能会出现错误。
在这里插入图片描述
根据上图,查看安装的Nacos是哪个版本,然后选择对应的SpringCloud Alibaba Version版本。这里安装的是Nacos2.0.3版本,所以选择SpringCloud Alibaba Version是2.2.7RELEASE版本。
接着,根据Spring Cloud Alibaba 版本,选择对应的Spring Cloud版本和SpringBoot版本,对应关系如下:
在这里插入图片描述
至此,版本选择结束。

4.2搭建Naocs-client
首先,在父pom中,指定上述对应的版本:

<properties>
  <java.version>1.8</java.version>
  <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
  <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
  <spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
</properties>
 
<dependencyManagement>
  <dependencies>
    <!-- spring boot 依赖 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>${spring-boot.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    
    <!-- spring cloud 依赖 -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${spring-cloud.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
 
    <!-- spring cloud alibaba 依赖 -->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>${spring-cloud-alibaba.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

配置服务提供者:
在pom中,配置如下依赖:

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在application.yml中,配置nacos连接信息:


server:
  port: 8081
 
spring:
  application:
    name: service-provider #服务名称,在nacos中以这个名称显示
  cloud:
    nacos:
      discovery:
	#nacos集群配置(Nginx),写到端口即可,无需写/nacos后缀,nacos-client会自动加上这个后缀去请求。写单机版配置时,也是写到端口即可,无需写/nacos后缀
        server-addr: 192.168.230.1:80

在启动类上,加上
@EnableDiscoveryClient注解,这样,一个生产者服务就配置好了。
(**注意:**在SpringCloud Edgware版本之后,可以省略该注解,客户端会自动注册服务到注册中心。SpringCloud的版本命名规范可参考:Spring Cloud版本 version命名说明 )
消费者服务以上步骤也都得配置,不过消费者涉及到服务的调用,还需要配置Feign相关的依赖,这个我们后面再讲。
下面,启动一下生产者服务,查看nacos管理界面是否注册成功:
在这里插入图片描述

补充:

端口说明:
8848 web站点端口
7848 jraft通信端口
Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。
端口 与主端口的偏移量 描述
9848 1000 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
9849 1001 服务端gRPC请求服务端端口,用于服务间同步等

配置nginx+nacos2.0集群时,除了开放web端口映射外,还需要配置其他端口映射。可参考其他文章进行配置

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐