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)@ResponseBodypublic 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")@ResponseBodypublic 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连接池就可以了,有待验证。

参考资料

[1]

环境变量: https://blog.csdn.net/silence_fengxuan/article/details/105581366

Nacos真香,从零到一学起来相关推荐

  1. 微服务feignclient_搞微服务用阿里开源的 Nacos 真香啊

    本文适合有 Java 基础知识的人群 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列,今天给大家带来一款开源 Java 版可以实现动态服务发现, ...

  2. 汤不热真香,教练我要学这个动作

    汤不热一个有趣的动画效果学习. 别问我为什么上汤不热(猥琐脸),友尽! 正经事 Tumblr 分享成功会有这么个动画,觉得挺有意思,就扒出来看了看-- 第一感觉以为是 canvas 绘制的,后来发现居 ...

  3. 我学编程全靠B站了,真香(第二期)

    作者:阿秀 阿秀的校招笔记:https://interviewguide.cn 你好,我是阿秀. 上次给大家推荐了不少B站上的好视频,看得出来还是有不少B站大学的校友的,哈哈哈. 本来说这期给大家接着 ...

  4. 被自己的行为蠢哭了,意识到原因后真香!

    作者 | 零一 来源 | 前端印象 这两天在学习 node 相关的知识时,做出了一些错误的行为~ 在做用户登录相关业务时涉及到了 cookie.session 的存取,一搜就找到了 express-s ...

  5. 做了3年Excel报表,换了这个报表神器后,不禁感叹:国产真香

    作为一个在数据行业摸爬滚打十多年的老油条,初入行时的我和大部分人一样,也是从Excel学起做起,不到三个月我就把Excel用的很熟练了,学会了vlookup.filter等基本函数的用法以及数据透视表 ...

  6. Python做一个Kindle电子书下载助手,真香!

    哈喽,大家好,我是菜鸟哥! 大家有没有想过把亚马逊网站上的Kindle电子书下载到自己的电脑上? 今天分享的项目可以帮大家实现这一目的.该项目用Python开发,简单.好用.开源. 下面分享下项目的使 ...

  7. 最强Python编程神器,真香!

    来源: 软件测评说 大家好,我是 菜鸟哥. 记得上学那会儿,就喜欢折腾,其中印象深刻的一个就是在手机上写Python代码并运行Python. 当时,初学Python,躺在床上,上课都在写代码,确实挺好 ...

  8. 真香 用这七大Python效率工具

    原文链接:http://dwz-9.cn/1mhV_ 为了提高效率,我们在平时工作中常会用到一些Python的效率工具,Python作为比较老的编程语言,它可以实现日常工作的各种自动化.为了更便利的开 ...

  9. 真香!微软出 Go 语言教程了(中文版)

    作者:深圳湾码农 来源:开源最前线(ID:OpenSourceTop) " 阅读本文大概需要 3 分钟. " 最近,有一项关于 Go 开发者的调查报告发布,这份报告的主要亮点有以下 ...

最新文章

  1. wxWidgets:wxDataViewCtrl类用法
  2. ITK:将BinaryMorphologicalClosingFilter应用于给定LabelMap的一个LabelObject
  3. 工作75::一直报404
  4. Matlab适配器模式
  5. oracle数据库主主复制
  6. 具备这些特征,轻松进入互联网大厂成为web前端工程师
  7. Hibernate学习笔记之EHCache的配置
  8. idea 全部报错找不到包
  9. Kafka必须掌握的核心技术:Java基础入门期末考试
  10. 不属于计算机网络的资源词,计算机网络应用试题
  11. 看朋友日志发现的一个ios下block相关的内存管理问题,非常奇怪,请大家帮忙一起来回答!...
  12. html实现2048小游戏,html+css+js适合前端小白的实战全解(超详细)——2048小游戏(二)...
  13. c语言要计算20,用C语言计算1~20的阶乘之和
  14. 访问oracle索引需要什么权限,Oracle索引 权限
  15. vue + pdf.js实现浏览器查看pdf文件
  16. 动软DBUtility类库DbHelperSQLP实现多数据库连接
  17. 私钥记录-支付宝接入
  18. 广东惠州市县镇地图JSON文件
  19. Mysql数据库的引擎介绍
  20. H5与其他平台交互框架

热门文章

  1. Python的f-strings格式化
  2. oracle+linux+oel+6.9,用SecureCRT+Xming轻松远程实现linux的X DISPLAY
  3. PTA基础编程题目集-6-13 折半查找
  4. java -jar 未响应_Java 方法性能监控和统计工具 MyPerf4J
  5. 2019 ACM - ICPC 上海网络赛 E. Counting Sequences II (指数型生成函数)
  6. 星期几在c语言什么变量,计算任何一天是星期几的C语言源代码.
  7. 7-5 符号配对 (20 分)
  8. linux mint root激活,Linux mint root登录无声音的问题解决方法
  9. Java比较数量怎么比较_java - 如何在Java数量比较字符 - SO中文参考 - www.soinside.com...
  10. 通过mtd读写flash_关于如何在kernel起来之后通过直接dd读写nand flash分区来更新zImage的mtd问题...