Nacos源码启动(超详细)

Posted 【洛圣都五星好市民】

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nacos源码启动(超详细)相关的知识,希望对你有一定的参考价值。

一、Nacos下载

        下载地址:https://github.com/alibaba/nacos

        下载压缩包并解压,使用idea打开。

 

 二、尝试运行:

        找到console目录,Nacos类就是启动类(实际上就是springboot项目)

三:发现报错consistency.entity不存在 

         解决:

        1.将nacos的pom文件中的protobuf依赖版本换成新版本3.19.3

        2.clean清除之前编译的内容,再install

        install之后出现以下界面:

         3.发现com.alibaba.nacos.consistency包存在

四、再次运行:

        出现以下报错信息:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'consoleHealth' defined in file [D:\\Download\\nacos-develop\\console\\target\\classes\\com\\alibaba\\nacos\\console\\controller\\HealthController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'externalStoragePersistServiceImpl': Invocation of init method failed; nested exception is java.lang.RuntimeException: java.lang.RuntimeException: [db-load-error]load jdbc.properties error
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:745)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:420)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1317)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)
	at com.alibaba.nacos.Nacos.main(Nacos.java:35)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'externalStoragePersistServiceImpl': Invocation of init method failed; nested exception is java.lang.RuntimeException: java.lang.RuntimeException: [db-load-error]load jdbc.properties error
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1389)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1309)
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
	... 19 common frames omitted
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: [db-load-error]load jdbc.properties error
	at com.alibaba.nacos.config.server.service.datasource.DynamicDataSource.getDataSource(DynamicDataSource.java:60)
	at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalStoragePersistServiceImpl.init(ExternalStoragePersistServiceImpl.java:135)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
	... 32 common frames omitted
Caused by: java.lang.RuntimeException: [db-load-error]load jdbc.properties error
	at com.alibaba.nacos.config.server.service.datasource.ExternalDataSourceServiceImpl.init(ExternalDataSourceServiceImpl.java:109)
	at com.alibaba.nacos.config.server.service.datasource.DynamicDataSource.getDataSource(DynamicDataSource.java:55)
	... 40 common frames omitted

         报错原因:

                最后一个Cause by提到:[db-load-error]load jdbc.properties error,jdbc.properties异常,因为没有配置数据库mysql,所以报错。

        解决:打开console下的resources目录下的application.properties配置文件,配置连接数据库。(需提前在mysql数据库中准备nacos所对应的database)

        1.找到sql脚本

        

        2.在MySQL创建nacos的database,并执行以上sql脚本(12张表)

        

         3.在console下的application.properties配置文件中配置连接数据库

        对以下内容取消注释:

五、配置nacos单机启动

在此处配置nacos单机启动,写入以下内容:

-Dnacos.standalone=true

 再次启动

六、成功运行:

        再次启动nacos,看到成功启动: 

         访问http://localhost:8848/nacos/查看是否可以成功访问:

         看到以上界面,则证明nacos成功启动!!!

mac系统安装nacos,详细图文教程,解决启动不了nacos

第一步:下载

1、 点击这里去到nacos官网

2、选择前往Github

 3、进入Github下拉页面,点击此处可以下载历史版本

 4、选择需要的版本下载,此处试例nacos-server-1.4.2.zip

第二步:安装

 1、对文件进行解压,在终端执行

注意:压缩包路径!

(1) /User/canmi/Downloads是我存放的路径,需要根据你自己存放的路径进行更改

(2) nacos-server-1.4.2.zip是我下载的版本,需要根据你自己下载的版本进行更改

unzip /User/canmi/downloads/nacos-server-1.4.2.zip

 2、解压完成后,在终端通过cd nacos/bin  进入bin目录

 3、进入bin目录下,输入以下命令启动

sh startup.sh -m standalone

 4、nacos is starting with standalone表示启动成功

第三步:登陆nacos服务 

注意:如果页面打不开的小伙伴不要着急,继续往下看,最后有方法解决!

1、进入nacos登陆界面

使用此地址进入界面,http://127.0.0.1:8848/nacos/

账号密码均为nacos

2、登录成功后界面

第四步:关闭nacos

1、在终端进入bin目录使用sh shutdown.sh关闭nacos

 2、如使用上述方法关闭后,还可以访问nacos服务页面,则需要通过终端查询nacos进程号后杀死。

最终:解决访问不到nacos服务界面

1、查看日志(方法一)

在终端使用nacos路径进入logs目录(此处需要把我的路径换成你自己的路径)

使用 vi start.out命令查看日志信息

2、查看日志(方法二)

直接在文件夹打开nacos/logs/start.out

 3、查看日志信息

报错为:

nohup: /Library/Internet: No such file or directory

原因:

mac自带有一个JDK,如下图所示有两个,第一个就是系统自带的,第二个是自己安装的JDK,nacos所匹配到的JDK为系统自带的,也就是下图第一个,它的路径Internet Plug-Ins中存在一个空格,这个空格会导致shell脚本失效。

4、解决方法

(1) 在终端使用/usr/libexec/java_home -V命令查询自己安装的JDK路径

(2) 直接在文件夹打开nacos/bin/startup.sh

(3) 修改nacos的startup.sh文件,修改为如图所示

以上是关于Nacos源码启动(超详细)的主要内容,如果未能解决你的问题,请参考以下文章

超详细Nacos集群配置及Nginx反向代理教程!

微服务架构 *2.3 Spring Cloud 启动及加载配置文件源码分析(以 Nacos 为例)

Nacos源码解读与部署

4Nacos 配置中心源码解析之 服务端启动

4Nacos 配置中心源码解析之 服务端启动

4Nacos 配置中心源码解析之 服务端启动