关于springboot:Nacos作为注册中心和配置中心

3次阅读

共计 5894 个字符,预计需要花费 15 分钟才能阅读完成。

装置 Nacos

见官网
装置启动后 Nacos 拜访地址是 127.0.0.1:8848/nacos/index.html
登录名和明码默认都是 nacos

应用 Nacos 作为注册核心

版本对于本人去理解,我这里用的 boot 2.3.2.RELEASE 版本,spring cloud alibaba 2.2.5.RELEASE 版本

<!-- 这里是我引入的依赖 -->
<!-- 注册核心的依赖,服务的注册与发现 -->
<dependency>
 <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.5.RELEASE</version></dependency>
<dependency>
 <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>

接下来在入口类的下面加上注解@EnableDiscoveryClient, 实现服务的注册与发现。

/**
 * 开启 Spring Cloud 的服务注册与发现
 */@EnableDiscoveryClient
@SpringBootApplication
@RestController
public class NacosServerApplication {public static void main(String[] args) {SpringApplication.run(NacosServerApplication.class, args); }
 @GetMapping("/hello") public String hello(@RequestParam String name) {return "Hello" + name;}
}

配置文件 application.yml 中配置注册核心地址和服务注册到注册核心的名称

server:
 port: 7001# 注册到注册核心服务的名称
spring:
 application: name: nacos-server # nacos 注册核心地址
 cloud: nacos: discovery: server-addr: 127.0.0.1:8848```
启动后去 Nacos 注册核心查看,能够看到配置的服务注册到了注册核心
![图 1](https://yunqing-img.oss-cn-beijing.aliyuncs.com/hexo/article/202102/image-20210206132200241.png)
## 介绍三种服务的生产形式
这里不介绍 RPC 调用,别离介绍 spring 提供的 RestTemplate、WebClient 还有 Netflix 封装的 Feign 一共三种形式。### RestTemplate 形式
首先新建一个新的服务用来调用 `nacos-server` 服务,新建的服务命名为 `nacos-client-common`,配置关系和 `nacos-server` 一样

@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class NacosClientCommonApplication {
// 须要 @Autowired 注入
@Autowired private RestTemplate restTemplate;
/**

    1. Spring Cloud 中对 RestTemplate 做了加强,只须要稍加配置,就能简化之前的调用形式
  • @return */ @GetMapping(“/test1”) public String test1() { return restTemplate.getForObject(“http://nacos-server/hello?name=kangkang”, String.class); }

/* 在定义 RestTemplate 的时候,减少了 @LoadBalanced 注解,而在真正调用服务接口的时候,原来 host 局部是通过手工拼接 ip 和端口的,

  • 间接采纳服务名的时候来写申请门路即可。在真正调用的时候,Spring Cloud 会将申请拦挡下来,而后通过负载均衡器选出节点,
  • 并替换服务名局部为具体的 ip 和端口,从而实现基于服务名的负载平衡调用。
  • @return */ @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); }}
### WebClient 形式
WebClient 是 Spring5 响应式编程中相似 RestTemplate 调用服务的形式

须要引入依赖反对响应式编程

<!– 用于反对 WebClient 代替 RestTemplate 调用服务 –>
<dependency>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId></dependency>

@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class NacosClientCommonApplication {

@Autowired

private WebClient.Builder webClientBuilder; /**

  • RestTemplate 和 WebClient 都是 Spring 本人封装的工具
  • @return */ @GetMapping(“/test2”) public Mono<String> test2() { return webClientBuilder.build() .get() .uri(“http://nacos-server/hello?name=yunqing”) .retrieve() .bodyToMono(String.class); }

/* 依赖 spring-boot-starter-webflux * WebClient 是 Spring 5 中最新引入的,能够将其了解为响应式版的 RestTemplate。

  • @return */ @Bean @LoadBalanced public WebClient.Builder loadBalancedWebClientBuilder() { return WebClient.builder(); }}
### Feign 形式

<!– 引入依赖 –>
<dependency>
<groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.6.RELEASE</version></dependency>

// 退出上面这个注解,开始扫描 FeignClient @EnableFeignClients
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class NacosClientCommonApplication {
// 注入服务的接口,须要把服务的接口申明在这个服务的我的项目中,实现还是在 nacos-server 中
@Autowired private FeignService feignService; /**

  • 依赖 spring-cloud-starter-openfeign @return */ @GetMapping(“/test3”) public String test3() { return feignService.hello(“spring cloud”); }}
服务的接口 FeignServer

// 注解指定了这个接口调用服务的名称
@FeignClient(“nacos-server”)
public interface FeignService {
@GetMapping(“/hello”) String hello(@RequestParam String name);}

## Nacos 作为配置核心
### 创立命名空间
首先须要在 Nacos 中新增两个命名空间,`dev` 和 `test` 之后在每个命名空间下增加对应的配置。![图 2](https://yunqing-img.oss-cn-beijing.aliyuncs.com/hexo/article/202102/image-20210207093226135.png)
如图所示还有一个保留空间 `public` 这是默认存在的, 接下来在 ` 配置管理 ` 的 ` 配置列表 ` 中就能够看到三个命名空间,如下图所示,我在 `dev` 命名空间创立了一个配置。![图 3](https://yunqing-img.oss-cn-beijing.aliyuncs.com/hexo/article/202102/image-20210207093630848.png)
### 如何定位一个配置
1. 首先由 ` 命名空间 namespace` 定位是哪个命名空间的配置,必须应用命名空间 id,不配置默认应用 `public` 命名空间
2. ` 前缀 prefix` 确定了配置的名称,不配置默认为以后服务名称,这里我配置的也是以后服务名称
3. ` 后缀 file-extension` 确定了配置的后缀名,默认为 `properties`, 因为我的配置的 `Data Id` 创立为 `yaml` 格局的名为 `nacos-config.yaml` 所以这里的后缀须要写出为 `yaml`
4. ` 分组 group` 确定了配置的组名,默认组名为 `DEFAULT_GROUP`
5. 也能够通过 `spring.profile.active` 或者 `group` 进行多环境配置,然而更举荐应用 `namespace`
- bootstrap.yml

此处配置必须用 bootstrap.yml 或者 bootstrap.propertiesspring:

application: name: nacos-config cloud: nacos: config: server-addr: 127.0.0.1:8848 file-extension: yaml # dataId 由利用名称 (name) 加文件扩展名组成 nacos-config.yaml, 默认值为 properties group: DEFAULT_GROUP # 默认分组, 例如 DEV-GROUP TEST-GROUP prefix: ${spring.application.name} # 前缀默认就是利用名称,不必配置,这里配置进去不便了解
namespace: 87d915fc-e1be-4d0e-8dbd-d3314ac47844 # 命名空间
server:
port: 7007`

到底配置了什么?

实际上就配置了一个kangqing.title

读取配置详情

读取配置的目标是证实,通过配置核心增加的配置,可能在利用中失效,被读取到即可能失效

<!-- 这个是配置核心的依赖 --><dependency>
 <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.5.RELEASE</version></dependency>
/**
 * 能够看到,这个例子中并没有退出 nacos 的服务发现模块,所以这两个内容是齐全能够独立应用的
 * * 这个注解 @RefreshScope 次要用来让这个类下的配置内容反对动静刷新,也就是当咱们的利用启动之后,修
 * 改了 Nacos 中的配置内容之后,这里也会马上失效。*/@RefreshScope
@RestController
@SpringBootApplication
public class NacosConfigApplication {public static void main(String[] args) {SpringApplication.run(NacosConfigApplication.class, args); }
 /** * 留神这个冒号不能省略
 */ @Value("${kangqing.title:}") private String title;
 @GetMapping("/test") public String hello() { return "result ->" + title;}
}

多配置加载

例如我当初曾经加载了 nacos-config.yaml 的配置,我不想把所有配置写到这一个文件中,于是我又在 nacos 中增加了 mybatis-plus.yaml 的配置,想要在利用中加载多个配置

形式一:

spring:
 application: name: nacos-config cloud: nacos: config: server-addr: 127.0.0.1:8848 namespace: 535d5ae5-de1e-443b-a0a7-68a34e52946d ext_config[0]: data-id: nacos-config.yaml group: DEFAULT_GROUP refresh: true ext_config[1]: data-id: mybatis-plus.yaml group: DEFAULT_GROUP refresh: true```
#### 形式二:

spring:
application: name: nacos-config cloud: nacos: config: server-addr: 127.0.0.1:8848 namespace: 535d5ae5-de1e-443b-a0a7-68a34e52946d shared-configs: – nacos-config.yaml – mybatis-plus.yaml refresh-enabled: true`
既然有多种配置形式,就存在优先级,最先的前缀后缀 group 定位的形式优先级最高,其次是形式一,最初是形式二,也就是形式二会被形式一笼罩,形式一会被前后缀 group 的形式笼罩。

  • 注:以上知识点均是自己基于单机版的 nacos 进行学习总结,并不适用于生产环境,生产环境请另行部署 nacos 集群和 nacos 数据长久化。
正文完
 0