用阿里开源的 Nacos 搞微服务真香!


今天给大家带来一款开源 Java 版可以实现动态服务发现,配置和服务管理平台——Nacos,它是阿里巴巴团队开源符合国人的一切使用习惯,并且中文文档丰富,开源社区也特别活跃。
项目源码地址:https://github.com/alibaba/nacos
项目介绍
名称 | 配置中心 | 注册中心 | 依赖 | 访问协议 | 版本迭代 | 集成支持 | 上手程度 |
---|---|---|---|---|---|---|---|
Eureka | 不支持 | 支持 | 依赖ZooKeeper | HTTP | 无版本升级 | SpringCloud集成 | 容易,英文界面,不符合国人习惯 |
Consul | 支持 | 支持 | 不依赖其他组件 | HTTP/DNS | 版本迭代中 | SpringCloud、K8S | 复杂,英文界面,不符合国人习惯 |
Nacos | 支持 | 支持 | 不依赖其他组件 | HTTP/动态DNS/UDP | 版本迭代中 | Dubbo、SpringCloud、K8S | 极易,中文文档和社区,符合国人习惯 |
服务发现:支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的 Agent TODO 注册 Service 后,服务消费者可以使用 DNS TODO 或 HTTP&API 查找和发现服务。 服务健康监测:提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。 动态配置服务:动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。 动态 DNS 服务:动态 DNS 服务支持权重路由,使用者更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。 服务及其元数据管理:Nacos 能让使用者从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

SpringBoot 实战
配置中心:通过在 Nacos 上配置用户名,在不重启微服务的情况下实现动态获取配置信息功能。 注册中心:创建两个微服务:服务提供者和服务消费者,实现微服务间调用。消费者要调用提供者的接口,只需要声明提供者的微服务名称和接口的请求地址,Nacos 就可准确的找到到对应的接口。
一、运行 Nacos
unzip nacos-server-$version.zip #解压
cd nacos/bin
startup.cmd -m standalone #单机模式

二、配置中心
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--nacos-config的Spring cloud依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
spring:
application:
name: nacos-config
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
prefix: nacos-config
profiles:
active: dev

@RestController
@RefreshScope
public class ConfigController {
@Value("${username:wangzg}")
private String username;
@RequestMapping("/username")
public String userNameInfo() {
return username;
}
}

三、注册中心
创建服务提供者
@RestController
public class ProviderController {
@GetMapping("/sayHello")
public String sayHello(@RequestParam(value = "name",defaultValue = "helloWord")String sayHello){
return "tom say: " + sayHello;
}
}
创建服务消费者
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@FeignClient("nacos-provider")
public interface ProviderClient {
@GetMapping("/sayHello")
String sayHello(@RequestParam(value = "name", defaultValue = "wangzg", required = false) String name);
}
说明:FeignClient 注解传入的 name ,指定 FeignClient 的名称,如果项目使用了 Ribbon,name 属性会作为微服务的名称,用于服务发现。
创建 ConsumerController
@RestController
public class ConsumerController {
@Autowired
ProviderClient providerClient;
@GetMapping("/hi-feign")
public String hiFeign(){
return providerClient.sayHello("feign");
}
}
重启工程,在浏览器上访问 http://localhost:8090/hi-feign,可以在浏览器上展示正确的响应,这时 nacos-consumer 调用 nacos-provider 服务成功。
下面一张请求流转的时序图,这样理解清晰一些。
项目地址:https://github.com/hellowHuaairen/wangzgSpringBootTest
最后
微服务有四大特点:
小(微服务粒度小)
独(独立部署运行和扩展)
轻(系统简洁轻量化)
松(高内聚低耦合)
要完成一个复杂系统往往需要很多微服务单元,而衔接每个微服务,完成微服务的统一管理就非常有必要,所以集成服务管理中心和配置中心的产品就的就应运而生,而 Nacos 是其中的佼佼者!
教程至此,你应该也能对 Nacos 有一些了解!光看不练假把式,最快的学习方式莫过于模仿,再通过举一反三才能融会贯通。每一种新工具都是对老工具的革新,有兴趣的小伙伴可以参考我上面的案例,在实践中会发现更多乐趣!
更多精彩推荐
☞中国开源燃烧!Zilliz 获全球开源基础软件最大单笔融资 4300 万美元
点分享 点点赞 点在看
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

随时掌握互联网精彩
- 1 年轻干部一定要挺起脊梁冲锋在前 7913908
- 2 如台独突破红线我们将采取断然措施 7964630
- 3 普京同意停火提议 泽连斯基回应 7870680
- 4 你的民生“幸福账本” 请查收 7742441
- 5 海底捞小便门黄牛要抽20%补偿 7648336
- 6 今天数学浓度太高了 7511098
- 7 男子造谣顶流明星澳门输10亿被拘 7448764
- 8 真假鞋混卖 上海团伙获利超3000万 7339112
- 9 芯片界三巨头掌门人皆为华人 7262719
- 10 张宁手真硬 7124807