什么是Nacos
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
官方介绍:https://nacos.io/zh-cn/docs/what-is-nacos.html
下载、启动Nacos
下载地址:https://github.com/alibaba/nacos/releases
下载最新版本后解压,截止作者撰写此文章,naco最新版本为1.0.0-RC3
。
目录如下图所示:
单机模式启动
进入bin
目录
Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
Windows
启动命令:
cmd startup.cmd
或者双击startup.cmd运行文件。
启动成功后如下图:
单机模式支持mysql
- 安装数据库,版本要求:5.6.5+
- 初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
- 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow
再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql
集群或多集群模式
参考官方文档:https://nacos.io/zh-cn/docs/deployment.html
Web 控制台
打开浏览器,输入 http://localhost:8848/nacos/index.html
初始账号、密码都为:nacos
配置管理&服务提供方
1.新建一个Spring Cloud工程,在pom
文件中添加以下依赖:
org.springframework.boot
spring-boot-starter-parent
2.0.5.RELEASE
org.springframework.cloud
spring-cloud-dependencies
Finchley.SR1
pom
import
org.springframework.cloud
spring-cloud-alibaba-dependencies
0.2.1.RELEASE
pom
import
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-config
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
2.在resource
目录下新建bootstrap.properties
文件并加入以下内容:
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=nacos-config
server.port=8000
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
配置nacos配置管理服务的地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
配置nacos服务注册的地址
spring.application.name=nacos-config
配置应用名
server.port=8000
配置应用端口
说明:之所以需要配置 spring.application.name
,是因为它是构成 Nacos 配置管理 dataId字段的一部分。
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
-
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。 -
spring.profile.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profile.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
-
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
3.通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新:
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${user.key:123456}")
private String userKey;
@RequestMapping("/get")
public String get() {
return userKey;
}
}
-
在nacos控制台新建如下配置:
运行项目,调用
curl http://localhost:8000/config/get
,返回内容是mykey
修改控制台配置内容
user.key = mykey2
,再次调用curl http://localhost:8000/config/get
,返回内容是mykey2
为应用加上
@EnableDiscoveryClient
注解来注册服务:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigApplication.class, args);
}
}
在控制台-服务列表 即可看到该服务已被注册:
服务消费方Rest+Feign
- 创建
nacos-consumer
工程,并在pom文件中添加以下依赖:
org.springframework.boot
spring-boot-starter-parent
2.0.5.RELEASE
org.springframework.cloud
spring-cloud-dependencies
Finchley.SR1
pom
import
org.springframework.cloud
spring-cloud-alibaba-dependencies
0.2.1.RELEASE
pom
import
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-openfeign
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
2.开启服务注册与Feign支持,并开启Ribbon
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosConsumerApplication {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
}
- 创建
FeignClient
@FeignClient(name = "nacos-config")
public interface ConfigFeignClient {
@RequestMapping(value = "/config/get", method = RequestMethod.GET)
String userKey();
}
- 创建Controller,消费nacos-config应用的服务:
@RestController
public class ConsumerController {
@Autowired
RestTemplate restTemplate;
@Autowired
ConfigFeignClient configFeignClient;
@RequestMapping(value = "/rest/userKey", method = RequestMethod.GET)
public String rest() {
return restTemplate.getForObject("http://nacos-config/config/get", String.class);
}
@RequestMapping(value = "/feign/userKey", method = RequestMethod.GET)
public String feign() {
return configFeignClient.userKey();
}
}
- 调用
http://localhost:8001/feign/userKey
或者http://localhost:8001/rest/userKey
,可以看到返回mykey2