时隔多年,重新自己折腾springcloud,视角成熟了很多。在zookeeper、eureka、etcd、nacos等几个注册中心中,最后选中了nacos作为注册中心。为什么呢?也是填过一些坑:
官方链接
其实在官网我们可以找到它的github,然后找到对应版本的压缩包下载。2.1.0官方下载页面 之所以要正式说下载这事,是因为我在研究的过程中发现,nacos在数据库方面仅支持mysql不支持postgresql。而pg是我这次的数据库选型,我也不想因为这个原因换,也不想因为这个原因引入mysql。
说实话,我觉得这是不正常的,毕竟postgresql的使用量位居世界第四。于是去nacos的issue里扒了扒。发现,官方似乎没打算支持postgresql。然后在网上又找到了很多改源码支持postgresql的帖子。添加postgresql支持的原贴 然后我发现它还打好了包放在了github上,好人呀。postgresql版nacos下载页 是的,我用的就是这个版本。最后的最后,我发现默认使用的是内置嵌入式数据库。算了,不折腾了,有需要再折腾postgresql数据源吧。
这里我没打算尝试集群部署,就单实例部署。压缩包解压后在nacos目录执行如下指令
sh bin/startup.sh -m standalone
我的操作系统是centos。在/lib/systemd/system/创建文件nacos.service
vim /lib/systemd/system/nacos.service
内容如下:
[Unit]
Description=nacos
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/sh /opt/nacos/bin/startup.sh -m standalone
PrivateTmp=true
[Install]
WantedBy=multi-user.target
注意EsecStart的指令中地址都是绝对地址。
然后执行如下指令
systemctl daemon-reload # 重新加载服务
systemctl start nacos # 启动服务
是的,这时会报错。原因是在startup.sh文件中\r是windows下的符号,在linux下不认。
执行如下指令:
sed -i 's/\r//g' /opt/nacos/bin/*
注意把/opt/nacos换成你的nacos目录。这个的目的就是把\r换成\n。
然后,还有个事,就是脚本里其实是找不到JAVA_HOME的。所以需要在startup.sh的第一行添加JAVA_HOME的声明,我的如下:
JAVA_HOME='/opt/jdk-11'
注意换成自己jdk的路径。再执行启动服务的指令,就会启动成功了。
systemctl enable nacos #设置开机启动
这个时候,开机启动设置成功。
浏览器里打开nacos的地址:
http://192.168.3.30:8848/nacos
默认用户名密码都是nacos。有管理界面用,还是很爽的。
我们这里的描述是建立在一个可运行的springbootweb服务上的。在此基础之上,我们再添加改动。也不多,大概也就以下几点:
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
2021.0.4.0
这里和我官网的区别是,我给了一个具体的版本。因为这个库是由阿里维护的,它并不会严格的追着spring的每个版本进行更新。因为我经历了几个小时痛苦的解决冲突的问题。最后我们公布适配的其它依赖。
在Application类上添加一个注解@EnableDiscoveryClient,如下:
@SpringBootApplication(exclude= DataSourceAutoConfiguration.class)
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
spring:
application:
name: service-provider
cloud:
nacos:
discovery:
server-addr: 192.168.3.30:8848
这里主要配置的是应用名字和注册中心地址
这里主要是springboot的版本,以及我在解决冲突时遇到的jackson-databind的冲突导致的类找不到。具体的依赖如下:
com.fasterxml.jackson.core
jackson-databind
2.12.2
org.springframework.boot
spring-boot-starter
2.6.11
org.springframework.boot
spring-boot-starter-web
2.6.11
可能还有其他的springboot系列的starter,尽量用2.6.x大版本的依赖。
后续的使用,动态更新配置后面调试到了再更新进来,暂时先到这里