简介
最近在自己搭建的单机nacos
使用中遇到的配置中心问题,这里做一个总结。
参考
SpringCloud Alibaba 2021版 nacos 配置中心教程
SpringBoot使用spring.config.import多种方式导入配置文件
解决 Spring Cloud 2021.0.5 版本,使用 nacos 做配置中心,报 No spring.config.import property has been defined 的问题
SpringCloud + Nacos 配合maven,进行环境(配置文件)的切换,dev/ prod/ test 三种环境
nacos从1.x升级到2.x需要注意的地方
Nacos使用2.0.1版本启动出现9848端口错误的解决方式(亲测有效)
放在最前
spring-cloud-alibaba版本说明
在使用spring-cloud-alibaba
之前一定要了解的版本说明,一定要使用官方推荐的版本对应关系,避免出现异常问题。
问题根源
本质上一句话:版本兼容
简单概括:1.x
版本nacos-client
能访问2.x
版本nacos-server
,但是2.x
版本nacos-client
不能访问1.x nacos-server
nacos2.x
与1.x
的变化还是挺大的,尤其是我在使用配置中心功能时,折磨我两天,怎么也没找到问题解决方法。更我奇怪的是之前学习nacos
时搭的一个项目能正常启动,注册并访问到配置文件,然而新搭建的项目就是各种问题,Could not resolve placeholder
,Connection refused: no further information: xxxxx:9848
等等报错,更关键的是我使用maven
管理项目环境,通过@@
的方式配置的配置文件,期间还一直怀疑是这个的原因。总之,查了许多博客,看了很多解决方案,也都尝试了,最终还是解决了。
问题总结
声明:我没有细抠本质,或是说源码,只是说我遇到问题的解决,帮助其他人避免这些问题。
版本统一
这个是必须的,一定要按照官方的版本对应关系引入,不然第一步就错了。
明确版本
明确版本后就是用对应的使用方式,nacos2.x
与1.x
,前面提到我怀疑过是因为maven
对环境配置所以导致我使用nacos
产生问题的,后来排查出不是它,也就不带maven
讨论了,SpringCloud + Nacos 配合maven,进行环境(配置文件)的切换,dev/ prod/ test 三种环境感兴趣的看这篇文章。
新特性及其使用(引用)
- 支持
spring.config.import
这里假设有一个配置文件(bootstrap.yml
),升级到新版本应该怎么配置呢
# bootstrap.yml
spring:
cloud:
nacos:
config:
name: test.yml
group: DEFAULT_GROUP
server-addr: 127.0.0.1:8848
extension-configs:
- dataId: test01.yml
group: group_01
- dataId: test02.yml
group: group_02
refresh: false
这两个配置是等价的
# application.yml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: 127.0.0.1:8848
config:
import:
- optional:nacos:test.yml # 监听 DEFAULT_GROUP:test.yml
- optional:nacos:test01.yml?group=group_01 # 覆盖默认 group,监听 group_01:test01.yml
- optional:nacos:test02.yml?group=group_02&refreshEnabled=false # 不开启动态刷新
- nacos:test03.yml # 在拉取nacos配置异常时会快速失败,会导致 spring 容器启动失败
注意事项:
如果使用 spring.config.import
就不能使用 bootstrap.yml/properties
引入配置的方式了 !!!
如果引入了spring-cloud-starter-alibaba-nacos-config
,并且使用 import
方式导入配置,项目启动时会自动检测是否引入了 nacos:条目
,如果没有 import nacos
条目,会出现如下错误:
The spring.config.import property is missing a nacos: entry
Action:
Add a spring.config.import=nacos: property to your configuration.
If configuration is not required add spring.config.import=optional:nacos: instead.
To disable this check, set spring.cloud.nacos.config.import-check.enabled=false.
你可以手动通设置 spring.cloud.nacos.config.import-check.enabled=false
关闭它,但是不建议这么做,这个功能可以帮助你检查是否引入多余依赖
假如想保留以前的使用方式 (bootstrap
引入配置),你只需要添加依赖 pring-cloud-starter-bootstrap
依赖,不需要修改一行代码
新版的配置方式是有些不同的,我的建议还是使用新版就遵循新版。
端口开放与配置建议
新版nacos
需要开放9848
端口。
生产建议的话,除了严格限制源ip
注册访问到nacos
外,建议有需要的加上权限访问配置,另外关于namespace
、group
、dataid
,建议如下:
namespace
:建议与git
常驻分支一致,如dev
、test
、pre
、prod
,一个命名空间下有着一整套类同于生产的服务和配置。
group
:建议与团队组织架构一致,如:技术研发部、中台研发部、后台研发部、客户端研发部、数据研发部等等,取其英文简称即可
dataid
:建议与项目名称一致,一般格式是xxx-xxx-xxx
,这个就自由一点了,约定一下就好,问题不大
Nacos naming推送失败/failedPush异常指标激增
Nacos naming推送失败数 · Issue #6841
Nacos集群failedPush异常指标激增 · Issue #8676
因为我是使用官网nacos
单节点docker-compose
部署方式部署的,另外带了prometheus
和grafana
,而且配置了nacos
监控和钉钉报警,所以也一直被这个问题困扰。文章来源:https://www.toymoban.com/news/detail-472232.html
如有类似疑问,先看上面Issue
,其实上面的没有给我太多帮助,反而将nacos重启一下就没问题,我猜测很有可能是之前错误注册后读取配置失败次数太多有关,我暂时也不想深究了。文章来源地址https://www.toymoban.com/news/detail-472232.html
到了这里,关于nacos配置中心遇到的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!