Nacos详细使用操作文档(图文详细)

1、安装

  • 官方链接: https://nacos.io/zh-cn/docs/what-is-nacos.html
  • 参考地址(单机版): https://blog.csdn.net/weixin_44187730/article/details/104263230
  • 参考地址(集群版): https://blog.csdn.net/weixin_44187730/article/details/104552937

2、Nacos作为注册中心

2.1、Nacos服务注册【ICRMS】

  • 1、导入服务发现功能的jar包
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • 2、开启服务注册发现功能
package com.moonpac.icrms.config;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Configuration;

/**
 * @Copyright (C), 2016-2022 MP
 * @ClassName: ICRMSCloudConfig
 * @Author: hf
 * @Date: 2022/9/4 16:07
 * @Description: ICRMS服务 -  关于Nacos配置-服务注册-服务发现-Feign远程调用
 */
@Configuration
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.moonpac.icrms.feign")
public class ICRMSCloudConfig {

}

  • 3、编写bootstrap.yaml配置、指定Nacos的服务地址
spring:
  application:
    #服务名称
    name: aiops-icrms
  cloud:
    nacos:
      discovery:
        # 集群方式多个地址以,分割
        server-addr: 10.173.28.204:8848

2.2、Nacos 服务调用

2.2.1、Feign 远程调用【Personnel】
  • ①、导入feign进行远程调用功能
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  • ②、消费端调用写法,声明式调用【声明调用接口】
package com.moonpac.personnel.feign;

import com.moonpac.personnel.feign.fallback.ICRMSTestFeignServiceFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

/**
 * @Copyright (C), 2016-2022 MP
 * @ClassName: ICRMSTestController
 * @Author: hf
 * @Date: 2022/9/4 16:27
 * @Description: ICRMS 测试Feign调用
 */
@FeignClient(
        //指定服务名,nacos注册的服务名
        name = "aiops-icrms",
        //指定容错类-当远程调用失败时进入容错类中
        fallbackFactory = ICRMSTestFeignServiceFallbackFactory.class
)
//指定公共请求前缀
@RequestMapping("/icrms")
public interface ICRMSTestFeignService {

    @GetMapping("/list")
    List<String> list();
}
  • ③、Feign容错类
package com.moonpac.personnel.feign.fallback;

import com.moonpac.personnel.feign.ICRMSTestFeignService;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

/**
 * @Copyright (C), 2016-2022 MP
 * @ClassName: ICRMSTestServiceFallbackFactory
 * @Author: hf
 * @Date: 2022/9/4 16:29
 * @Description: Feign 远程调用容错
 */
@Service
@Slf4j
public class ICRMSTestFeignServiceFallbackFactory implements FallbackFactory<ICRMSTestFeignService> {


    @Override
    public ICRMSTestFeignService create(Throwable throwable) {

        //捕获到异常
        throwable.printStackTrace();

        return new ICRMSTestFeignService() {
            //捕获到异常
            @Override
            public List<String> list() {

                return Arrays.asList("Feign远程调用报错了...","错了");
            }
        };
    }
}
  • ④、配置类
package com.moonpac.personnel.config;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Configuration;

/**
 * @Copyright (C), 2016-2022 MP
 * @ClassName: PersonnelCloudConfig
 * @Author: hf
 * @Date: 2022/9/4 16:23
 * @Description: Personnel服务关于Nacos配置-服务注册-服务发现-Feign远程调用
 */
@Configuration
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.moonpac.personnel.feign")
public class PersonnelCloudConfig {

}
  • ⑤、controller写法
package com.moonpac.personnel.controller;

import com.moonpac.personnel.feign.ICRMSTestFeignService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Copyright (C), 2016-2022 MP
 * @ClassName: PersonnelFeignController
 * @Author: hf
 * @Date: 2022/9/4 16:43
 * @Description: Feign 远程调用服务
 */
@Slf4j
@RestController
@RequestMapping("/personnel")
@RequiredArgsConstructor
public class PersonnelFeignController {

    private final ICRMSTestFeignService icrmsTestFeignService;

    @GetMapping("/list")
    public Object list() {
        //远程调用开始,即将通过Feign 远程调用接口
        log.info("远程调用开始,即将通过Feign 远程调用其它服务接口...");
        return icrmsTestFeignService.list();
    }

}
  • ⑥、调用效果

在这里插入图片描述

2.2.2)、RestTemplate+Ribbon 远程调用【Personnel】
  • ① 配置类
package com.moonpac.personnel.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * @Copyright (C), 2016-2022 MP
 * @ClassName: PersonnelRestTemplateConfig
 * @Author: hf
 * @Date: 2022/9/4 16:59
 * @Description: Personnel 用户中心服务 RestTemplate配置
 */
@Configuration
public class PersonnelRestTemplateConfig {

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {

        return new RestTemplate();
    }
}
  • ② controller写法
package com.moonpac.personnel.controller;

import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @Copyright (C), 2016-2022 MP
 * @ClassName: PersonnelTemplateController
 * @Author: hf
 * @Date: 2022/9/4 16:43
 * @Description: RestTemplate 远程调用服务
 */
@Slf4j
@RestController
@RequestMapping("/personnel/template")
@RequiredArgsConstructor
public class PersonnelTemplateController {

    private static final String ICRMS_SERVER_ADDR = "http://aiops-icrms";

    private final RestTemplate restTemplate;

    @ApiOperation("RestTemplate 测试调用")
    @GetMapping("/list")
    public Object list() {
        log.info("RestTemplate 测试远程调用.....");
        return restTemplate.getForEntity(ICRMS_SERVER_ADDR + "/icrms/list", Object.class);
    }

}
  • ③、调用效果

在这里插入图片描述

3、Nacos作为配置中心

配置中心:
集中管理配置、配置动态更新、回滚配置…

  • 1、导入服务发现功能的jar包
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  • 2、创建一个bootstrap.yaml或bootstrap.properties必须叫此名称
    • SpringBoot默认规则,bootstrap.yaml里面的配置优先于application.yaml配置。
#Nacos 配置中心配置
spring:
  application:
    name: aiops-personnel
  cloud:
    nacos:
      config:
        # nacos 地址
        server-addr: 10.173.28.204:8848
  • 3、默认配置规则
    • dataId: 配置文件名 .properties或.yaml
    • p r e f i x − {prefix}- prefix{spring.profile.active}.${file-extension}
    • 前缀-当前环境.文件扩展名
      • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
      • spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}
      • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

aiops-icrms.properties aiops-icrms.yaml
总结: 只需要给Nacos中创建一个dataId名称叫做 当前项目名.properties 当前项目名.yaml

请添加图片描述

  • 4、开启域刷新动态获取配置,实例代码
package com.moonpac.personnel.controller;

import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;

/**
 * @Copyright (C), 2016-2022 MP
 * @ClassName: PersonnelParamsConfig
 * @Author: hf
 * @Date: 2022/9/4 17:16
 * @Description:
 */
@Slf4j
@RestController
@RequestMapping("/personnel/params")
@RequiredArgsConstructor
//开启域动态刷新主类配置
@RefreshScope
public class PersonnelParamsConfigController {

    @Value("${personnel.version:11}")
    private String personnelVersion;

    @Value("${personnel.content:11}")
    private String personnelContent;

    @ApiOperation("Nacos配置中心测试")
    @GetMapping("/getParams")
    public Object getP() {
        HashMap<Object, Object> hashMap = new HashMap<>(3);
        hashMap.put("content", personnelContent);
        hashMap.put("version", personnelVersion);
        return hashMap;
    }

}

  • 5、所有的配置信息都可以写到Nacos中。

4、Nacos 命令空间

  • 1、Nacos命名空间概念
    • 命名空间:主要用于区分不同环境。
    • 默认情况,本项目在public下找 项目名.properties文件 项目名.yaml
    • Nacos组: 可以区分不同业务,不同业务不同组。

最佳实践:
使用namespace来区分不同的服务【每个服务都有自己的名称空间】。
使用Group来区分不同环境【dev,prod,test】

命令空间配置

  • 2、配置命名空间
#Nacos 配置中心配置
spring:
  application:
    name: aiops-personnel
  cloud:
    nacos:
      config:
        # nacos 地址
        server-addr: 10.173.28.204:8848
        # 设置默认的文件类型
        file-extension: yaml
        # 设置命名空间--此处填写的是ID  重要!!!
        # 设置命名空间--此处填写的是ID  重要!!!
        # 设置命名空间--此处填写的是ID  重要!!!
        namespace: 9dbdfc95-0174-49bd-9c2a-bc276ca41ecc
  • 3、Nacos添加管理配置文件

命令空间配置

  • 4、加载使用配置
#Nacos 配置中心配置
spring:
  application:
    name: aiops-personnel
  cloud:
    nacos:
      config:
        # nacos 地址
        server-addr: 10.173.28.204:8848
        # 设置默认的文件类型
        file-extension: yaml
        # 设置命名空间--此处填写的是ID  重要!!!
        namespace: 9dbdfc95-0174-49bd-9c2a-bc276ca41ecc
        extension-configs:
        # 批量加载配置文件
          - {dataId: "application-monitor.yaml",group: "DEV",refresh: true}
          - {dataId: "application-logback.yaml",group: "DEV",refresh: true}
          - {dataId: "application-sentinel.yaml",group: "DEV",refresh: true}
          - {dataId: "application-zipkin.yaml",group: "DEV",refresh: true}

5、Nacos配置文件参数详解

  • 参考链接: https://blog.csdn.net/qq_40309050/article/details/124325382
GitHub 加速计划 / na / nacos
29.83 K
12.75 K
下载
Nacos是由阿里巴巴开源的服务治理中间件,集成了动态服务发现、配置管理和服务元数据管理功能,广泛应用于微服务架构中,简化服务治理过程。
最近提交(Master分支:3 个月前 )
4334cd16 * Support custom client configuration timeout.(#12748) * Add UT.(#12748) 11 天前
b04d2266 15 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐