java nacos总结

时间:2025-08-28 10:54:01来源:互联网

下面小编就为大家分享一篇java nacos总结,具有很好的参考价值,希望对大家有所帮助。

nacos简介

Nacos 是阿里巴巴的新开源项目,其核心定位是 “一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台”。

Nacos 致力于帮助您发现、配置和管理微服务。

Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。

Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

作为微服务注册中心,它的目标是淘汰目前流行的eureka,zookeeper,consul等组件。

 

官网:https://nacos.io/zh-cn/docs/what-is-nacos.html

nacos的功能

注册中心

服务信息注册到nacos,其他服务能够通过nacos找到服务进行调用。

注册中心就是用于服务提供者注册服务、服务调用者从中拉取服务列表然后采用负载均衡策略从列表中选出一个服务,从而完成请求调用。

服务健康监测

实时的健康检查,阻止向不健康的主机或服务实例发送请求。

动态配置服务

动态化的方式管理所有环境的应用配置和服务配置。消除了配置变更时重新部署应用和服务的需要

动态 DNS 服务

可以根据服务实例的变化(例如,实例的IP地址或端口发生变化)自动更新DNS解析,支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制

 

动态DNS服务详细说明:

dns解析:将域名转换为对应的IP地址,以实现网络通信

每个微服务实例都会向Nacos注册自己的网络地址和服务信息。Nacos会维护一个服务注册表,客户端可以通过查询Nacos的服务注册表来发现可用的微服务实例,客户端在进行服务发现时,可以通过DNS解析获取到最新的微服务实例的网络地址,由于动态dns功能,客户端可以根据最新的网络地址信息进行动态路由和负载均衡。客户端可以根据服务名称进行DNS解析,获取到多个可用的微服务实例的网络地址。客户端可以使用负载均衡算法(如轮询、随机等)来选择一个合适的微服务实例进行请求转发。

通过Nacos的动态DNS功能,微服务架构可以实现以下好处:
- 高可用性:当微服务实例发生故障或下线时,Nacos会自动更新DNS解析,将请求路由到其他可用的实例。
- 弹性扩展:当微服务实例动态增加或减少时,Nacos会自动更新DNS解析,使客户端能够动态感知并使用新的实例。
- 负载均衡:客户端可以根据DNS解析获取到多个实例的网络地址,并使用负载均衡算法来分发请求,提高系统的性能和稳定性。

需要注意的是,使用Nacos的动态DNS功能需要将DNS服务器配置为Nacos提供的DNS解析器,并确保客户端能够正确解析Nacos提供的DNS记录。此外,Nacos还提供了更多高级的路由和负载均衡功能,例如基于权重的路由、灰度发布等,可以根据具体需求进行配置和使用。

nacos服务搭建

官网:https://nacos.io/zh-cn/docs/deployment.html

Nacos定义为一个IDC内部应用组件,并非面向公网环境的产品,建议在内部隔离网络环境中部署,强烈不建议部署在公共网络环境。

三种部署模式

单机模式 - 用于测试和单机试用。

集群模式 - 用于生产环境,确保高可用。

多集群模式 - 用于多数据中心场景。

预备环境准备

Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:

64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。

64 bit JDK 1.8+;

Maven 3.2.x+;

1、启动nacos服务

下载源码或者安装包

安装包地址:github.com/alibaba/nacos/releases

解压后进入nacos/bin目录

输入命令启动服务

linux:

sh startup.sh -m standalone

windows:

cmd startup.cmd

或者双击startup.cmd运行文件。

运行结果

nacos默认使用8848端口,可通过

127.0.0.1:8848/nacos/

进入自带的控制台界面,默认用户名/密码nacos/nacos

2、配置集群

3个或以上Nacos节点才能构成集群,支持linux/unix/mac

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

#cluster.conf

ip地址:8848ip地址:8848ip地址:8848

配置后在各个节点服务器输入命令启动所有服务:

sh startup.sh

3、配置Mysql

初始化nacos相关表:运行conf/nacos-mysql.sql文件

修改conf/application.properties文件,增加支持mysql数据源配置,添加mysql数据源的url、用户名和密码

spring.datasource.platform=mysqldb.num=1db.url.0=jdbc:mysql://127.0.0.1:3306/nacoscharacterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=truedb.user=userdb.password=password

配置后输入命令启动服务。

客户端使用

添加依赖

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  <version>0.2.0.RELEASE</version>
</dependency>

在resource目录下加入 bootstrap.properties文件(配置文件必须是bootstrip.properties或者bootstrip.yml) 并添加配置中心相关信息

#服务名
spring.application.name=nacos-config-example
# 配置中心url
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

其他配置说明:

#指定启用的环境	
spring.profiles.active=dev
#文件名 -- 如果没有配置则默认为 ${spring.appliction.name}	
spring.cloud.nacos.config.prefix=dhap	
#指定文件后缀	
spring.cloud.nacos.config.file-extension=yaml	
#指定分组信息	
spring.cloud.nacos.config.group=AAA

 

server-addr :使用域名的方式时,端口不能忽略;多个IP可以通过“,”号隔离192.168.80.1:8848,192.168.80.1:8848;填写域名时前缀不要加上http://

file-exetension :为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension来配置。目前只支持 properties 和 yaml 类型。

group:默认为DEFAULT_GROUP,可以对不同类型的微服务配置文件进行分组管理。配置文件通过 spring.cloud.nacos.config.group=AAA来指定。

实时刷新

refresh.enabled:false 代表关闭动态刷新

spring.cloud.nacos.discovery.service 项目向注册中心注册服务时的服务名,默认为spring.application.name 变量,注:该服务名必须使用小写,因为nacos服务名区分大小写,如果服务名不完全匹配,那么无法调用服务

spring.cloud.nacos.discovery.weight 默认1 权重, 1到100,值越大,权重越大,访问量越高

spring.cloud.nacos.discovery.ip   注册ip , 当前服务注册到nacos的IP,最高优先级

spring.cloud.nacos.discovery.port -1 注册端口 , 当前服务注册到nacos的端口,默认情况下将自动检测,不需要配置

spring.cloud.nacos.discovery.namespace   命名空间

spring.cloud.nacos.discovery.access-key   阿里云账户访问秘钥

spring.cloud.nacos.discovery.secret-key   阿里云账户秘钥

spring.cloud,nacos.discovery.metadata   元数据  , 可以使用key-value格式定义一些元数据

spring.cloud.nacos.discovery.cluster-name Default 集群名称

spring.cloud.nacos.discovery.register-enabled 该项目是否向注册中心注册服务,默认为true

注:如果服务从注册中心只消费服务,没有对外提供服务,那么该值可设置为false,可减少客户端线程池的创建,无需向服务端发送心跳请求,提高性能。

spring.cloud.nacos.discovery.watch-delay: 默认为30s。客户端在启动时会创建一个线程池,该线程定期去查询服务端的信息列表,该请求不会立刻返回,默认等待30s,若在30s内,服务端信息列表发生变化,则该请求立刻返回,通知客户端拉取服务端的服务信息列表,若30s内,没有变化,则30s时该请求返回响应,客户端服务列表不变,再次发生该请求。

pring.cloud.nacos.discovery.watch.enabled: 默认为true,开启监听服务端信息列表变化功能

ribbon.nacos.enabled true 是否集成ribbon 

spring.cloud.nacos.config.server.addr   配置中心地址

spring.cloud.nacos.config.name   首先使用配置的前缀,然后再使用名称,最后使用spring.application.name

spring.cloud.nacos.config.prefix   首先使用配置的前缀,然后再使用名称,最后使用spring.application.name

spring.cloud.nacos.config.group DEFAULT_GROUP nacos的组配置

spring.cloud.nacos.config.file-extension properties data id的后缀

spring.cloud.nacos.config.timeout 3000 从nacos获取配置超时时间

spring.cloud.nacos.config.namespace   命名空间

spring.cloud.nacos.config.contentPath   Nacos server的上下文路径

spring.cloud.nacos.config.sharedDataids   共享配置的dataid , 共享配置的数据标记,用","分隔

spring.cloud.nacos.config.refreshableDataids   共享配置的动态刷新dataid , 共享配置的动态刷新数据标记, 用","分隔

 spring.cloud.nacos.config.enabled  false表示完全关闭配置中心配置

 

代码:

启动类

@SpringBootApplication(scanBasePackages= {"com.dhap"})	
@EnableDiscoveryClient	
public class Application {	
    public static void main(String [] args){	
        SpringApplication.run(Application.class, args);	
    }	
}

@EnableDiscoveryClient开启服务注册与发现功能

 

注册中心

加入依赖:

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

配置文件

spring:
  application:
    name: order
  cloud:
    nacos:
     discovery:
      server-addr: 192.168.0.68:8848  #不用写协议

启动类:

@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

}

启动项目,就可以看到注册的项目了

配置中心

1、配置文件的缺点

(1)生产环境的数据库的用户名和密码都配置在配置文件中,所有开发人员都能看到密码,这就造成了一定的安全隐患;

(2)配置文件修改之后服务必须重启才可以生效,若生产环境上有一个开关需要打开,修改完配置文件再重启服务,那风险太大了;

2、配置中心的特点

  • 实现不同环境不同配置的统一管理;
  • 配置属性修改后自动刷新;

使用

加入依赖:

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

修改bootstrap.yml 配置文件

spring:
  cloud:
    nacos:
      config:
        server-addr: 192.168.172.20:8848
        file-extension: yml
  application:
    name: order-center
  profiles:
    active: dev

(1)配置文件的说明:

spring.cloud.nacos.config.server-addr=192.168.1.1:8848,表示微服务从哪个配置中心上拉取配置;

spring.cloud.nacos.config.file-extension=yml,表示文件的扩展名;

spring.application.name=order-center,表示当前服务向配置中心索要 order-center 的配置;

spring.profiles.active=dev,表示像配置中心索要哪个环境的配置;

索要文件的格式为:

{spring.application.name}-{spring.profiles.active}.{spring.cloud.nacos.config.file-extension}

以上配置,向配置中心拉取的配置的 dataId 的名称为: order-center-dev.yml

在 nacos 的配置列表中增加一个 Data ID 名为 order-center-dev.yml 的配置

步骤4:在Controller类上增加 @RefreshScope 注解,使配置进行动态刷新

@RestController
@Slf4j
@RefreshScope
public class OrderController {

	@Value("${open.version}")
	private String version;
}

如果不用@RefreshScope注解,使用@ConfigurationProperties也可以进行动态加载配置,如

@Data
@ConfigurationProperties("open")
public class MyServerProperties {
    private String version;
}

配置文件配置覆盖nacos配置

在项目中使用了 SpringCloud 配置中心模式时远程配置的优先级默认高于本地配置,如果想要通过本地配置改变远程配置一定要在远程配置(nocos上的配置文件)中做一下配置:

spring:
  cloud:
    config:
      # 如果本地配置优先级高,那么 override-none 设置为 true,包括系统环境变量、本地配置文件等配置
      override-none: true
      # 如果想要远程配置优先级高,那么 allow-override 设置为 false,如果想要本地配置优先级高那么 allow-override 设置为 true
      allow-override: true
      # 只有系统环境变量或者系统属性才能覆盖远程配置文件的配置,本地配置文件中配置优先级低于远程配置;注意本地配置文件不是系统属性
      override-system-properties: false

这样项目启动的时候加载系统配置文件和远程配置文件,对于系统配置和远程配置中相同的配置,系统配置覆盖远程配置;且远程配置文件修改不能动态加载。

通用配置:

(1)同一个服务的通用配置

通常我们的开发在开发环境、测试环境、生产环境都有很多相同的配置,使用注册中心怎么配置呢?

 

在配置中心新增一个不带 profiles 的配置,格式如下:

{spring.application.name}.{spring.cloud.nacos.config.file-extension}

那针对以上的配置,Data ID 的名称命名为:order-center.yml

我们创建的 order-center.yml 配置就是通用配置,不管启动 dev,还是prod,都会加载该配置中的内容。

 

配置的优先级:精准配置 会覆盖 与通用配置 相同的配置,然后再和通用配置互补。

不同服务的通用配置

我们两个服务 order-center 和 product-center 都会注册到同一个注册中心上,那么他们的注册中心配置就是一样的,我们可以给不同服务设置通用配置。

 

步骤1:配置文件中增加 shared-dataids 和 refreshable-dataids 配置

同一个配置项先加载后面的,可以在服务启动类中查看。

说明:order-center-dev.yml 精准匹配;order-center.yml 同工程不同环境的通用配置;shared-dataids 不同工程通用配置;

步骤2:在nacos的配置列表中新增配置,common.yml 和 common2.yml

nacos控制台

官网:https://nacos.io/zh-cn/docs/console-guide.html

服务管理

点击详情可以进行修改

点击实例对应的操作,可以进行修改实例的设置

上下线服务:(可以控制服务是否可以被发现,并不会停止对应的服务)

权重:如果想增加实例的流量,可以将权重调大,如果不想实例接收流量,则可以将权重设为0。

实例元数据:这些信息都是以K-V的数据结构存储,在控制台上,会以k1=v1,k2=v2这样的格式展示。

元数据说明

元数据作用:

1.提供描述信息

 

2.让微服务调用更加灵活

     例如:微服务版本控制

      在现实开发中我们每个服务可能有多个版本V1、V2。。。 比如,用户服务的v2 只能 调用订单服务的v2,这种场景就适合用元数据来解决。

级别:【服务级别、集群级别、实例级别】 其中前两个级别的元数据没太大作用,暂时可以不关注

实例级别的元数据:

我们服务的配置文件中可以进行定义元数据,定义的内容会在nacos控制台的服务详情中的实例列表中看到

配置管理

Nacos支持基于Namespace和Group的配置分组管理,以便用户更灵活的根据自己的需要按照环境或者应用、模块等分组管理微服务以及Spring的大量配置,在配置管理中主要提供了配置历史版本、回滚、订阅者查询等核心管理能力。

历史版本可以查看历史的配置信息,回滚可以回滚配置到指定历史版本

 

配置模型:

namespace + group + dataId 唯一确定一个配置

namespace:与client绑定,一个clinet对应到一个namespace,可用来隔离环境或区分租户

group:分组,区分业务

dataId:配置的id

 

数据存储:

Nacos配置中心的数据存储支持内嵌的derby数据库,也支持外部数据库mysql,内嵌数据库主要是为了单机测试时使用。

本站部分内容转载自互联网,如果有网站内容侵犯了您的权益,可直接联系我们删除,感谢支持!