
Nacos是Spring Cloud Alibaba的重要一环,扮演着分布式配置中心和服务注册、服务发现的核心角色。
但是Nacos在Windows的运行貌似并不如Linux平台稳定,对于需要在Windows上开发的程序员简直就是折磨。
com.alibaba.nacos.api.exception.NacosException: Get data failed, key: com.alibaba.nacos.naming.iplist.public##DEFAULT_GROUP@@consumer...
at com.alibaba.nacos.naming.consistency.persistent.impl.PersistentServiceProcessor.get(PersistentServiceProcessor.java:290)
at com.alibaba.nacos.naming.consistency.persistent.impl.PersistentServiceProcessor.notifierDatumIfAbsent(PersistentServiceProcessor.java:337)
at com.alibaba.nacos.naming.consistency.persistent.impl.PersistentServiceProcessor.listen(PersistentServiceProcessor.java:298)
at com.alibaba.nacos.naming.consistency.persistent.PersistentConsistencyServiceDelegateImpl.listen(PersistentConsistencyServiceDelegateImpl.java:74)
at com.alibaba.nacos.naming.consistency.DelegateConsistencyServiceImpl.listen(DelegateConsistencyServiceImpl.java:71)
at com.alibaba.nacos.naming.core.ServiceManager.putServiceAndInit(ServiceManager.java:883)
at com.alibaba.nacos.naming.core.ServiceManager.createServiceIfAbsent(ServiceManager.java:482)
at com.alibaba.nacos.naming.core.ServiceManager.createEmptyService(ServiceManager.java:451)
at com.alibaba.nacos.naming.core.ServiceManager.registerInstance(ServiceManager.java:501)
at com.alibaba.nacos.naming.controllers.InstanceController.register(InstanceController.java:134)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
鬼知道NacosException是什么错误
我最近刚接手了一个已经上线了的项目,项目里面用到了Nacos作为服务注册中心。为了便于后续的开发调试,我尝试在本地Win10环境下搭建一套Nacos服务。
果然。。。。
Nacos服务运行起来之后,dubbo服务可以正常向Nacos注册,但是调用的时候,经常出现NacosException的错误,更尴尬的是这个错误还不是必现,非常影响开发效率。
可能Nacos项目本身热度有限,尝试搜索了一下怎么解决问题,无果。
薅掉了无数的头发,秃然想到,会不会是Nacos对Windows的支持有问题。如果真是这样,通过适用于 Linux 的 Windows 子系统(WSL)运行Nacos,问题也许就解决了。
各种折腾之后,通过在Win10安装Ubuntu,在Linux子系统中运行的Nacos再也没有出现NacosException错误了。
以下是我整理的完整教程,饱受折磨的同学可以在自己电脑上尝试一下。
1
安装WSL
Win10对于Linux子系统的支持已有多年,目前已经发布的WSL2,配合最新发布的Windows 终端,使用体验甚至优于通过XShell等工具连接远程Linux主机。
(一)
启用适用于 Linux 的 Windows 子系统
需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发,该步骤可能需要重启计算机。
以管理员身份打开 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
(二)
启用虚拟机功能
安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。
以管理员身份打开 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
(三)
下载 Linux 内核更新包
下载并安装 Linux 内核更新包:
// 下载地址
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
(四)
将 WSL 2 设置为默认版本
打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:
wsl --set-default-version 2
(五)
安装所选的 Linux 分发
在Win10应用商店搜索并下载你偏好的 Linux 分发版,安装过程中会要求你新建Linux系统的账号密码。

我选择了Ubuntu
(六)
安装 Windows 终端
同样,在Win10应用商店下载并安装 Windows 终端。

(七)
添加root密码
通过新安装的Windos终端打开Linux子系统,运行以下命令添加root密码:
sudo passwd root

2
配置JAVA环境
新装的Linux子系统并不带Java的运行环境,需要先安装Java并配置环境变量。
注:本节教程以Ubuntu系统下Java8为例,安装的为openjdk版本。
(一)
安装Java
使用Windows终端,连接linux子系统,运行下面的命令安装Java8:
sudo apt install openjdk-8-jre-headless
(二)
配置环境变量
首先使用以下命令,编辑系统文件:
vim /etc/environment
在打开的文件后面追加以下内容:
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
JRE_HOME="/usr/lib/jvm/java-8-openjdk-amd64/jre"
CLASSPATH=".;/usr/lib/jvm/java-8-openjdk-amd64/lib;/usr/lib/jvm/java-8-openjdk-amd64/jre/lib"
通过以下命令,在当前窗口重载环境变量:
source /etc/environment
3
安装运行Nacos
Nacos目前推出了2.0测试版本,但是我推荐安装1.4版本。大家可以在Nacos官网自由选择。
// Nacos官网
https://nacos.io/
注:本节教程以1.4版本为例。
(一)
下载Nacos
通过Windows终端连接Linux子系统后,运行以下命令,下载Nacos:
wget https://github.com/alibaba/nacos/releases/download/1.4.0/nacos-server-1.4.0.tar.gz
下载之后需要解压,解压命令为:
tar -zxvf nacos-server-1.4.0.tar.gz
(二)
运行Nacos
Nacos的运行支持单机和集群两种模式,默认为集群模式。这里以单机模式为例。
切换至/nacos/bin文件夹,运行命令如下:
sh startup.sh -m standalone
(三)
进入Nacos控制台
Nacos运行之后,虽然是运行在Linux子系统中,但是一样在可以在Windos中通过浏览器登录控制台。
//默认的登录地址
http://127.0.0.1:8848/nacos/index.htm
//默认的登录用户密码
nacos/nacos

本地运行的Nacos控制台
至此,可以配置本地项目,使用本地Nacos作为配置中心或者服务发现中心了。


1496

被折叠的 条评论
为什么被折叠?



