前言

nacos是目前的趋势,是应该研究一下,昨天因为某些原因,研究了一下配置,特定写个博客记录下,不含搭建方法等,只讲逻辑和配置

他是什么

首先要明白nacos是什么,看官网:

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

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

总结就是管理项目配置和微服务的,这里不说nacos各种的概念,没必要,讲讲在项目中的应用。

配置中心

我们可以把配置放在nacos上面,然后配过配置,去nacos拉取配置,然后所有的配置都可以在nacos上。

首先,导入pom依赖

1
2
3
4
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

配置说明

新建配置文件bootstrap.properties,并可以写入配置,如下

参数 默认值 配置说明
spring.cloud.nacos.config.enabled true 是否开启配置中心
spring.cloud.nacos.config.server-addr 配置中心地址
spring.cloud.nacos.config.access-key 当要上阿里云时,阿里云上面的一个云账号名
spring.cloud.nacos.config.secret-key 当要上阿里云时,阿里云上面的一个云账号密码
spring.cloud.nacos.config.context-path Nacos Server 对外暴露的 context path
spring.cloud.nacos.config.encode UTF-8 读取的配置内容对应的编码
spring.cloud.nacos.config.file-extension properties 配置文件后缀
spring.cloud.nacos.config.group DEFAULT_GROUP 配置对应的分组
spring.cloud.nacos.config.namespace 命名空间 常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等
spring.cloud.nacos.config.prefix spring.application.name 文件名前缀
spring.cloud.nacos.config.timeout 3000 客户端获取配置的超时时间(毫秒)
spring.cloud.nacos.config.username Nacos 认证用户
spring.cloud.nacos.config.password Nacos 认证密码
spring.cloud.nacos.config.max-retry 长轮询的重试次数 默认3
spring.cloud.nacos.config.config-retry-time 长轮询任务重试时间,单位为毫秒
spring.cloud.nacos.config.config-long-poll-timeout 长轮询的超时时间,单位为毫秒
spring.cloud.nacos.config.enable-remote-sync-config 监听器首次添加时拉取远端配置 默认false
spring.cloud.nacos.config.endpoint 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
spring.cloud.nacos.config.refresh-enabled true 是否开启监听和自动刷新

还有可以配置共享多个data Id的配置,我把握不住,就不说了。

如何配置

乍一看配置咋这么多呢,我要把这些都配置上去吗?duck不必!!!我们可以看他的配置如何设置的啊,我们在以配置中的选项,看配置文件怎么配置,看下图

image-20220225135958327

  • Data ID:设置配置的名称
  • Group:给配置分个组
  • 描述:说明这个配置是干嘛的
  • 配置格式:设置配置的后缀
  • 配置内容:具体你要配置的内容

看完上面的说明,我们明白了,可以指定配置的名称、后缀、分组,可以获取到一个配置。这不就完事了吗

具体配置

我们细想下,既然我想要使用配置中心,肯定要配置配置中心的ip啊,不然我怎么知道去哪里获取配置,于是先设置nacos的ip端口

1
spring.cloud.nacos.config.server-addr=ip:port

那我有配置中心,获取哪个配置啊,我们通过上面的分析,设置配置名称、后缀、分组即可

1
2
3
4
5
6
# 项目名称可以做配置名称
spring.application.name=项目名称
# 配置后缀
spring.cloud.nacos.config.file-extension=yaml
# 配置分组
spring.cloud.nacos.config.group=emm

然后就完事了,这是最基本的设置,甚至你的group也可以默认。就四个配置而已,其他的配置,看其他的情况添加即可。

1
2
3
4
5
6
7
spring.cloud.nacos.config.server-addr=ip:port
# 项目名称可以做配置名称
spring.application.name=项目名称
# 配置后缀
spring.cloud.nacos.config.file-extension=yaml
# 配置分组
spring.cloud.nacos.config.group=emm

最后,自己测试,这里就不多说明了。

命名空间

这个要单独拿出来说下,上面的是项目中的配置如何配置,在我们这边项目很多的时候,对应的配置就有很多,那么配置能不能也分下啊,所以,命名空间这个概念就出来了

image-20220225143827025

直接创建一个空间,然后在配置列表,点击新建的命名空间,在新建配置即可

image-20220225144050178

新建完配置后,可以在命名空间看到详情

image-20220225144155822

那么,怎么在项目使用呢?只需要新加个配置,填入命名空间ID即可

1
spring.cloud.nacos.config.namespace=命名空间ID

好了,配置中心的说明,感觉差不多了,感觉够用了。

服务注册中心

注册中心是什么,看官网说明:

服务发现是微服务架构体系中最关键的组件之一。如果尝试着用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于 服务的动态扩缩容。

Nacos Discovery Starter 可以帮助您将服务自动注册到 Nacos 服务端并且能够动态感知和刷新某个服务实例的服务列表。除此之外,Nacos Discovery Starter 也将服务实例自身的一些元数据信息-例如 host,port,健康检查URL,主页等-注册到 Nacos。

配置项 Key 默认值 说明
服务端地址 spring.cloud.nacos.discovery.server-addr Nacos Server 启动监听的ip地址和端口
服务名 spring.cloud.nacos.discovery.service ${spring.application.name} 给当前的服务命名
服务分组 spring.cloud.nacos.discovery.group DEFAULT_GROUP 设置服务所处的分组
权重 spring.cloud.nacos.discovery.weight 1 取值范围 1 到 100,数值越大,权重越大
网卡名 spring.cloud.nacos.discovery.network-interface 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址
注册的IP地址 spring.cloud.nacos.discovery.ip 优先级最高
注册的端口 spring.cloud.nacos.discovery.port -1 默认情况下不用配置,会自动探测
命名空间 spring.cloud.nacos.discovery.namespace 常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
AccessKey spring.cloud.nacos.discovery.access-key 当要上阿里云时,阿里云上面的一个云账号名
SecretKey spring.cloud.nacos.discovery.secret-key 当要上阿里云时,阿里云上面的一个云账号密码
Metadata spring.cloud.nacos.discovery.metadata 使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息
日志文件名 spring.cloud.nacos.discovery.log-name
集群 spring.cloud.nacos.discovery.cluster-name DEFAULT 配置成Nacos集群名称
接入点 spring.cloud.nacos.discovery.enpoint UTF-8 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
是否集成Ribbon ribbon.nacos.enabled true 一般都设置成true即可
是否开启Nacos Watch spring.cloud.nacos.discovery.watch.enabled true 可以设置成false来关闭 watch