通过WSL本地启动Nacos

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作为配置中心或者服务发现中心了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值