首页 > 其他分享 >一文快速上手 Nacos 注册中心+配置中心!

一文快速上手 Nacos 注册中心+配置中心!

时间:2022-08-30 20:56:06浏览次数:93  
标签:一文 中心 spring nacos springframework Nacos org cloud

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 下一步,如下图所示:
image.png
增加 Nacos Service Discovery 框架支持,如下图所示:
image.png
对应的依赖框架如下:

<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 的服务列表中看到它了,如下图所示:
image.png
经过以上步骤,我们的服务提供者就创建好了,接下来我们创建一个服务消费者 Consumer。

2.2 创建服务消费者

2.2.1 新建项目并添加依赖

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

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 是服务提供者提供的接口地址。

通过以上配置,我们的服务消费者也创建好了,启动项目,执行结果如下图所示:
image.png
从上述结果可以看出,服务消费者通过 Nacos 已经成功调用到服务提供者了,这就是 Nacos 中注册中心的基本使用。

3.配置中心实现

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

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

3.1 新建项目并添加依赖

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

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 控制台创建并设置配置文件,执行步骤如下所示。
首先,在配置列表中点击“添加”按钮,如下图所示:
image.png
进入配置页面,新建 YAML 或 Properties 配置文件,如下图所示:
image.png
以上关键参数的含义和规则说明如下。

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 配置。

配置好相应的内容之后,点击底部的“发布”按钮即可,添加成功之后会自动返回配置列表,如下图所示:
image.png
经过以上步骤,Nacos 配置中心的功能就实现完了,接下来启动项目,程序的执行结果如下图所示:image.png

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 官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html

是非审之于己,毁誉听之于人,得失安之于数。

公众号:Java中文社群

Java面试合集:https://gitee.com/mydb/interview

标签:一文,中心,spring,nacos,springframework,Nacos,org,cloud
From: https://www.cnblogs.com/vipstone/p/16640765.html

相关文章

  • SpringCloud 读取Nacos中数据配置
    1.在Nacos中配置数据源在“配置列表”中点击“加号”创建配置文件  我选择的是YAML格式#数据源配置spring:datasource:driver-class-name:com.mys......
  • 交换机、网卡、局域网、IDC数据中心、 磁盘阵列相关
    交换机交换机是一种存储转发设备。以太网交换机采用存储转发(store-forward)技术活直通(cus-through)技术来实现信息帧的转发,也成为了交换式集线器。交换机和网桥的不同在于:交......
  • Sentinel控制台1.8.3修改源码,修改配置后推送到Nacos
    目录1.接着上一篇2.思路3.下载Sentinel源码4.看Gateway里面读取的配置信息5.修改Sentinel控制台源码6.熔断规则测试7.限流规则测试8.打包使用1.接着上一篇简单......
  • nacos2.1 新增配置发布失败。请检查参数是否正确
    使用官方的docker部署方式,部署了一个单节点nacosserver,部署完了后发布配置信息,报错“新增配置发布失败。请检查参数是否正确”解决方法:在nacosmysql数据库中分别在conf......
  • 服务注册中心---(Eureka篇)
    1.什么是服务注册中心?      注册中心可以说是微服务架构中的"通讯录”,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服......
  • spring cloud项目引入 Eureka注册中心
    springcloud项目引入Eureka注册中心一、springcloud简介SpringCloud是基于SpringBoot的一整套实现微服务的框架。它提供了微服务开发所需的配置管理、服务发现、断路......
  • 厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)
    作者:周新宇&陈涛&李凯阿里云RocketMQ轻量版(MNS)消息队列是一个轻量、可靠、可扩展且完全托管的分布式消息队列服务。MNS能够帮助应用开发者在他们应用的分布式组件上更......
  • 快速搭建 SpringCloud Alibaba Nacos 配置中心!
    SpringCloudAlibaba是阿里巴巴提供的一站式微服务开发解决方案,目前已被SpringCloud官方收录。而Nacos作为SpringCloudAlibaba的核心组件之一,提供了两个非常重......
  • 什么是数据中台?-----一文看懂
    数据中台的诞生数据中台的诞生,主要是由于企业信息化的深入发展以及20余年的长周期发展,导致了企业各信息系统越来越多,各种新业务模式层出不穷,同时各系统之间无法有效......
  • 【算法笔记】一文解决数组类型算法题(1)
    本文主要介绍数据结构中的数组,以及LeetCode题库下面相关题型的分类和解法套路。数组理论概述定义数组是存储在一块连续内存上的,由相同元素集合组成的数据结构。利用索......