公司打算重构系统,于是我来了。 新系统打算采用微服务的方式搭建,于是,我们需要注册中心,之前我用过eureka,emmm,现在不更新了,于是PASS,然后同事说了下我们的主角:nacos。
简单介绍下:
1.注册中心:服务发现、注册,与spring cloud eureka类似;
2.配置中心:分布式配置中心,微服务架构下的服务可获取该配置中心的配置,作用与spring cloud config类似;
...
由于我需要的只是这两个功能,还有其他特性请看官网。
1.环境准备
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:
64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
2.下载
想要采用maven依赖的形式的同学,目前没有看到相关依赖,不排除以后有此方式启动。 官网下载源码:
git clone https://github.com/alibaba/nacos.git
//maven编译
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
当然我们源码启动,就不需要编译了。
3.启动
3.1修改数据库配置:
在console模块下,修改application.properties:
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456
修改数据库地址、用户名、密码。
3.2 启动
在console模块下,启动Nacos启动类:
查看日志:
重点来了,默认的启动方式是集群启动,由于我们没有进行配置,此时,服务注册是不成功的:
客户端注册会报connect time out错误!
但是此时,通过http://10.1.2.216:8848/nacos/index.html访问,是可以访问的,但是服务就是不能注册上去。这个真的是个大坑。
于是我在控制台打算手动创建一个服务,报错,空指针:
Caused by: java.lang.NullPointerException: null
at com.alibaba.nacos.naming.consistency.persistent.raft.RaftCore.signalPublish(RaftCore.java:195)
at com.alibaba.nacos.naming.consistency.persistent.raft.RaftConsistencyServiceImpl.put(RaftConsistencyServiceImpl.java:54)
... 86 common frames omitted
于是,断点:
找到元凶了,于是改为单机模式,添加启动项 -Dnacos.standalone=true:
启动成功,再看注册:
注册也没有问题,nice!
总结
可以看到,我们在默认启动的时候,走的是集群模式,而且又没有添加集群配置,导致找不到leader,注册访问失败。
ps:在源码启动失败时,也尝试过客户端跑jar启动(版本1.3.2),但还是失败,启动的模式也是集群模式:
报错是 Unable to start web server, 也没看出具体问题,然后改启动脚本,改为单机模式,ok!
据说我同事直接跑cmd脚本没问题,然后我一看日志,默认是单机启动,他的版本是1.3.1,8天前升1.3.2,emmm,我这运气。。。