戳这里,加关注哦~
SpringCloud整合Naco实现分布式环境下的配置管理和服务注册发现。
首先我们需要先下载并启动Nacos Server
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${latest.version}</version>
</dependency>
注意匹配Spring Boot和Nacos的版本,2.1.x.RELEASE对应的是Spring Boot2.1.x版本,2.0.x.RELEASE对应的是Spring Boot2.0.x版本,1.5.x.RELEASE对应的是Spring Boot1.5.x版本
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=demo
spring.application.name是构成Nacos配置管理的dataId的一部分
补充:Nacos配置管理dataId的完整格式:
${prefix}-${spring.properties.active}.${file-exetension}
RefreshScope
实现配置自动更新@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping("/get")
public boolean get() {
return useLocalCache;
}
}
4.通过调用Nacos Open API向Nacos Server发布配置:dataId 为demo.properties
,内容为useLocalCache=true
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=demo.properties&group=DEFAULT_GROUP&content=useLocalCache=true"
5.运行NacosConfigApplication,调用
curl http://localhost:8080/config/get
返回值:true
6.再次调用调用Nacos Open API向Nacos Server发布配置:dataId 为demo.properties
,内容为useLocalCache=false
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=demo.properties&group=DEFAULT_GROUP&content=useLocalCache=false"
http://localhost:8080/config/get
,此时返回内容为false
,说明程序中的useLocalCache
值已经被动态更新了。下边通过一个简单的例子演示在Spring Cloud 项目中启用Nacos的服务发现功能
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${latest.version}</version>
</dependency>
server.port=8070
spring.application.name=service-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
@EnableDiscoveryClient
开启服务注册发现功能@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
@RestController
class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
}
3.配置服务消费者,从而服务消费者可以通过Nacos的服务注册发现功能从Nacos Server上获取到它要调用的服务。
application.properties
中配置Nacos Server的地址server.port=8080
spring.application.name=service-consumer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
通过Spring Cloud原生注解EnableDiscoveryClient
开启服务注册发现功能,给RestTemplate实例添加@LoadBalanced
注解,开启@LoadBalanced
与Ribbon的集成
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
@RestController
public class TestController {
private final RestTemplate restTemplate;
@Autowired
public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
}
}
}
NacosProviderApplication
和NacosConsumerApplication
,调用http://localhost:8080/echo/demo
,返回内容Hello Nacos Discovery demo
这个Spring Cloud整合Nacos实现配置更新和服务注册发现的小demo,可以结合之前的Nacos文章练习