作为Spring Cloud Alibaba的子项目Nacos近些年来成为了众多Spring Cloud项目提供注册与发现微服务的工具。本文将讲述从零开始搭建Nacos服务并集成到自己的服务中。Nacos开箱即用支持Dubbo,SpringBoot等,本文以SpringBoot为例进行讲述。
1.Nacos服务版本获取
首先我们可以在Nacos的github地址下载最新的代码并下载到本地并编译或者直接下载编译好的nacos服务jar包(最新版本为2.2.1,稳定版本为2.1.1推荐使用,nacos1.x版本将停止维护不推荐使用)。
2.环境配置
Nacos服务依赖JDK环境执行,具体环境依赖如下:
1) JDK 1.8+(64 bit)
2) Maven 3.2.x+
3) 支持 Linux/Unix/Mac/Windows(64 bit),推荐选用 Linux/Unix/Mac
4) 最低配置要求2核4G内存 60G磁盘空间
3.启动/关闭Nacos服务
1)创建Nacos数据库用户
2)将下载的Nacos包解压,打开目录下的conf目录application.properties文件,修改相关数据库地址
3)到bin目录下运行启动脚本,Win执行cmd脚本
startup.cmd -m standalone
Linux执行sh脚本
sh startup.sh -m standalone
4)关闭服务:执行bin目录下的关闭脚本,Win执行cmd脚本
shutdown.cmd
Linux执行sh脚本
sh shutdown.sh
4.打开Nacos页面
Nacos默认8848端口,如本地起服务打开127.0.0.1:8848/nacos即可打开页面
到此Nacos服务部署完成。
5.SpringBoot项目集成Nacos
在SpringBoot项目(2.x)maven依赖添加Nacos相关依赖并更新Maven
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>${latest.version}</version>
</dependency>
修改application.properties文件
nacos.config.server-addr=127.0.0.1:8848
spring.application.name作为注册服务的服务名,启动服务后可以在Nacos配置页面的中查看服务列表以确认是否正常注册。
在此可以获取SpringBoot项目集成Nacos的示例。
6.常见问题及解决方案
1)集群部署
打开Nacos目录的conf文件夹下的cluster.conf文件,在此文件中写入集群Nacos的ip端口,并执行启动脚本(启动脚本默认为集群模式),部署点数推荐为奇数。
2)命名空间
Nacos如未定义命名空间,默认为public,在Nacos配置页面可新建多个命名空间且空间ID唯一,在服务启动参数中添加以下参数指定命名空间,命名空间相互独立。
--spring.cloud.nacos.discovery.namespace=41864d7b-a77e-4a33-b2a3-3e9b0ea595d3
3)Full GC报错
修改或设置 XX:MetaspaceSize
的JVM启动参数:-XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M
7.Nacos特性
从此Naocs特性图可知Naocs支持相当多的主流框架,这也是为什么Nacos如此流行的原因之一,Nacos简化了服务的注册与发现并配置与管理。
Nacos优缺点:
优点:
1) 相比Eureka,Nacos提供动态上下线服务和踢出无效服务,当发现线上某个服务器状态异常时迅速下线或者因服务扩展时即时上线
2) 一套Nacos服务提供多命名空间以此实现在一个Nacos中有测试、仿真、生产等多个环境
3) Nacos基于轮询算法实现多服务的负载均衡
缺点:
Nacos对于用户和权限管理没有好的解决方案