本文主要介绍 Spring Boot 集成 Nacos 实现服务发现和统一配置管理。
Spring Boot 集成 Nacos 实现服务发现
1、创建项目spring-boot-nacos,添加maven依赖:
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.10</version>
</dependency>
注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。
2、在 application.properties 中配置 Nacos server 的地址:
nacos.discovery.server-addr=127.0.0.1:8848
3、创建 DiscoveryController,使用 @NacosInjected 注入 Nacos 的 NamingService 实例:
@RestController
public class DiscoveryController {
@NacosInjected
private NamingService namingService;
@GetMapping("/discovery")
public List<Instance> discovery(@RequestParam String serviceName) throws NacosException {
return namingService.getAllInstances(serviceName);
}
}
4、启动项目,访问 http://127.0.0.1:8080/discovery?serviceName=spring-boot-nacos,此时返回为空 JSON 数组[]
。
5、向 Nacos Server 注册服务:
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?port=8080&healthy=true&ip=127.0.0.1&weight=1.0&serviceName=spring-boot-nacos&encoding=GBK&namespaceId=public'
本文采用 Nacos 服务端版本为 2.0.3,如果是 1.x 的版本则采用以下方式,否则会“caused: service not found‘:
curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=spring-boot-nacos&ip=127.0.0.1&port=8080'
6、再次访问 http://127.0.0.1:8080/discovery?serviceName=spring-boot-nacos ,此时返回内容为:
[{
"instanceId": "127.0.0.1#8080#DEFAULT#DEFAULT_GROUP@@spring-boot-nacos",
"ip": "127.0.0.1",
"port": 8080,
"weight": 1.0,
"healthy": true,
"enabled": true,
"ephemeral": true,
"clusterName": "DEFAULT",
"serviceName": "DEFAULT_GROUP@@spring-boot-nacos",
"metadata": {},
"instanceHeartBeatInterval": 5000,
"instanceHeartBeatTimeOut": 15000,
"ipDeleteTimeout": 30000,
"instanceIdGenerator": "simple"
}]
Spring Boot 集成 Nacos 实现统一配置管理
1、添加maven依赖:
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.10</version>
</dependency>
2、在 application.properties 中配置 Nacos server 的地址:
nacos.discovery.server-addr=127.0.0.1:8848
3、使用 @NacosPropertySource 加载 dataId 为 spring-boot-nacos-config 的配置源,并开启自动更新:
@SpringBootApplication
@NacosPropertySource(dataId = "spring-boot-nacos-config", autoRefreshed = true)
public class NacosApplication {
public static void main(String[] args) {
SpringApplication.run(NacosApplication.class, args);
}
}
4、通过 Nacos 的 @NacosValue 注解设置属性值:
@RestController
public class ConfigController {
@NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
private boolean useLocalCache;
@GetMapping("/config")
public boolean config(){
return useLocalCache;
}
}
5、启动项目,访问 http://127.0.0.1:8080/config,此时内容为 false。
6、向 Nacos Server 发布配置:
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=spring-boot-nacos-config&group=DEFAULT_GROUP&content=useLocalCache=true"
7、再次访问 http://127.0.0.1:8080/config,此时内容为 true,说明 useLocalCache 配置已经被动态更新了。
评论区