⬆︎
×
TOC
Hyplus目录

Nacos注册中心基础教程

Nacos是阿里巴巴开源的动态服务发现、配置管理和服务治理平台,专为微服务架构设计。其核心功能包括服务注册与发现、动态配置管理、服务元数据管理及流量控制,支持多种协议和灵活的部署模式。

官网:nacos.io
GitHub:github.com/alibaba/nacos
文档:最新版文档

1 Nacos概述

Nacos通过一站式服务治理能力简化了微服务架构的开发与运维。核心功能包括服务注册与发现、动态配置管理,支持命名空间隔离、元数据管理及灰度发布等高级特性。通过合理配置安全策略(如鉴权、加密)和灵活使用负载均衡机制,可构建高可用、易扩展的分布式系统。开发时需注意版本兼容性(如Spring Boot 3.x需搭配Nacos 2.2.x),并遵循官方最佳实践以确保稳定性。


2 核心概念

  • 服务注册服务发现:服务提供者启动时向Nacos注册自身地址、端口等信息,消费者通过Nacos获取服务列表并动态调用。Nacos支持健康检查机制,自动剔除不可用实例。
  • 动态配置管理:配置以键值对形式存储在Nacos控制台,支持多环境隔离(命名空间)和版本管理。客户端可实时监听配置变更并自动刷新。
  • 命名空间分组:命名空间用于隔离不同环境(如开发、生产)的配置和服务,分组用于区分不同业务线或团队的资源,增强管理灵活性。

2 安装与部署

  1. 依赖环境:需安装JDK 1.8+和Maven 3.2.x+。
  2. 下载与启动:
    • 下载Nacos最新稳定版(如2.2.0),解压后进入bin目录。
    • 单机模式启动:sh startup.sh -m standalone(Linux/Mac)或startup.cmd -m standalone(Windows)。
    • 控制台访问:http://localhost:8848/nacos,默认账号密码为nacos/nacos
  3. 持久化配置:修改conf/application.properties,配置MySQL数据源以实现数据持久化。

3 服务注册与发现

3.1 服务提供者

  1. 添加依赖:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 配置文件(application.yml):
spring:
    application:
        name: service-provider
    cloud:
        nacos:
            discovery:
                server-addr: localhost:8848
  1. 启动类添加注解:
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}
  1. 提供REST接口:
@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello from Nacos!";
    }
}

3.2 服务消费者

  1. 添加依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
  1. 配置文件application.yml):
spring:
    application:
        name: service-consumer
    cloud:
        nacos:
            discovery:
                server-addr: localhost:8848
  1. 使用RestTemplate调用:
@RestController
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/call")
    public String call() {
        return restTemplate.getForObject("http://service-provider/hello", String.class);
    }
}
  1. 注册RestTemplate
@Configuration
public class RestTemplateConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

4 动态配置管理

4.1 配置中心使用

  1. 添加依赖:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 配置文件(bootstrap.yml):
spring:
    application:
        name: config-client
    cloud:
        nacos:
            config:
                server-addr: localhost:8848
                file-extension: yaml
  1. 在Nacos控制台创建配置:
    • Data ID:config-client.yaml
    • 内容:
server:
    port: 8081
custom:
    message: "Hello from Nacos Config"

4.2 动态刷新配置

  1. 使用@Value注入配置:
@RestController
@RefreshScope
public class ConfigController {
    @Value("${custom.message}")
    private String message;

    @GetMapping("/config")
    public String getConfig() {
        return message;
    }
}
  1. 修改Nacos配置后,接口返回值自动更新。

5 安全配置

  1. 开启鉴权:修改application.properties,设置nacos.core.auth.enabled=true,并配置自定义密钥nacos.core.auth.plugin.nacos.token.secret.key
  2. 修改默认密码:在控制台“权限管理”中更新管理员账号密码。
  3. 传输加密:启用TLS加密,配置server.ssl.key-storeserver.ssl.key-store-password
  4. 网络隔离:生产环境中Nacos应部署在内网,避免直接暴露公网。

6 高级特性

6.1 服务元数据管理

  • 设置元数据:在服务注册时添加自定义信息,如版本号、权重:
@Bean
public NacosDiscoveryProperties nacosDiscoveryProperties() {
    NacosDiscoveryProperties properties = new NacosDiscoveryProperties();
    properties.setMetadata(Collections.singletonMap("version", "v1.0"));
    return properties;
}
  • 读取元数据:通过DiscoveryClient获取实例信息:
@Autowired
private DiscoveryClient discoveryClient;

@GetMapping("/metadata")
public String getMetadata() {
    List<ServiceInstance> instances = discoveryClient.getInstances("service-provider");
    return instances.get(0).getMetadata().get("version");
}

6.2 灰度发布

  1. 设置实例标签:在服务注册时添加标签(如version: v2)。
  2. 自定义负载均衡策略:
@Configuration
public class GrayLoadBalancerConfig {
    @Bean
    public ReactorLoadBalancer<ServiceInstance> reactorServiceInstanceLoadBalancer(Environment environment,
                                                                                   LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new GrayLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class));
    }
}
  1. 根据标签路由,在消费者端通过请求头或参数筛选实例。

发表评论