文章目录

  • 1. 安装Nacos
  • 2. 注册Nacos
  • 3. 注册集群
  • 3.1 服务器集群
  • 3.2 负载均衡策略设置
  • 4. 权重设置
  • 5. 环境隔离
  • 6. 临时实例


Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

1. 安装Nacos

nacos的下载包可以在这里获取(提取码:1234),下载后直接解压即可。

如果要运行Nacos,只需要将cmd的目录切岛Nacos的bin目录下,在命令行中输入 startup.cmd -m standalone 即可,然后进入网页 http://127.0.0.1:8848/nacos/#/login,网页如下:

nacos中服务注册与发现原理 nacos如何注册服务_java


初始账号密码都是 nacos ,即可登录。

2. 注册Nacos

接下来我们就尝试将User和Order两个服务注册到Nacos中。

首先,将两个服务中的Eureka的依赖和配置文件中的配置进行注释,然后在父工程的pom文件中添加SpringCloudAlibaba的依赖管理,父工程的pom文件如下

nacos中服务注册与发现原理 nacos如何注册服务_spring cloud_02


然后在其中添加依赖管理,如下

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

之后在Order和User的服务中导入依赖如下

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

并在application.yml 配置文件中进行如下配置

spring: 
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

最后启动服务,打开并登陆Nacos可看到下面的画面:

nacos中服务注册与发现原理 nacos如何注册服务_eureka_03


上述代表我们注册成功。

3. 注册集群

3.1 服务器集群

服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。

比如User这个服务我们可以有多个集群来进行实现,将User编入集群的操作仅需要在配置文件中添加如下配置

spring: 
  cloud:
    nacos:
      discovery:
        cluster-name: HZ # 集群名称

重新启动后可以发现,集群名称已经由默认改为了 “HZ”。

nacos中服务注册与发现原理 nacos如何注册服务_spring cloud_04


可以再次Copy一个User服务,进行如下的设置,将其设置的集群设为“SH”,改变其端口号,并启动。

nacos中服务注册与发现原理 nacos如何注册服务_eureka_05


启动后可以发现,不同集群都被分开了,如下:

nacos中服务注册与发现原理 nacos如何注册服务_spring cloud_06

3.2 负载均衡策略设置

修改负载均衡策略可以设置优先访问那个集群,我们将order也设置再集群HZ中,这样,我们需要其优先访问HZ的集群,就得修改负载均衡的策略,修改其负载均衡的策略如下,在order的配置文件中设置如下:

spring: 
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        cluster-name: HZ # 集群名称
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

重启后访问 http://localhost:8080/order/103 等,再看控制台,发现UserApplication和UserApplication2打印出了信息,但是UserApplication3,即设置为SH的集群未打印出信息。

如果HZ的集群全部挂了呢,我们将其停止服务后得到在访问网址发现依然能够得到信息,证明优先访问是起效的。

4. 权重设置

实际部署中会出现这样的场景:

服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。

但默认情况下NacosRule是同集群内随机挑选,不会考虑机器的性能问题。

因此,Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。

在nacos控制台,找到user-service的实例列表,点击编辑,即可修改权重,如下:

nacos中服务注册与发现原理 nacos如何注册服务_java_07

5. 环境隔离

Nacos提供了namespace来实现环境隔离功能。

  • nacos中可以有多个namespace
  • namespace下可以有group、service等
  • 不同namespace之间相互隔离,例如不同namespace的服务互相不可见

默认情况下,所有service、data、group都在同一个命名空间中,名为public,我们可以点击页面新增一个命名空间。

nacos中服务注册与发现原理 nacos如何注册服务_spring cloud_08


命名空间新增后,可以发现服务列表已经有了两个空间了。

nacos中服务注册与发现原理 nacos如何注册服务_java_09


如果想将一个微服务添加到dev空间,比如将order添加到dev空间,在order的配置文件中设置如下:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 4ddd5004-5d6b-43de-9a11-6f26adb8125f # 命名空间,填ID

namespace 项是命名空间生成的UUID,之后重启,order服务就出现在了dev列表中,其不能访问public中的服务。

6. 临时实例

打开服务列表,我们可以发现,这些实例都是临时实例。

nacos中服务注册与发现原理 nacos如何注册服务_nacos中服务注册与发现原理_10


那么,临时示例与非临时实例有什么区别呢?Nacos与Eureka注册中心类似,其作用可以从下图看出。

nacos中服务注册与发现原理 nacos如何注册服务_spring_11


可以发现,

  • 临时实例每5秒进行一次心跳检测,若没有了心跳,那么就将其剔除服务列表;
  • 非临时实例由Nacos主动询问,若不健康,则不会将其进行剔除,会显示实例不健康。

如果想要设置实例为非临时实例,可以在配置文件中进行如下配置:

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 设置为非临时实例