最近了解到一个新东西,Nacos,是阿里巴巴的新开源项目,其核心定位是 “一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台”。
Nacos 的关键特性包括:
Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。
Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。
动态配置服务可以以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
动态 DNS 服务支持权重路由,更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。
… …
Nacos 依赖 Java 环境来运行。如果我们是从代码开始构建并运行Nacos,需要配置 Maven环境,并确保是在以下版本环境中安装使用:
官网当前推荐的稳定版本为1.3.1,我们可以通过下载源码或安装包的方式获取Nacos.
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/
我们也可以从https://github.com/alibaba/nacos/releases直接下载 nacos-server-$version.zip 包。
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
启动命令:
cmd startup.cmd
或者双击startup.cmd运行文件。
启动成功可以看到如下界面:
并且我们可以访问窗口输出的控制台地址:http://169.254.134.94:8848/nacos/index.html,看到管理平台页面:
在Nacos Server启动成功后,我们就可以在Spring Cloud 应用中使用 Nacos 实现服务注册和发现功能。
和之前学习使用其他注册中心一样,我们新建两个模块,命名为nacos-service-provider和nacos-service-invoker模块,如何在代码中集成,具体步骤如下:
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
2.1.1.RELEASE
注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
i. 在 application.properties 中配置 Nacos server 的地址:
server.port=8070
spring.application.name=nacos-service-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
ii. 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosServiceProviderApplication.class, args);
}
}
iii. 对外提供一个接口
/**
* @Description : Nacos服务注册demo控制类
* @Author : huzhiting
* @Date: 2020-08-22 10:01
*/
@RestController
public class HelloController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
i. 在 application.properties 中配置 Nacos server 的地址:
server.port=8080
spring.application.name=nacos-service-invoker
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
ii. 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能。
@SpringBootApplication
@EnableDiscoveryClient
public class NacosServiceInvokerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosServiceInvokerApplication.class, args);
}
}
iii. 提供服务消费者接口
/**
* @Description : nacos服务消费控制类
* @Author : huzhiting
* @Date: 2020-08-22 10:22
*/
@RestController
public class TestHelloController {
@Resource
private RestTemplateConfig restTemplateConfig;
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
return restTemplateConfig.restTemplate().getForObject("http://nacos-service-provider/echo/" + str, String.class);
}
}
服务启动成功后,我们可以在Nacos管理控制台服务列表看到服务已经注册成功,如下:
最后,我们可以通过invoker调用 http://localhost:8080/echo/2020接口,得到provider返回的内容为:Hello Nacos Discovery 2020
通过本篇博客,可以让我们对Nacos有一个大概了解,并通过服务注册与发现功能的demo实现掌握了与Spring Cloud项目的快速集成,Spring Cloud与Nacos集成代码已上传github。