在这里插入图片描述

介绍


Nacos (Dynamic Naming and Configuration Service) 是由阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台,旨在为微服务架构提供一站式解决方案。Nacos 的核心功能包括服务注册与发现、动态配置管理和服务元数据管理,能够帮助开发者快速构建和部署微服务架构,同时提供高可用性和动态扩展能力。

核心功能


  • 服务注册与发现
    Nacos 作为服务注册中心,支持微服务实例的动态注册、发现与健康检查,帮助服务之间实现高效通信。
  • 动态配置管理
    Nacos 提供配置中心功能,支持配置的集中管理、动态更新和实时推送,无需重启服务。
  • 服务元数据管理
    Nacos 提供服务元数据存储功能,支持扩展服务信息的管理和查询。

安装


1. 官网下载
下载地址:Nacos 官网下载

2. 减压后在 /bin 目录下执行 startup.cmd -m standalone

在这里插入图片描述

3. 访问 http://localhost:8848/nacos

在这里插入图片描述

服务注册中心


支付服务 cloud-alibaba-payment8003

1. 引入依赖

<!-- nacos-discovery -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 引入自定义的api通用包 -->
<dependency>
    <groupId>com.zzyy.cloud</groupId>
    <artifactId>cloud-common-api</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<!-- SpringBoot通用依赖模块 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<!-- test -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

2. yml配置

server:
  port: 8003

spring:
  application:
    name: nacos-payment-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  # 配置nacos地址

3. 主启动类

@SpringBootApplication
@EnableDiscoveryClient
public class Main8003 {

    public static void main(String[] args) {
        SpringApplication.run(Main8003.class, args);
    }
}

4. 支付服务控制类 PayController

@RestController
public class PayController {

    @Value("${server.port}")
    private String port;

    @GetMapping("/pay/nacos/{id}")
    public String getPayInfo(@PathVariable("id") Integer id) {
        return "nacos registry! port: " + port + "\tid: " + id;
    }
}

订单服务 cloud-alibaba-order9003

1. 引入依赖

<!-- nacos-discovery -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- loadbalancer -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- web + actuator -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--lombok-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

2. yml配置

server:
  port: 9003

spring:
  application:
    name: nacos-order-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
#消费者要去访问的微服务名称
service-url:
  nacos-payment-service: http://nacos-payment-service

3. 主启动类

@SpringBootApplication
@EnableDiscoveryClient
public class Main9003 {

    public static void main(String[] args) {
        SpringApplication.run(Main9003.class, args);
    }
}

4. RestTemplate 配置类

@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced  //赋予RestTemplate负载均衡的能力
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

5. 订单服务控制类 OrderController

@RestController
public class OrderController {

    @Resource
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-payment-service}")
    private String payment_url;

    @GetMapping("/order/pay/nacos/{id}")
    public String getPayInfo(@PathVariable("id") Integer id) {
        String result = restTemplate.getForObject(payment_url + "/pay/nacos/" + id, String.class, id);
        return "OrderController调用返回:" + result;
    }
}

测试结果

  • 启动支付服务8003和订单服务9003,在 Nacos 服务列表看到 nacos-payment-service 和 nacos-order-service 都已经成功注册。
  • 浏览器访问 http://localhost:9003/order/pay/nacos/123,出现 OrderController调用返回:nacos registry! port: 8003 id: 123 表示服务调用成功。

在这里插入图片描述

在这里插入图片描述

服务配置中心


Nacos配置服务 cloud-alibaba-nacos-config8877

1. 引入依赖

<!-- bootstrap -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- nacos-config -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- nacos-discovery -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- web + actuator -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

2. application.yml 配置

server:
  port: 8877

spring:
  profiles:
    active: dev  #表示开发环境

3. bootstrap.yml 配置

# nacos配置
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848  #Nacos作为配置中心地址
        file-extension: yaml  #指定yaml格式的配置

4. Nacos 配置管理

在 Nacos 配置列表新建配置

在这里插入图片描述

在 Nacos 中 dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}

  • prefix: 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active: 即为当前环境对应的 profile。注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension: 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置,目前只支持 properties 和 yaml 类型

在这里插入图片描述
5. 主启动类

@SpringBootApplication
@EnableDiscoveryClient
public class Main8877 {

    public static void main(String[] args) {
        SpringApplication.run(Main8877.class, args);
    }
}

6. 控制类 NacosConfigController

标注 @RefreshScope 注解支持 Nacos 配置的动态刷新

@RestController
@RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能
public class NacosConfigController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

总结


以上主要介绍了 Nacos 安装、服务注册、服务配置的相关知识,想了解更多 Nacos 知识的小伙伴请参考 Nacos 官网Spring Cloud Alibaba 官网 进行学习,学习更多 Spring Cloud 实战实用技巧的小伙伴,请关注后期发布的文章,认真看完一定能让你有所收获。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐