项目中使用nacos报错了,线上环境是一个2.0.3版本的,我们的测试环境没有对应版本,需要自己本地搭建一个nacos用来进行校验。

项目下载

官网下载:发布历史 | Nacos 官网https://nacos.io/download/release-history/?spm=5238cd80.2ef5001f.0.0.3f613b7c4N2eci慢的要死,最后快下完了,告诉我没有权限。


我使用的gitcode里面下载的,速度还挺快。
gitcode 对应的2.0.4版本下载https://gitcode.com/Universal-Tool/f7bd9

项目配置:

nacos不支持内存数据库, 我只是要简单测试一下功能,为啥还需要持久化到mysql之类的啊!差评。

配置数据库。更改config目录下文件:application.properties

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://easy.host:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=xxx
db.password=xxx

数据库表初始化:

竟然启动之后不自己自动初始化对应的数据表结构,差评。

conf文件夹下两个文件。schema.sql和nacos-mysql.sql
使用schema.sql执行,提示我异常: generated by default as identity
我的mysql已经是今天刚从官网下载的最新版本了,竟然还不支持这个语法,无语中。

用nacos-mysql.sql执行。 好的数据初始化完毕。 

项目启动:

.\bin\startup.cmd  -m standalone

我无脑猜 .\bin\startup.cmd 竟然启动失败, 还需要添加对应的模式。

页面访问:

http://127.0.0.1:8848/nacos

账号:nacos 
密码:nacos
这次账号密码无脑猜中了。欣喜中。。。

nacos官网安装文档参考
Nacos 快速开始 | Nacos 官网https://nacos.io/docs/latest/quickstart/quick-start/?spm=5238cd80.2ef5001f.0.0.3f613b7c4N2eci

项目加载config等相关配置

官网上写的是application.properties. 我更改成了application.yml。

spring:
  cloud:
    nacos:
      config:
        server-addr: easy.host:8848
        file-extension: yml
        extension-configs:
          - application-dev.yml
        namespace: hussar-plugin-lxk
        refresh-enabled: true

竟然不生效, 怎么都没法把我指定的yml文件加载进去,只能加载它默认的properties文件。

后来在样例里面才发现写的是bootstrap.properties。我把application.yml重命名为bootstrap.yml  配置就能自动生效了, 如果有配置不生效的小伙伴,看一下用的是bootstrap还是application吧! 网上搜了一下bootstrap的加载优先级比application高, 所以像nacosi/阿波罗等配置获取就必须要放到bootstrap。 如果当作注册中心就随意放哪个地方都行了。 

nacos在springCloud中配置参考:Nacos config · alibaba/spring-cloud-alibaba Wiki · GitHub

看一下nacos怎么实现配置加载的。

入口类:META-INF 里面配置了:BootstrapConfiguration=NacosConfigBootstrapConfiguration

这个类将NacosPropertySourceLocator注入容器。

NacosPropertySourceLocator实现了PropertySourceLocator接口的locate方法。

locate方法里面构建了NacosPropertySourceBuilder类。

自己拼装或者从配置里面获取了dataId,group,服务地址等。组装完信息调用了loadNacosPropertySource方法,进行Builder类的build方法。

bulid方法里面进行配置项的加载, 根据NacosConfigService去调用nacos服务器,传递dataId等信息获取具体配置项。

注册中心的一个坑

注册中心支持手动下线, 这个真是一个好功能必须点赞。

但是手动下线后, 这个服务我重新启动,理论上来说已经是一个正常的好服务了,但是还是处于下线状态,并没有按照我理解的,重新加入的服务,状态自动识别为上线。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐