遇到了一个问题:Ide环境下正常运行,打包后无法运行 报错为nacos:****.yaml does not exist或****.yaml is empty。
先说结论:如果你的nacos不是单机启动,是cluster(集群)模式的。除了8848,端口9848 9849也要开放白名单。
下面来详细说说:
最近部署的时候遇到了一个问题,先说一下项目背景:
Nacos是集群,本来所有服务都部署在同一批云服务器中,所有服务走的内网通信,没遇到过什么问题。但是最近有个项目有点敏感,得专门拎一台外部的机器去部署。也不是啥大问题嘛。
正常提交打包更新部署,诶 出问题了。
(懒得去翻日志,直接找个包跑一下给大家看效果):
Config data resource 'NacosConfigDataResource{properties=NacosConfigProperties{serverAddr='***', encode='null', group='PROD_GROUP', prefix='null', fileExtension='yaml', timeout=3000, maxRetry='null', configLongPollTimeout='null', configRetryTime='null', enableRemoteSyncConfig=false, endpoint='null', namespace='****', accessKey='null', secretKey='null', ramRoleName='null', contextPath='null', clusterName='null', name='null'', shares=null, extensions=null, refreshEnabled=true}, optional=false, profiles=[Profiles@2ac273d3 active = '[prod]', default = '[default]', accepted = '[prod]'], config=NacosItemConfig{group='PROD_GROUP', dataId='****-prod.yaml', suffix='yaml', refreshEnabled=true, preference=null}}' via location 'nacos:****-prod.yaml' does not exist
字面意思:配置不存在。这不可能,IDE下跑的好好的,只是部一个外部服务而已,怎么会配置不存在。第一反应就是白名单没开?但是确认过 8848已经开放了白名单,试了一下也ping的通。然后就反复确认配置文件名、namespace名等等。但是想想也不会,肯定是都没问题的,不然开发的IDE也跑不了呐。
果断上百度搜,搜了一会儿也没找到好的解决问题,突然看到一篇提了一下偏移量。一下子想到GRPC的端口白名单没开。
除了8848,端口9848 9849也要开放白名单。开放了一下,OK解决。
那么除了基本的出错(比如命名空间错啦、bootstrap弄错啦啥啥啥的基本错误),大家在遇到这个问题的时候也要检查一下gRpc的端口白名单开放了没。nacos三个默认端口是8848、9848和9849。
- 8848是 Nacos 默认的 HTTP 端口,用于配置管理和服务发现的 RESTful API 请求。当你在客户端(如服务读取 Nacos 配置)时,通过 HTTP 协议连接到 Nacos 的 8848 端口。
- 9848 端口 (gRPC - SDK) 。客户端与 Nacos 服务器之间的 gRPC 通信会使用 9848 端口。你可以通过这个端口连接到 Nacos,并进行一些配置拉取或服务查询等操作。
- 9849 端口 (gRPC - 集群通信) Nacos 集群模式下,节点间的 gRPC 通信端口。在 Nacos 的集群模式中,各个 Nacos 节点之间需要通过 gRPC 协议来进行数据同步和状态更新,这个端口就是用来实现集群节点间的通信的。
所以其实如果只是客户端机器,和nacos之间只要开9848就行了。以上说的都是默认的哈。
也带大家看一下源码就理解了:
他有两个服务类。就我说的那俩服务类。可以看到这里是通过偏移量计算的。
默认是8848。然后默认偏移量是1000和1001。所以就是默认的9848和9849了。
希望能帮助到大家。