Nacos是非常重要的微服务组件,也是大厂经常考察的内容,下面我就全面来详解Nacos@mikechen
Nacos介绍
Nacos是一个开源的动态服务发现、配置管理、和服务管理平台,它由阿里巴巴开发,旨在帮助更好地构建微服务应用。
Nacos作用功能
Nacos的作用,主要解决以下4大点:
- 服务注册与发现:允许应用程序自动注册自己的实例,并且能够动态地发现其他服务实例。
- 动态配置管理:支持将配置信息存储在Nacos中,并实时地动态更新应用程序的配置。
- 服务健康监测:Nacos可以监测注册的服务实例的健康状态,并及时地发现和移除不健康的实例。
- 服务路由和网关:Nacos可以集成到服务路由、和网关中,实现灵活的流量管理。
Nacos架构
Nacos架构,如下图所示:
主要包含,6大组件:
1、命名空间(Namespace)
用于隔离不同环境、或者不同团队的配置和服务,每个命名空间都有自己的配置信息、和服务注册表。
可以通过命名空间,实现不同环境(如:开发、测试、生产)之间的隔离。
2、服务注册中心
服务注册中心:负责管理服务实例的注册和发现,提供服务发现的API。
服务实例在启动时,向服务注册中心注册自己的信息,包括:服务名称、IP地址、端口号…等信息。
其他服务,可以通过服务注册中心查询可用的服务实例,并实现服务之间的通信、和调用。
3、配置管理中心
配置管理:主要用于管理动态配置信息,支持配置的读取、写入、和监听等操作。
配置管理中心,还提供了简单易用的API、和控制台,方便开发人员管理、和监控配置信息。
4、集群节点
Nacos采用分布式架构,可以部署多个节点以实现高可用性、和容错性。
集群节点之间。通过协调算法(如:RAFT),保持数据的一致性、和同步。
5、数据存储
数据存储,主要保证了配置信息、和服务注册信息的持久化、和可靠性。
Nacos使用可插拔的存储后端来存储,配置信息、服务注册信息等。
比如:MySQL、Oracle、Redis等作为存储后端。
6、客户端
客户端:用于与Nacos服务器进行通信的客户端库,负责:服务注册、配置获取等操作。
Nacos使用
1、添加依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
2、配置Nacos
spring: cloud: nacos: discovery: server-addr: localhost:8848 # Nacos服务器地址 namespace: your-namespace # 命名空间
3、创建应用
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello from Microservice!"; } }
运行你的应用程序,它将自动注册到Nacos服务器,你可以在Nacos的控制台中查看到你的服务。
4、服务发现
现在,让我们创建另一个微服务项目,它将使用Nacos来发现上面创建的微服务。
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class DiscoveryController { @Autowired private DiscoveryClient discoveryClient; @GetMapping("/discover") public List<ServiceInstance> discoverMicroservice() { return discoveryClient.getInstances("your-service-name"); } }
现在,你可以分别启动这两个微服务应用程序,并通过浏览器或其他HTTP客户端来测试它们。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!

后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》