Nacos真香,从零到一学起来

本文转载自微信公众号「程序员jinjunzhu」,作者jinjunzhu。转载本文请联系程序员jinjunzhu公众号。

Nacos是阿里巴巴开源的微服务管理平台,可以帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。

这篇文章主要来讲一下Nacos作为配置中心和注册中心的使用。

1 安装

1.1 linux下安装

首先搭建一套单机版的Nacos集群。Nacos的安装有两种方式,一种是下载源码自己编译安装,另一种是下载编译后的压缩包解压后直接使用。

本文我采用第二种方式。

首先从官网下载安装包,下载地址如下:

  
 
 
 
  1. https://github.com/alibaba/nacos/releases/tag/2.0.2 

linux下安装可能会遇到环境变量的问题,可以参考这篇文章[1]。如果还不行,执行下面两个命令重新安装:

  
 
 
 
  1. yum erase java-1.* #删除原来的jdk 
  2. yum install java-1.8.0-openjdk* -y #重新安装jdk 

jdk没有问题后,启动Nacos,启动日志如下:

  
 
 
 
  1. [root@master bin]# sh startup.sh -m standalone 
  2. /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 
  3. nacos is starting with standalone 
  4. nacos is starting,you can check the /root/nacos/logs/start.out 

1.2 可视化界面

浏览器输入下面地址:

  
 
 
 
  1. 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. 在配置文件中加入下面的依赖:

  
 
 
 
  1.  
  2.     com.alibaba.cloud 
  3.     spring-cloud-starter-alibaba-nacos-config 
  4.     ${latest.version} 
  5.  

根据官网介绍,这里的 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的配置文件放在一个目录下,在这个文件中增加下面配置:

  
 
 
 
  1. #Nacos server地址 
  2. spring.cloud.nacos.config.server-addr=192.168.59.151:8848 
  3. #配置前缀,如果不配置,默认是spring.application.name 
  4. spring.cloud.nacos.config.prefix=example 
  5. #dataId后缀 
  6. spring.cloud.nacos.config.file-extension=properties 

在SpringCloud整合Nacos时,Nacos的dataId完整格式如下:

  
 
 
 
  1. ${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,如下面这段代码来自官网:

  
 
 
 
  1. @Controller 
  2. @RequestMapping("config") 
  3. @RefreshScope 
  4. public class ConfigController { 
  5.  
  6.     @Value("${useLocalCache:false}") 
  7.     private boolean useLocalCache; 
  8.  
  9.     @RequestMapping(value = "/get", method = GET) 
  10.     @ResponseBody 
  11.     public boolean get() { 
  12.         return useLocalCache; 
  13.     } 

这时往Nacos写入一个配置,命令如下:

  
 
 
 
  1. 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。

  
 
 
 
  1. 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文件中增加配置,如下:

  
 
 
 
  1.  
  2.     com.alibaba.cloud 
  3.     spring-cloud-starter-alibaba-nacos-discovery 
  4.     ${latest.version} 
  5.  

根据官网介绍,这里的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中增加下面配置:

  
 
 
 
  1. spring.cloud.nacos.discovery.server-addr=192.168.59.151:8848 

3. 在SpringBoot启动类上加上注解@EnableDiscoveryClient。

4. 为了区分服务名称,配置服务名称如下:

  
 
 
 
  1. spring.application.name=springboot-producer 

3.2 配置服务调用者

跟服务提供者配置类似,这里修改配置名称如下:

spring.application.name=springboot-consumer

3.3 测试

启动上面两个服务,登录Nacos页面,可以看到两个服务已经注册到Nacos。

在springboot-producer中增加一个Controller,代码如下:

  
 
 
 
  1. @Controller 
  2. @RequestMapping("/producer") 
  3. public class FeignTestController { 
  4.  
  5.     @RequestMapping("/result") 
  6.     @ResponseBody 
  7.     public String getResult() throws InterruptedException { 
  8.         return "success"; 
  9.     } 

在springboot-consumer中增加Feign调用,如下:

  
 
 
 
  1. @FeignClient(value = "springboot-producer", configuration = FeignMultipartSupportConfig.class) 
  2. public interface FeignAsEurekaClient { 
  3.     @GetMapping("/producer/result") 
  4.     String feignReadTimeout(); 

启动测试类,调用成功,返回"success"。

4 一个问题

由于我本地应用使用的数据库连接池是Hikaricp,修改配置中心的配置,通知本地应用时会报notify-error,日志上看是绑定数据库参数失败。这里应该改成druid连接池就可以了,有待验证。

当前名称:Nacos真香,从零到一学起来
本文路径:http://www.shufengxianlan.com/qtweb/news21/322621.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联