文章目录
- Nacos详细使用操作文档(图文详细)
- 1、安装
- 2、Nacos作为注册中心
- 2.1、Nacos服务注册【ICRMS】
- 2.2、Nacos 服务调用
- 2.2.1、Feign 远程调用【Personnel】
- 2.2.2)、RestTemplate+Ribbon 远程调用【Personnel】
- 3、Nacos作为配置中心
- 4、Nacos 命令空间
- 5、Nacos配置文件参数详解
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
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UDBXHlaq-1676619824775)(./images/nacos/604EF494-59ED-4b33-9C22-DC40E94397D0.png)]
- 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