微服务初体验(二):使用Nacos作为配置中心并集成Dubbo
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务初体验(二):使用Nacos作为配置中心并集成Dubbo相关的知识,希望对你有一定的参考价值。
参考技术A 首先启动Nacos,按照上篇文章的步骤,启动Nacos服务和项目,访问Nacos的web页面。确保项目中的服务都注册到注册中心当中了。在application.yml同级目录下添加bootstrap.yml,在Spring boot项目中bootstrap.yml会比application.yml优先初始化,所以我们需要在bootstrap.yml中引入Nacos官方指定的配置文件即可(上篇文章中已经把Nacos作为配置中心的配置写入了application.yml,现在只需要把它从applicaiton.yml中剪切出来即可, 其中的spring:application:name会作为Nacos中新增配置时的Data ID,需要留意 ),再新增属性gorup进行分组测试,如下图
接着打开Nacos的服务的web页面,打开配置管理->配置列表,点击右侧新增按钮,进行新增。
Data ID: bootstrap.yml配置文件中spring:application:name对应的名称 ;
Group:指定分组(便于不同环境下的项目配置管理,因为笔者这里属于测试,所以填写的是和上文中的配置文件中group对应的test一致);
描述:针对于该配置的描述;
配置格式:配置文件的格式,要和Data ID中的后缀格式一致(这里笔者用的是yml,那么下面就选择yaml,注意该位置也可以选择properties,但是必须和上面bootstrap.yml文件中的file-extension的值相匹配);
配置内容:具体的配置内容(这里笔者将项目中的application.yml中的配置全部拷贝至其中);
测试启动consumer服务,在application.yml中为空的时候,项目启动端口还是如Nacos配置中的9011,说明项目依赖Nacos的配置中心成功,其他服务如法炮制即可:
新增一个测试Controller,然后加上@RefreshScope注解,表明该Controller中的配置数据为自动刷新 。
编辑Nacos中的配置文件consumer新增相关参数type: test,访问Controller,返回test。效果如下图:
将Nacos中consumer.yml文件的type: test修改为type: prod,在不重启项目的情况下重新访问对应的controller,效果如下图:
因为Dubbo是属于各个服务之间都要公用的依赖,所以将其引入cloud-common当中,详细的版本可以去 mvnrepository 搜索合适自己项目的
引入依赖后需要编写消费者服务中的配置文件,将Dubbo服务注册至Nacos,新增如下内容,其中subscribed-services指的是生产者服务,prot:-1指的是端口随机,registry:address:指的是Dubbo对应的注册中心那这里就应该设置为Nacos
接下来新增接口服务,项目类型为Maven项目,在项目中新增一个接口。并在cloud-provider(生产者)和cloud-consumer(消费者)pom.xml文件中都引入该模块
在生产者实际服务中实现该接口对应的方法
在服务消费者的Controller中引入该Service,并在该Service上加入@Reference注解,注意在引入jar包的时候选择带有Dubbo的,不要使用Jdk原生的
编写消费者服务中测试Dubbo调用的接口,进行测试,测试结果如下图:
nacos初体验-踩坑与填坑篇
最近在看 RuoYi 的分布式微服务架构权限管理系统,RuoYi 的注册中心和配置中心都是采用 alibaba 的 nacos,本文主要介绍使用 Windows10 电脑安装 nacos 1.3.2 以及启动 nacos 中遇到的一些问题以及解决方法。
一、下载 nacos 安装程序
1.1 下载 nacos
按照 nacos 官网的快速开始手册,下载 nacos 的方式有 2 种,第一种下载编译后压缩包的 nacos,第二种方式,直接在 github 上下载源程序,然后编译生成最终可执行的程序。
本次主要是安装 nacos,没有选择难度稍微较高的源程序编译的方式,直接选择下载已经编译后的程序包,从 nacos 最新稳定版本列表[1] 下载 nacos-server-$version.zip
包,这个过程比较简单,选择最新版本nacos-server-1.3.2.zip
下载。
编译后的压缩包有两种压缩方式,一种是 zip 压缩文件后缀,另外一种是 tar.gz 的压缩文件后缀,如果在 Windows 操作系统上,建议下载 zip 结尾的程序包,直接解压即可,tar.gz 后缀的文件使用 7zip 解压 2 次才算解压完成,通常在 linux 等操作系统更方便解压。除此之外,解压后的内容没有其他的差异,大家可以放心使用。
1.2 启动 nacos
nacos 提供两个启动脚本,分别是startup.cmd
和startup.sh
;由于使用 Windows 操作系统,选择直接执行startup.cmd
文件,在 nacos 快速开始手册中,建议双击startup.cmd
或者在命令窗口使用cmd startup.cmd
的方式,在这里使用 cmd 命令窗口,执行startup.cmd
命令。
**建议:**使用双击方式也可以启动 nacos,但是如果命令启动过程中出现错误,命令窗口会一闪而过,还需要通过查看日志才能知道出现哪些错误
**技巧:**在这里跟大家说一个小的技巧,在 cmd 窗口中如何快速到达指定文件目录,只需要指定的文件目录的文件导航窗口输入
cmd
回车即可。可以看到在 cmd 的文件目录直接到达指定的文件目录,避免不断的编写 cd 命令
二、出现问题列表
在执行启动命令的时候,大坑、小坑不断的出现,本章节主要通过罗列出现的问题,最后放出最优的解决方法。
2.1 小坑:在命令行执行 cmd startup.cmd
没有反应
在 nacos 官网文档中,Windows 操作系统启动 nacos 的命令
cmd startup.cmd
问题现象:
不知是否因为是 win10 的原因,建议阿里的相关程序员能够看到这,完善快速手册,避免小白踩坑。
解决方法:直接在 cmd 中输入startup.cmd
回车即可
2.2 大坑: 启动失败,提示java.io.IOException: java.lang.IllegalArgumentException: db.num is null
问题现象:控制台中出现db.num is null
的错误提示信息
解决方法:参考 nacos 的 issues 中找到了解决办法,需要在启动时,指定启动的模式
如果是非单机模式启动 默认使用 mysql 作为外置数据库,此时需要到 conf/application.properties 内添加 mysql 的相关配置参数。否则就会去找 jdbc.properties,两者都没有,那相当于依赖没有启动成功,自然就启动不起来。
解决方法是启动时加上 -p embedded 使用 derby + jraft 的内嵌数据库,或者-m standalone 启动单机模式
修改启动代码,可以在下面的代码中任选其一进行执行,在这里直接选择了单机模式。
# 使用derby +jraft的内嵌数据库启动集群模式
startup.cmd -p embedded
# 使用 -m standalone 启动单机模式
startup.cmd -m standalone
2.3 大大坑:使用 mysql 数据库的集群模式,提示java.net.UnknownHostException
使用 mysql 数据库启动集群模式,需要将相关的 sql 脚本在数据库中进行执行 **第一步:**创建数据库:nacos **第二步:**创建相关表,可以执行脚本conf/nacos-mysql.sql
,创建相关表以及导入相关数据 **第三步:**修改配置文件,修改conf/application.properties
,将 Config Module Related Configurations 注释的内容释放
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456
**第四步:**执行startup.cmd
问题出现了,在命令窗口中,出现了错误,提示java.net.UnknownHostException: jmenv.tbsite.net
解决方法
复制 conf/cluster.conf.example 到 conf/cluster.conf 设置 ip 和端口 重启服务
修改代码如下:
#it is ip
#example
127.0.0.1:8847
终于看到成功启动的标识了
三、验证一下
nacos 启动成功后,会启用一个 web 程序,默认端口号为:8848(珠穆拉玛峰的高度,还是阿里会找端口号),可以修改 conf/application.properties 中的server.port
设定自定义的端口号,直接访问 http://localhost:8848/nacos/
使用用户名:nacos,密码:nacos 可登陆系统
如果使用单机模式的情况,节点列表中只有一个节点 IP,截图中节点为启动集群模式,修改 conf/cluster.conf 后,启动 nacos,节点列表中会出现一个 down 的节点
这是因为该节点没有启动,只需要将 nacos 文件夹复制一份,修改 conf/application.properties 的server.port
,使用相同方式启动即可。
四、总结
在安装 nacos 遇到的问题,都可以在度娘中找到答案,由于 nacos 的不断更新,使用新版本的 nacos 遇到的问题,最好到nacos 的 github 主页[2]中 issue 搜索,基本上都可以找到解决办法,如果在度娘和 github 上都无法找到解决办法,需要我们深入 nacos 的源码,查看具体原因。
参考文献
-
Nacos 快速开始 [3] -
nacos1.3.2 无法启动 [4] -
Caused by: java.net.UnknownHostException: jmenv.tbsite.net [5]
参考资料
nacos 最新稳定版本列表: https://github.com/alibaba/nacos/releases
[2]nacos 的 github 主页: https://github.com/alibaba/nacos
[3]Nacos 快速开始: https://nacos.io/zh-cn/docs/quick-start.html
[4]nacos1.3.2 无法启动: https://github.com/alibaba/nacos/issues/3529
[5]Caused by: java.net.UnknownHostException: jmenv.tbsite.net: https://github.com/alibaba/nacos/issues/2902
以上是关于微服务初体验(二):使用Nacos作为配置中心并集成Dubbo的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud Alibaba 微服务2,注册中心演变 + Nacos注册中心与配置中心