关键词:
Nacos是阿里巴巴开源的微服务管理平台,可以帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。
这篇文章主要来讲一下Nacos作为配置中心和注册中心的使用。
1 安装
1.1 linux下安装
首先搭建一套单机版的Nacos集群。Nacos的安装有两种方式,一种是下载源码自己编译安装,另一种是下载编译后的压缩包解压后直接使用。
本文我采用第二种方式。
首先从官网下载安装包,下载地址如下:
https://github.com/alibaba/nacos/releases/tag/2.0.2
linux下安装可能会遇到环境变量的问题,可以参考这篇文章[1]。如果还不行,执行下面两个命令重新安装:
yum erase java-1.* #删除原来的jdk
yum install java-1.8.0-openjdk* -y #重新安装jdk
jdk没有问题后,启动Nacos,启动日志如下:
[root@master bin]# sh startup.sh -m standalone
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/bin/java -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Djava.ext.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/lib/ext:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/lib/ext -Xloggc:/root/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/root/nacos/plugins/health,/root/nacos/plugins/cmdb -Dnacos.home=/root/nacos -jar /root/nacos/target/nacos-server.jar --spring.config.additional-location=file:/root/nacos/conf/ --logging.config=/root/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with standalone
nacos is starting,you can check the /root/nacos/logs/start.out
1.2 可视化界面
浏览器输入下面地址:
http://192.168.59.151:8848/nacos/index.html#/login
登录界面如下:
账号/密码:nacos/nacos,登录成功后如下图:
2 配置中心
Nacos可以方便地跟Spring、SpringBoot、SpringCloud、Docker、Dubbo、k8s等整合,本文主要使用SpringCloud来整合Nacos。
2.1 代码配置
1. 在配置文件中加入下面的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>$latest.version</version>
</dependency>
根据官网介绍,这里的 latest.version 对应 springboot 版本,比如 Nacos 2.1.x.RELEASE 版本对应 SpringBoot 2.1.x 版本,Nacos 2.0.x.RELEASE 版本对应 SpringBoot 2.0.x 版本。但x这个子版本号不一定要完全匹配,上面latest.version我本地SpringBoot使用2.1.6,Nacos使用2.1.4。
2. 添加一个bootstrap.properties文件,跟SpringBoot的配置文件放在一个目录下,在这个文件中增加下面配置:
#Nacos server地址
spring.cloud.nacos.config.server-addr=192.168.59.151:8848
#配置前缀,如果不配置,默认是spring.application.name
spring.cloud.nacos.config.prefix=example
#dataId后缀
spring.cloud.nacos.config.file-extension=properties
在SpringCloud整合Nacos时,Nacos的dataId完整格式如下:
$prefix-$spring.profiles.active.$file-extension
这里有两点需要注意:
spring.profiles.active即为当前环境对应的 profile
当 spring.profiles.active 为空时,对应的连接符-也将不存在,dataId的拼接格式变成
$prefix.$file-extension
file-exetension为配置内容的数据格式,目前只支持properties和yaml类型。
上面的配置,对应的 dataId 为 example-dev.properties。
2.2 测试配置
如果要实现配置自动刷新,只需要在代码类上加一个注解@RefreshScope,如下面这段代码来自官网:
@Controller
@RequestMapping("config")
@RefreshScope
public class ConfigController
@Value("$useLocalCache:false")
private boolean useLocalCache;
@RequestMapping(value = "/get", method = GET)
@ResponseBody
public boolean get()
return useLocalCache;
这时往Nacos写入一个配置,命令如下:
curl -X POST "http://192.168.59.151:8848/nacos/v1/cs/configs?dataId=example-dev.properties&group=DEFAULT_GROUP&content=useLocalCache=true"
这时进入Nacos页面,可以看到上面插入的配置,如下图:
点击"详情",可以看到配置数据,如下图:
这时如果使用api调用上面ConfigController的get方法,会返回true。如果使用下面的命令修改useLocalCache的值,再次调用get方法,会返回false。
curl -X POST "http://192.168.59.151:8848/nacos/v1/cs/configs?dataId=example-dev.properties&group=DEFAULT_GROUP&content=useLocalCache=false"
点击下图的示例代码,可以看到获取配置的代码,也就是上面Controller的代码。
3 注册中心
3.1 配置服务提供者
1. 在pom文件中增加配置,如下:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>$latest.version</version>
</dependency>
根据官网介绍,这里的latest.version对应springboot版本,比如Nacos 2.1.x.RELEASE版本对应SpringBoot 2.1.x版本,Nacos 2.0.x.RELEASE版本对应SpringBoot 2.0.x版本。这里我本地SpringBoot使用2.1.6,上面latest.version使用2.1.4。
2. 在application.properties中增加下面配置:
spring.cloud.nacos.discovery.server-addr=192.168.59.151:8848
3. 在SpringBoot启动类上加上注解@EnableDiscoveryClient。
4. 为了区分服务名称,配置服务名称如下:
spring.application.name=springboot-producer
3.2 配置服务调用者
跟服务提供者配置类似,这里修改配置名称如下:
spring.application.name=springboot-consumer
3.3 测试
启动上面两个服务,登录Nacos页面,可以看到两个服务已经注册到Nacos。
在springboot-producer中增加一个Controller,代码如下:
@Controller
@RequestMapping("/producer")
public class FeignTestController
@RequestMapping("/result")
@ResponseBody
public String getResult() throws InterruptedException
return "success";
在springboot-consumer中增加Feign调用,如下:
@FeignClient(value = "springboot-producer", configuration = FeignMultipartSupportConfig.class)
public interface FeignAsEurekaClient
@GetMapping("/producer/result")
String feignReadTimeout();
启动测试类,调用成功,返回"success"。
4 一个问题
由于我本地应用使用的数据库连接池是Hikaricp,修改配置中心的配置,通知本地应用时会报notify-error,日志上看是绑定数据库参数失败。这里应该改成druid连接池就可以了,有待验证。
·············· END ··············
感谢阅读,如果对你有帮助,请点个再看。欢迎大家加我微信,围观朋友区,做点赞之交,一起进步。想要进技术交流群的朋友,加我微信回复进群。
参考资料
[1]
环境变量: https://blog.csdn.net/silence_fengxuan/article/details/105581366
zookeeper单节点部署,手把手从零到一(代码片段)
...及注意事项kafka戳这里:kafka单节点部署,手把手从零到一事前准备:1、一台Linux服务器或者是一台虚拟机2、准备好JDK环境3、安装好wget(当然也可以不用这个,只是用于下载安装包的一个工具,所以能下... 查看详情
javaweb从零到一会话技术cookie&session&jsp(代码片段)
🚀【JavaWeb从零到一】系列文章目录🚩【JavaWeb从零到一】前置知识🚩【JavaWeb从零到一】Mysql基础总结🚩【JavaWeb从零到一】JDBC详解🚩【JavaWeb从零到一】JDBC连接池&JDBCTemplateCookie&Session&JSP🚀【JavaW... 查看详情
从零到一搭建react组件库(代码片段)
最近一直在捣鼓如何搭建React组件库,至于为什么会产生这个想法,主要是因为组件库对于前端生态来说究极重要,每一个着眼于长远发展、看重开发效率的的互联网公司基本上都会量身定制自己的组件库,它的好处不用多说。... 查看详情
linux计算机网络从零到一开始构建必看(代码片段)
Linux计算机网络从零到一开始构建在整个互联网中,计算之间的沟可能通需要跨越千山万水,层层加密解码。当前我们就来尝试粗浅剖析一下整个计算机网络的形成。形成与起源从现在回头看之前的网络形成过程,其... 查看详情
从零到一实现神经网络(python):二(代码片段)
目录问题引入神经网络的例子感知机中的信号传递机制单层感知机中输出层与输入层之间的函数关系阶跃函数神经网络中的信号传递机制神经网络中的符号利用线性代数对数学而表达式进行优化numpy的广播机制激活函数登场sigmoid... 查看详情
从零到一写一个完整的compose版本的天气(代码片段)
忍不了了最近在手机上看天气的时候发现一堆广告,烦得要死,一个天气app,我想要的只是查看下天气,结果钢筋天气应用就给我来个开屏广告,好家伙,原来我这么喜欢广告吗???开屏广告... 查看详情
从零到一学习flutter——布局(代码片段)
环境开发机器:Mac$flutterdoctorDoctorsummary(toseealldetails,runflutterdoctor-v):[✓]Flutter(Channelstable,3.7.1,onmacOS13.122C65darwin-arm64,localezh-Hans-CN)安装环境的流程就不重复写了,可以参考官方文档进行安装。第一个应用我们直接用fluttercreatetestapp... 查看详情
c语言拯救新手,半小时从零到一认识c语言基础(代码片段)
目录前言一、环境1.1安装Dev-C++1.2首次使用配置二、Hellobaiyu三、变量及赋值四、数据类型4.1基本数据类型五、格式化输出5.1整数5.2字符及字符串5.3小结六、运算符6.1算术运算符6.2关系运算符6.3逻辑运算符七、程序结构7.1顺... 查看详情
长安链从零到一部署-chainmaker-v2.1.0(代码片段)
如何通过长安链快速部署区块链系统文章目录长安链从零到一源码部署一、环境及概念1.1、环境依赖1.2、相关概念二、环境安装2.1、配置sudo权限2.2、修改源2.3、安装git2.4、安装golang2.5、安装docker2.6、安装GLIBC_2.18【若运行时找不... 查看详情
从零到一学习flutter——状态和路由(代码片段)
背景前文提到了Widget的状态,在Flutter中一切都是Widget,那么由Widget组成的页面,会有很多复杂的父子关系,要想交互友好,则需要这些Widget进行通讯,也就是所谓的状态管理。同时在了解了布局之后,我们会写出很多的页面,... 查看详情
游戏开发高阶从零到一教你unity使用tolua实现热更新(含demo工程|luaframework|增量|hotupdate)(代码片段)
文章目录零、前言一、我做的热更新Demo1、效果演示2、流程图3、工程源码二、为什么要有热更新三、Unity如何支持热更新1、热更C#代码2、热更lua代码与资源四、Unity中集成tolua框架:LuaFramewrk1、下载tolua框架:LuaFramewrk2、打开tolua框... 查看详情
游戏开发高阶从零到一教你unity使用tolua实现热更新(含demo工程|luaframework|增量|hotupdate)(代码片段)
文章目录零、前言一、我做的热更新Demo1、效果演示2、流程图3、工程源码二、为什么要有热更新三、Unity如何支持热更新1、热更C#代码2、热更lua代码与资源四、Unity中集成tolua框架:LuaFramewrk1、下载tolua框架:LuaFramewrk2、打开tolua框... 查看详情
从零到一:入职周记
...开始工作!对于我来说,一切都是新的,全部都是开始。从零开始,自己迈出了第一步。 下午2点半开始,搬了一台电脑,随便给我分配了一个座位,开始安装工作环境。首先,理清了以下该电脑的磁盘,看了以下以前工作... 查看详情
从零到一:如何熟悉项目?
进入一家新的公司,一般来说不会那么巧合就遇到项目刚好开始,最多的情况就是加入一个已经处于开发之中的项目。作为一名开发人员,我是这样来熟悉一个陌生的项目的。一.主要技术:了解项目所用的主要框架技术。首先... 查看详情
从零到一:需求文档
加入一个项目组:开始开发一个全新的模块。对于开发流程,我有一点自己的理解,现在先记录下来,在以后的工作中觉得有什么不妥的地方,就做相应的改进。第一步:需求文档,每个项目开始都应该有相应的需求文档。需求... 查看详情
插件cinemachine之从零到一
插件Cinemachine的作用? 安装无他,就是通过PackageManager安装,官方支持,不确定是否要2019后才有PM ,如果Unity2018没有PM,也是可以新版本旧装的,但是对于初学者,还不如直接上Unity2019吧基础知识实战案例一,第三人称过... 查看详情
从零到一编码实现redis分布式锁(代码片段)
问:不是有redission等现成工具吗?咋不用?答:不,我就想自己写一个!陈建斌说:你这个男的怎么回事?!有的同学,就是这么尿性。也能理解,不自己弄一下,怎么能理解透彻,那就一起来搞一... 查看详情
设计模式从零到一之六大原则
一、单一职责原则(SingleResponsibilityPrincipe)简称是SRP。 单一职责原则的好处: 1、类的复杂性降低,实现什么职责都有清晰明确的定义; 2、可读性提高,复杂性降低,那当然... 查看详情