随笔 - 13  文章 - 0  评论 - 2  阅读 - 3425

Nacos

1、Nacos简介

Nacos是阿里巴巴开源的服务注册中心以及配置中心,致力于给开发者提供一款便捷、简单上手的开源框架。快速实现动态服务发现、服务配置、服务元数据及流量管理。

一个Nacos干掉了Spring Cloud的三大组件,分别是注册中心Eureka服务配置Config服务总线Bus

2、安装

下载

https://github.com/alibaba/nacos/releases

上传服务器解压 

1
2
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
cd nacos/bin

 直接启动  sh startup.sh -m standalone  ,可单机模式运行

修改数据库配置(可部署为集群)

vim conf/application.properties

 

在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf,请每行配置成ip:port。(请配置3个或3个以上节点)

 

 

 

启动服务器

Linux/Unix/Mac

启动命令(standalone代表着单机模式运行,非集群模式):

1
sh startup.sh -m standalone

如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

1
bash startup.sh -m standalone

Windows

启动命令(standalone代表着单机模式运行,非集群模式):

1
startup.cmd -m standalone

关闭服务器

Linux/Unix/Mac

1
sh shutdown.sh

Windows

1
shutdown.cmd

在浏览器输入http://localhost:8848/nacos进入Nacos的登录界面。

用户名:nacos;密码:nacos

 

3、服务注册发现

创建了两个模块,分别是nacos-provider(服务提供者)、nacos-consumer(服务消费者),职责如下:

添加Maven依赖

<dependencies>
    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

 配置YML文件

nacos-provider:注册进入nacos-server,对外暴露服务

复制代码
spring:
  application:
    name: nacos_provide
  cloud:
    nacos:
      config:
        server-addr: ip:8848
        file-extension: yaml
        prefix: nacos
      discovery:
        server-addr: ip:8848
        enabled: true
        service: ${spring.application.name} #默认为该值
server:
  port: 8886
复制代码


nacos-consumer:注册进入nacos-server,调用nacos-provider的服务

复制代码
spring:
  application:
    name: nacos_consumer
  cloud:
    nacos:
      config:
        server-addr: ip:8848
        file-extension: yaml
        prefix: nacos
      discovery:
        server-addr: ip:8848

server:
  port: 8887
复制代码

开启服务注册发现功能

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApp {
    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApp.class,args);
    }
}

4、启动配置管理

添加依赖

<dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.0.2.RELEASE</version>
</dependency>

配置YAML文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
spring:
  profiles:
    active: local
  application:
    name: ${ino.artifactId}
  cloud:
    nacos:
      discovery:
        server-addr: ${ino.nacos-sever-adr}
        namespace: ${ino.nacos-nampace}
        group: ${ino.nacos-group}
      config:
        server-addr: ${ino.nacos-sever-adr}
        namespace: ${ino.nacos-nampace}
        group: ${ino.nacos-group}
        # 默认是properties格式,添加对应分组的配置stp-demo3-busi.yaml
        file-extension: yaml

Data ID

dataId是一个配置的唯一标识,格式:

${prefix}-${spring.profiles.active}.${file-extension}

prefix:前缀,默认是spring.application.name的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profiles.active:即为当前环境对应的 profile。当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

Namespace

多环境隔离配置,解决多环境及多租户数据的隔离问题 在多套不同的环境下,可以根据指定的环境创建不同的Namespace,实现多环境的数据隔离。

Nacos中默认提供的命名空间则是public,Namespace必须在bootstrap.yml配置文件中指定,否则不生效。

配置见上的yml文件

Group

不同业务配置隔离。

有两个微服务,一个是订单系统,一个是用户系统,但是他们有着相同的配置,比如datasource-url,那么如何区分呢?

Group 默认为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group 来配置,当配置项太多或者有重名时,可以通过分组来方便管理。

5、Nacos 配置中心原理

链接 :https://www.jianshu.com/p/38b5452c9fec

Nacos 服务端保存了配置信息,客户端连接到服务端之后,根据 dataID,group可以获取到具体的配置信息,当服务端的配置发生变更时,客户端会收到通知。

Nacos 并不是通过推的方式将服务端最新的配置信息发送给客户端的,而是客户端维护了一个长轮询的任务,定时去拉取发生变更的配置信息,然后将最新的数据推送给 Listener 的持有者。

为什么 Nacos 不设计成主动推送数据,而是要客户端去拉取呢?如果用推的方式,服务端需要维持与客户端的长连接,这样的话需要耗费大量的资源,并且还需要考虑连接的有效性,例如需要通过心跳来维持两者之间的连接。而用拉的方式,客户端只需要通过一个无状态的 http 请求即可获取到服务端的数据。

Nacos 服务端创建了相关的配置项后,客户端就可以进行监听了。

客户端是通过一个定时任务来检查自己监听的配置项的数据的,一旦服务端的数据发生变化时,客户端将会获取到最新的数据,并将最新的数据保存在一个 CacheData 对象中,然后会重新计算 CacheData 的 md5 属性的值,此时就会对该 CacheData 所绑定的 Listener 触发 receiveConfigInfo 回调。

注:

nacos作为配置中心,配置数据库和redis链接,修改数据库链接,服务端收到更新,但服务还是使用原来的数据库链接,不使用修改后的链接。可以把应用重新启动一下,对于像mysql来说,原先的session 不生效,新的链接才能生效

 

6、nacos和eureka功能对比

功能模块 nacos eureka 功能说明
注册中心 服务治理,服务中心化注册
配置中心 × eureka需要配合springcloud config实现
配置动态刷新 × nacos通过netty保持tcp长链接进行推送,eureka需要配合mq实现配置动态刷新
可用区az 对服务集群划分不同区域,实现区域隔离,并提供灾难级自动切换
分组 × nacos根据不同的业务、环境进行分组管理(namespace,group)
元数据 提供服务标签数据(环境、服务标识)
权重 × nacos提供权重设置,调整承载流量压力
健康检查 nacos提供服务端或者客户端发起的健康监测,eureka是有客户端发起心跳
负载均衡 均提供负载均衡策略,eureka采用ribbon

 

posted on   irongzone  阅读(617)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示