Nacos真香,从零到一学起来

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

               ··············  END  ··············

感谢阅读,如果对你有帮助,请点个再看。欢迎大家加我微信,围观朋友区,做点赞之交,一起进步。想要进技术交流群的朋友,加我微信回复进群

参考资料

[1]

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自律的程度,决定你人生的高度

全世界只有3.14 % 的人关注了青少年数学之旅对于不少用户来说&#xff0c;微信已经成为了获取新资讯的重要途径之一。如何保证自己找到「值得看」的内容&#xff1f;每天更新的文章这么多&#xff0c;哪些才值得你看呢&#xff1f;今天就为大家推荐一些颜值与才华并存的好评公众…

标准MD5 .Net,实现!的对与错!

关键之处在,从byte到字符串的处理下面是一个错误的实现! /**//// <summary> /// 返回32位md5十六进制加密 /// </summary> /// <param name"strValue">待加密的字符串</param> /// <returns></return…

[导入]Asp.net中动态在中加入Scrpit标签

许久以前&#xff0c;写过一篇《asp.net页中动态加入样式表文件》&#xff0c;后来发现在使用时如果每页都写这么个函数真是很麻烦&#xff0c;于是自己写了一个Page的派生。将这个函数加了进去。/**////<summary>///作者 邹健 ///日期 20070202 ///重载的Page类。…

android 多布局

做为最后的方法&#xff0c;也是最后一个才会考虑的方法&#xff0c;那就是为不同的尺寸界面单独写布局。不到万不得已不要用这个方法&#xff0c;相信不少人和我一样都被逼着用过这个方法吧。需要说明的是&#xff0c;横竖屏切换使用不同布局也是用这个方法解决的&#xff1b;…

万万想不到:吸烟的辐射量比原子弹爆炸点还厉害!

全世界只有3.14 %的人关注了青少年数学之旅近日&#xff0c;外国视频网站上一段关于世界上辐射最高地点的短片火了起来。片中&#xff0c;一位外国小哥亲身探秘了那些广为人知的辐射地点如切尔诺贝利、福岛核电站等&#xff0c;并且给出了究竟哪里的辐射最高的结论。什么是辐射…

视频专辑:Hibernate 视频

为什么80%的码农都做不了架构师&#xff1f;>>> 专辑&#xff1a;Hibernate 视频 简介:郭宏志 Hibernate从入门到深入,郭宏志气主讲 1 郭宏志 Hibernate 01 简介 2013-10-29 13:50 | 播放(11) | 评论(0) | 时长:1:17:58 2 郭宏志 Hibernate 02 配置 2013-10-29…

人体的血管连起来竟能绕地球两圈!?| 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅你知道怎么回复吗&#xff1f;这五花肉真。。白啊来自唐代的敦煌文书。。。《放妻书》好像发现了点什么不可告人的秘密如果人体的血管首尾相连总长度约为96560.64千米大概可以绕地球2.5圈密集恐惧症表示已经qu世了&#xff08;图源网络…

云原生系统之弹性模式

大纲1.云原生系统的弹性模式resiliency pattern 1.1 服务故障的雪崩效应 1.2 回应之前云原生--弹性请求的疑问&#xff1f;2. 弹性模式&#xff1a;作用在下游请求消息上3. 短期中断的响应码4. Polly经典策略5. Golang 断路器模式德国哲学家尼采说过&#xff1a;那些杀…

js null加法的处理

首先看一段JS高级编程中&#xff0c;有关加法()操作符的解释&#xff1a;一个简单的测试&#xff1a;alert(3 null); // 3 alert(3 null); // 3null可见对于null的处理&#xff0c;并不是简单的取String。ecma262的定义如下&#xff1a;对第7、8步骤的理解&#xff1a;7. 如果…

符合WEB标准的div+css导航下拉菜单

<html xmlns"http://www.w3.org/1999/xhtml"lang"zh-CN"><head><meta http-equiv"Content-Type"content"text/html; charsetgb2312"/><title>52css.com - css菜单演示</title><style type"text…

深入DataGrid分页样式实例

DataGrid提供了分页功能&#xff0c;不过看上去功能有限&#xff0c;但是我们可以通过DataGrid的一些属性来获取状态以及增加首页、尾页功能按钮。这里没有使用DataGrid的自定义分页功能&#xff0c;如果在速度效率不是很讲究的情况下&#xff0c;由DataGrid自己管理分页还是不…

dotnet中的counter

打造一个完善的软件产品&#xff0c;准确完整实现业务是第一步&#xff0c;再有就是有优秀的性能&#xff0c;稳定的运行。为了能量化性能指标&#xff0c;需要利用工具&#xff0c;来收集这些数据&#xff0c;以便对产品作出代码级调整。先说一下.net中带一个全局工具&#xf…

与殿堂级大师隔空对话——一张纸是怎么限制了我们的想象力

▲ 点击查看七天假期&#xff0c;熊孩子在家捣乱的情况实在是太多啦&#xff0c;就一眨眼的功夫&#xff0c;满地的积木&#xff0c;到处都有&#xff0c;还有到处都是的纸张碎片&#xff0c;真真是十分的头疼&#xff01;在蚊子小时候&#xff0c;玩具远不如现在丰富&#x…

Redis学习手册(String数据类型)

2019独角兽企业重金招聘Python工程师标准>>> 一、概述&#xff1a; 字符串类型是Redis中最为基础的数据存储类型&#xff0c;它在Redis中是二进制安全的&#xff0c;这便意味着该类型可以接受任何格式的数据&#xff0c;如JPEG图像数据或Json对象描述信息等。…

DDD与批量操作

原文链接&#xff1a;https://enterprisecraftsmanship.com/posts/ddd-bulk-operations/将批量操作与领域驱动设计相结合是一个困难的问题。在这篇文章中&#xff0c;我们将看看为什么会这样&#xff0c;并讨论如何结合两个。本文也是对读者提问的回应。这个问题包含一个有趣的…

乔布斯死后的300亿遗产终于被败光了,没想到竟是干了这件事

全世界只有3.14 %的人关注了青少年数学之旅前段时间&#xff0c;果粉们翘首以待的科&#xff08;ping&#xff09;技&#xff08;guo&#xff09;界&#xff08;fa&#xff09;春&#xff08;bu&#xff09;晚&#xff08;hui&#xff09;又如期而至。每年一到新款 iPhone 发布…

博客群发(2)--实现登陆

模板方法 python也是一种面向对象的语言&#xff0c;所以在实现群发的时候&#xff0c;会登陆不同的网站&#xff0c;但是登陆的方法什么的不尽相同&#xff0c;所以这里想到的是模板方法。 模板方法模式&#xff1a; 应用特性&#xff1a;重复做相同逻辑的事情&#xff0c;但是…

flask取mysql数据很慢_[flask 优化] 由flask-bootstrap,flask-moment引起的访问速度慢的原因及解决办法...

一周时间快速阅读了400页的《javascript基础教程》&#xff0c;理解了主要概念。解决了一个很久之前的疑问。我的网站是使用flask框架搭建的&#xff0c;介绍flask web的一本著名的书(之前提到过)作者搭建个人博客时&#xff0c;向读者推荐了flask-bootstrap,flask_moment这两个…

运维管理工具-- Deploy Assistant

Deploy Assistant 好用的运维管理工具&#xff0c;目前只支持了docker,后续会继续开发手机端&#xff0c;以及其他的功能&#xff0c;如k8s,mysql,redis等。系统采用ssh登录Linux系统&#xff0c;调用docker api的模式开发&#xff0c;支持账号密码&#xff0c;证书登录 支持do…

空调冷冻水系统控制

空调冷冻水系统控制 张红霞 摘要&#xff1a;通过某大厦空调冷冻水系统控制的介绍&#xff0c;表明只有在空调设计人员提供了准确的控制、测量 参数的基础下&#xff0c;才能实现冷水机组自动控制的目的&#xff0c;满足空调的设计要求。 Control of Refrigerating Water Syste…