Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。
Nacos的作用是作为微服务架构中注册中心(替代:eurekba、consul等传统方案)和配置中心(spring could config)来使用。Nacos拥有简洁易用的ui界面。
简单来说 Nacos 就是注册中心 + 配置中心的组合,提供简单易用的特性集,帮助我们解决微服务开发必会涉及到的服务注册与发现,服务配置,服务管理等问题。
为什么选择Nacos:
Eureka社区活跃性低(2.x版本闭源),它的社区活跃性高,中文文档,方便管理服务,支持控制台管理。
安装Nacos:
下载地址:https://github.com/alibaba/nacos/releases
选择需要的版本下载完成后解压(我选择的是1.1.4),根据不同的平台,执行不同的命令启动bin文件夹下的startup.cmd或者startup.sh启动文件:
Linux/Unix/Mac:sh startup.sh -m standalone
Windows : 双击startuo.cmd启动 :)
启动完成之后,访问:http://127.0.0.1:8848/nacos/
,(如果使用Nacos 0.8.0以上版本,会出现登录页面,默认用户名密码为:nacos)。可以进入Nacos的服务管理页面,具体如下:
在项目构建配置应用接入Nacos注册中心:
创建动态配置管理服务application-config(启动类为NacosConfigApplication),1.添加依赖:
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-config
${latest.version}
2.在bootstrap.properties中配置Nacos Server的地址和应用名:
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=application-config
说明:之所以需要配置spring.application.name,是因为它是构成 Nacos 配置管理的一部分
3.通过Spring Cloud原生注解@RefreshScope实现配置自动更新:
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping("/get")
public boolean get()
{
return useLocalCache;
}
}
4.首先调用Nacos Server Api向Nacos Server发布配置:dataId为example.properties,内容为useLocalCache=111
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=111"
通过cmd的方式调用需要下载curl并加入到环境变量
(这个调用Api的操作也可以通过界面的方式去新建配置)
ps:curl是一款开源的用于数据传输命令行工具与库。你可以利用它来进行HTTP/HTTPS请求、上传/下载文件等,且支持Cookie、认证、代理、限速等。
通过这个请求,Nacos会在配置列表菜单下新建一个dataId为example.properties的配置,内容为useLocalCache=111
5.运行NacosConfigApplication,调用 curl http://localhost:8080/config/get,返回的内容是111
6.再次调用Nacos Server Api向Nacos Server发布配置:dataId为example.properties,内容为useLocalCache=222
7.不用重启NacosCofigApplication,再次访问http:localhost:8080/config/get,返回的内容为222,说明程序中的useLocalCache值已经被动态更新了。
启动服务发现:
创建两个应用,一个服务提供者,一个服务消费者,消费者调用提供者的服务。
1.添加依赖
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
${latest.version}
2.添加并配置服务提供者,从而服务提供者可以通过Nacos的服务注册发现功能将其服务注册到Nacos Server上。
在application.properties中配置Nacos的地址:
server.port=8070
spring.application.name=server-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
通过Spring Cloud原生注解@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=server-consumer
spring.cloud.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);
}
}
}
4.启动ProviderApplication和ConsumerApplication,调用http://localhost:8080/echo/2019,返回内容为Hello Nacos Discovery 2019,服务调用成功。