详解Nacos中注册中心和配置中心的实现

目录
  • 1.Nacos 简介
    • Nacos 特性介绍
  • 2.注册中心实现
    • 2.1 创建服务提供者
    • 2.2 创建服务消费者
  • 3.配置中心实现
    • 3.1 新建项目并添加依赖
    • 3.2 配置 Nacos Config 信息
    • 3.3 编写代码读取配置文件
    • 3.4 Nacos 控制台添加配置信息
    • 3.5 动态刷新功能
  • 4.项目源码
  • 小结

Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录。而 Nacos 作为 Spring Cloud Alibaba 的核心组件之一,提供了两个非常重要的功能:注册中心和配置中心,我们今天来了解和实现一下二者。

1.Nacos 简介

Nacos 致力于帮助开发者发现、配置和管理微服务。它提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 特性介绍

Nacos 具有以下特性:

  • 服务发现和服务健康监测:支持基于DNS和基于RPC的服务发现,支持对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。
  • 动态配置服务:动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
  • 动态 DNS 服务:动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单 DNS 解析服务。
  • 服务及其元数据管理:支持从微服务平台建设的视角管理数据中心的所有服务及元数据。

2.注册中心实现

注册中心有两个重要的功能:服务注册和服务发现,它解决了微服务集群中,调用者和服务提供者连接管理和请求转发的功能,让程序的开发者无需过多的关注服务提供者的稳定性和健康程度以及调用地址,因为这些都可以依靠 Nacos 进行监测、管理和自动转发。

注册中心中有两个角色:一个是服务提供者 Provider,另一个是服务调用者 Consumer,接下来我们分别来创建二者。

2.1 创建服务提供者

2.1.1 新建项目并添加依赖

新建一个 Spring Boot 项目,使用阿里云地址 http://start.aliyun.com 来创建 Spring Cloud Alibaba Nacos 项目,如下图所示:

点击 Next 下一步,如下图所示:

增加 Nacos Service Discovery 框架支持,如下图所示:

对应的依赖框架如下:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

PS:添加 Spring Web(Spring MVC)框架主要是为了方便后面测试。

2.1.2 配置 Nacos 连接信息

在配置文件 application.properties 中要填写 Nacos 的相关连接信息,具体信息如下:

# 应用名称(也是 Nacos 中的服务名)
spring.application.name=spring-cloud-nacos-producer
# 应用服务 WEB 访问端口
server.port=8082
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public

2.1.3 添加服务提供方法

新建一个控制器 Controller,添加一个 sayhi 方法,此方法可以使用 HTTP 协议进行访问,它是为后面的服务消费者提供的调用方法,具体实现如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class SpringCloudNacosProducerApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudNacosProducerApplication.class, args);
    }
    @RequestMapping("/sayhi/{name}")
    public String sayHi(@PathVariable String name) {
        return "Hi Nacos Discovery " + name;
    }
}

编写完代码之后,运行项目就可以在 Nacos 的服务列表中看到它了,如下图所示:

经过以上步骤,我们的服务提供者就创建好了,接下来我们创建一个服务消费者 Consumer。

2.2 创建服务消费者

2.2.1 新建项目并添加依赖

此步骤和上面的服务提供者类似,也是添加 nacos discovery 和 web 依赖,具体实现如下:

2.2.2 配置 Nacos 连接信息

# 应用名称
spring.application.name=springcloud-nacos-consumer
# 应用服务 WEB 访问端口
server.port=8082
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public

2.2.3 添加服务调用代码

服务消费者的实现有两个关键点,第一,先 new 一个 RestTemplate 对象,此对象是 Spring 框架提供用于进行 HTTP 请求的类,实现代码如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudNacosConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringcloudNacosConsumerApplication.class, args);
    }
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        // 用于进行 HTTP 请求的对象
        return new RestTemplate();
    }
}

第二,新建一个控制器,注入 RestTemplate 对象,并调用 Nacos 中的服务提供者接口,实现代码如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class TestController {
    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/hi")
    public String hi(String name) {
        // 调用生产者 sayhi 方法,并返回结果
        return restTemplate.getForObject("http://spring-cloud-nacos-producer/sayhi/" + name,
                String.class);
    }
}

其中 spring-cloud-nacos-producer 是服务提供者的 ID,而 sayhi 是服务提供者提供的接口地址。

通过以上配置,我们的服务消费者也创建好了,启动项目,执行结果如下图所示:

从上述结果可以看出,服务消费者通过 Nacos 已经成功调用到服务提供者了,这就是 Nacos 中注册中心的基本使用。

3.配置中心实现

配置中心的作用是将本地配置文件云端话,所谓的云端也就是 Nacos 的服务器端,这样既能保证配置文件中的敏感数据不会暴露,同时又提供了实时的修改、查看、回滚和动态刷新配置文件的功能,非常实用。

但是需要注意的是配置中心和注册中心的依赖包是不同的,注册中心的依赖包是 nacos discovery,而配置中心的依赖包是 nacos config,它的具体如下。

3.1 新建项目并添加依赖

创建一个 Spring Boot 项目,添加 nacos config 和 web 依赖包,如下图所示:

PS:添加 web 依赖主要是为了方便后面测试。

对应的配置依赖信息如下:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

3.2 配置 Nacos Config 信息

在应用的 /src/main/resources/ 目录下,创建引导配置文件 bootstrap.yml(或 bootstrap.properties),添加以下 Nacos Config 配置:

spring:
  application:
    name: nacosconfig # 项目名称和 nacos DataId 相匹配
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 # nacos 地址和端口
        file-extension: yaml # 获取配置文件的格式:yaml
        username: nacos # nacos 认证用户名
        password: nacos # nacos 认证密码
server:
  port: 9001 # 项目启动端口

3.3 编写代码读取配置文件

新建控制器,使用 @Value 注解读取配置信息,实现代码如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    // 从 nacos 中读取配置项 config.info
    @Value("${config.info}")
    private String configInfo;

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

3.4 Nacos 控制台添加配置信息

在 Nacos 控制台创建并设置配置文件,执行步骤如下所示。

首先,在配置列表中点击“添加”按钮,如下图所示:

进入配置页面,新建 YAML 或 Properties 配置文件,如下图所示:

以上关键参数的含义和规则说明如下。

3.4.1 Data ID

Data ID 的拼接格式如下:

${prefix} - ${spring.profiles.active} . ${file-extension}

其中

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

3.4.2 Group

Group 分组选项,主要是用来隔离不同的配置项目的,它的默认值为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group 配置。

配置好相应的内容之后,点击底部的“发布”按钮即可,添加成功之后会自动返回配置列表,如下图所示:

经过以上步骤,Nacos 配置中心的功能就实现完了,接下来启动项目,程序的执行结果如下图所示:

3.5 动态刷新功能

动态刷新功能是指,在 Nacos 配置中心修改了配置文件,在不重启项目的前提下,可以实时读取到最新的配置内置。

Nacos 默认会为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法。

如果需要对 Bean 进行动态刷新,需要参照 Spring 和 Spring Cloud 规范,推荐给类添加 @RefreshScope 或 @ConfigurationProperties 注解,就可以实现配置中心的动态刷新功能了。

4.项目源码

https://gitee.com/mydb/spring-cloud-alibaba-example

小结

Nacos 作为 Spring Cloud Alibaba 的核心组件之一,提供了两个非常重要的功能:注册中心和配置中心。注册中心有两个重要的功能:服务注册和服务发现,它解决了微服务集群中,调用者和服务提供者连接管理和请求转发的功能,保证了服务调用者能够稳定的调用到健康的服务。而注册中心的本质是将项目中的本地配置文件云端化,解决了配置文件的安全性与统一性的问题,并且提供了配置文件历史版本回滚和配置文件动态刷新的功能。

到此这篇关于详解Nacos中注册中心和配置中心的实现的文章就介绍到这了,更多相关Nacos注册中心 配置中心内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Nacos注册中心的部署与用法示例详解

    目录 一.什么是注册中心: 1.什么是注册中心: 2.注册中心的核心功能: 3.注册中心解决的问题: 4.服务的发现与注册的实现模式: 5.服务注册表: 二.主流服务注册中心的对比: 三.Nacos 注册中心的部署与使用: 1.Nacos 注册中心的搭建: 1.1.Windows 环境: 1.2.Linux 环境: 2.SpringBoot 整合 Nacos 进行服务注册发现: 2.1.创建服务提供者 cloud-producer-server: 2.2.创建服务消费者 cloud-consum

  • SpringCloud安装Nacos完成配置中心

    目录 1. Nacos介绍 2. docker安装Nacos 2.1 docker-compose.yaml 2.2 启动后访问控制台 3.Springboot集成Nacos 3.1 pom依赖 3.2 yaml配置 3.3 测试配置动态化 3.4 测试日志 eureka注册中心 1. Nacos介绍 官网说明:Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. 2. docker安装Nacos 基

  • 浅析Alibaba Nacos注册中心源码剖析

    Nacos&Ribbon&Feign核心微服务架构图 架构原理 微服务系统在启动时将自己注册到服务注册中心,同时外发布 Http 接口供其它系统调用(一般都是基于Spring MVC) 服务消费者基于 Feign 调用服务提供者对外发布的接口,先对调用的本地接口加上注解@FeignClient,Feign会针对加了该注解的接口生成动态代理,服务消费者针对 Feign 生成的动态代理去调用方法时,会在底层生成Http协议格式的请求,类似 /stock/deduct?productId=100

  • SpringBoot使用Nacos配置中心的实现

    本文介绍SpringBoot如何使用阿里巴巴Nacos做配置中心. 1.Nacos简介 Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计.它可以帮助您轻松构建云本机应用程序和微服务平台. Nacos基本上支持现在所有类型的服务,例如,Dubbo / gRPC服务,Spring Cloud RESTFul服务或Kubernetes服务. 尤其是使用Eureka注册中心的,并且担心Eureka闭源的开发者们,可以将注册中心修改为Nacos,本文主要介绍Naco

  • Spring Cloud Alibaba使用Nacos作为注册中心和配置中心

    目录 前言 Nacos简介 使用Nacos作为注册中心 安装并运行Nacos 创建应用注册到Nacos 负载均衡功能 使用Nacos作为配置中心 创建nacos-config-client模块 在Nacos中添加配置 Nacos的动态刷新配置 使用到的模块 前言 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案,Nacos 作为其核心组件之一,可以作为注册中心和配置中心使用,本文将对其用法进行详细介绍. Nacos简介 Nacos 致力于帮助您发现.配置和管理微服务

  • nacos配置注册中心时指定命名空间不起作用的问题

    目录 nacos配置注册中心时指定命名空间不起作用 因为命名空间不适用于nacos 0.8 nacos命名空间的使用 我们为什么要用命名空间呢 创建命名空间 最终读取 nacos配置注册中心时指定命名空间不起作用 因为命名空间不适用于nacos 0.8 Nacos客户端服务注册不划分命名空间,默认注册位于公共命名空间 下. 他被阿里设计的起初原因是:namespace主要是进行业务隔离的,多个业务或者部门可以用一个Nacos,但是数据都相互屏蔽. 因此并不是做服务和开发环境隔离的,目前没看到官方

  • 详解Nacos中注册中心和配置中心的实现

    目录 1.Nacos 简介 Nacos 特性介绍 2.注册中心实现 2.1 创建服务提供者 2.2 创建服务消费者 3.配置中心实现 3.1 新建项目并添加依赖 3.2 配置 Nacos Config 信息 3.3 编写代码读取配置文件 3.4 Nacos 控制台添加配置信息 3.5 动态刷新功能 4.项目源码 小结 Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录.而 Nacos 作为 Spring Cloud A

  • 详解Vscode中使用Eslint终极配置大全

    在 vue项目中使用vscode编辑时,使用了如下这套配置,保存时就会根据既定vue项目中.eslintrc.js文件设置的既定规则自动校验并依据规则修复代码. 需安装插件 主要是这两个插件: ESLint Prettier - Code formatter 个人现用vscode插件截图.png vscode中setting.json中配置 { // vscode默认启用了根据文件类型自动设置tabsize的选项 "editor.detectIndentation": false, /

  • SpringBoot集成Nacos实现注册中心与配置中心流程详解

    目录 SpringBoot整合Nacos 引入Maven依赖 增加配置 示例代码 SpringBoot整合Nacos 引入Maven依赖 首先,我们还是要引入 Maven 依赖 <!--注册中心的依赖--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-discovery-spring-boot-starter</artifactId> <v

  • 详解Nacos配置中心的实现

    目录 基础配置 pom文件 YML文件 配置配置中心文件 Nacos中的匹配规则 Nacos作为配置中心-分类配置 Nacos的图形化管理界面 三种方案加载配置 DataID方案 Group方案 Namespace方案 基础配置 新建module:cloudalibaba-config-nacos-client3377 pom文件 版本号已经由父工程控制 <?xml version="1.0" encoding="UTF-8"?> <project

  • 微服务之注册中心和配置中心Consul详解

    目录 概述 注册中心 注册中心选型 CAP原理 Consul介绍 Consul Raft算法 Consul 基本使用 注册服务 概述 上篇说到构建良好的架构,依托于基础设施建设(自动化测试.自动化部署.服务监控,服务发现.配置中心等等),决定成败的往往是基础设施建设,所以从搭建一个注册中心和配置中心开始我们新一阶段的启程. 注册中心 注册中心选型 你有没有思考过这样一个问题,为什么会有这么多的注册中心(etcd/ZooKeeper/Consul),选用那个最适合自己,是不是在选用的时候会眼花缭乱

  • 详解SpringBoot中自定义和配置拦截器的方法

    目录 1.SpringBoot版本 2.什么是拦截器 3.工作原理 4.拦截器的工作流程 4.1正常流程 4.2中断流程 5.应用场景 6.如何自定义一个拦截器 7.如何使其在Spring Boot中生效 8.实际使用 8.1场景模拟 8.2思路 8.3实现过程 8.4效果体验 9.总结 1.SpringBoot版本 本文基于的Spring Boot的版本是2.6.7 . 2.什么是拦截器 Spring MVC中的拦截器(Interceptor)类似于ServLet中的过滤器(Filter),它

  • 详解git中配置的.gitignore不生效的解决办法

    详解git中配置的.gitignore不生效的解决办法 前言: 通常我们希望放进仓库的代码保持纯净,即不要包含项目开发工具生成的文件,或者项目编译后的临时文件.但是,当我们使用git status查看工作区状态的时候,总会提示一些文件未被track.于是,我们想让git帮助我们忽略这些文件,不再提醒. 庆幸的是,git已经考虑到这点了.我们可以在项目的根目录下建立一个.gitignore的文件,该文件用来配置哪些文件或者目录不被track的.规则很简单,就在该文件中,写下你不想被track的文件

  • 详解Nginx中的Rewrite的重定向配置与实践

    一:理解地址重写 与 地址转发的含义. 地址重写与地址转发是两个不同的概念. 地址重写 是为了实现地址的标准化,比如我们可以在地址栏中中输入 www.baidu.com. 我们也可以输入 www.baidu.cn. 最后都会被重写到 www.baidu.com 上.浏览器的地址栏也会显示www.baidu.com. 地址转发:它是指在网络数据传输过程中数据分组到达路由器或桥接器后,该设备通过检查分组地址并将数据转发到最近的局域网的过程. 因此地址重写和地址转发有以下不同点: 1. 地址重写会改变

  • 详解Hbuilder中PHP环境配置

    目录 一.开启环境 二.XAMPP的安装路径 三.Hbuilder软件 四.在HBuilder上安装支持PHP的插件 五.配置HBuilder外置服务器 六.新建php文件进行测试 HBuilder是非常高效.快速的网站开发编辑器,我们用Hbuilder做网站后台php开发时,如果想要点击工具栏上的浏览器按钮进行快速预览,本文将详细介绍在前端开发神器Hbuilder中集成运行PHP的环境. 因为HBuider没有集成php运行环境,所以要依赖于一个环境,比如XAMPP.AppServ.WAMP等

随机推荐