Nacos是阿里巴巴开源的微服务管理平台,可以帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。
这篇文章主要来讲一下Nacos作为配置中心和注册中心的使用。
1 安装
1.1 linux下安装
https://github.com/alibaba/nacos/releases/tag/2.0.2
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 配置中心
2.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 测试配置
@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页面,可以看到上面插入的配置,如下图:

点击"详情",可以看到配置数据,如下图:

curl -X POST "http://192.168.59.151:8848/nacos/v1/cs/configs?dataId=example-dev.properties&group=DEFAULT_GROUP&content=useLocalCache=false"

3 注册中心
3.1 配置服务提供者
1. 在pom文件中增加配置,如下:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${latest.version}</version>
</dependency>
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 一个问题
环境变量: https://blog.csdn.net/silence_fengxuan/article/details/105581366