一起来学SpringCloud之整合Nacos配置中心与注册中心

简介: 一起来学SpringCloud之整合Nacos配置中心与注册中心

前言

大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 基础知识 的铺垫。目前正在出一个SpringCloud长期系列教程,从入门到进阶, 篇幅会较多~


适合人群

  • 有一定的ava基础
  • 想尝试微服务开发
  • 有SpringBoot开发基础
  • 想学习或了解SpringCloud
  • 想提高自己的同学

大佬可以绕过 ~


背景

如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了Springboot这门框架,熟练掌握了单体应用的开发,如今微服务开发盛行,对我们的技术要求也是越来越高,薪资也是令人兴奋。这个系列将会带大家学习SpringCloud微服务开发,我会带大家一步一步的入门,耐心看完你一定会有收获~


情景回顾

上期带大家一起认识了什么是微服务以及各种场景下暴露出的问题,本期呢,就是带着这些问题去一起看一下有哪些成熟的技术可以帮助我们去解决问题。之前我们谈到服务间调用的时候,给大家讲到了配置中心和注册中心,它能够帮助我们管理我们的服务,让我们调用的时候从配置中心获取服务的信息,然后进行调用,本节呢,就是要学习一下配置中心和注册中心,我们主要学习一下Nacos,目前市场上用的也是比较多的,我们一起来看一下吧~


SpringCloud是啥

学习之前,我们要先有一个概念,SpringCloud它不是一个框架,不像SpringBoot那样,我们要学习它的各个方法和特性,首先要理解的是它是一个解决方案,他把社区里各个优秀的开源技术整合到了自己的Spring大家族里,形成了一套完善的微服务体系,在后边的学习中,你将会学习到各种组件的整合,它们都有独特的功能和特定的使用场景


Nacos是啥

当我们学习一门新技术的时候,首先要去它的官网看一下,先了解一下它是在什么场景下使用的,不要学到了最后,都不知道是干啥的。


Nacos官网是这么介绍的:

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

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施


![nacos.io/img/nacosMa…]


其实官网介绍的很全了,我就不复制了,大家可以自行去查看,这里给大家总结几个主要特性:

  • 服务发现和服务健康监测
  • 动态配置服务
  • 动态 DNS 服务
  • 服务及其元数据管理


环境搭建

有了基本的认识之后,我们开始整吧, 首先需要安装nacos,大家可以取下载对应的jar包,下载地址 https://nacos.io/zh-cn/docs/quick-start.html


我用的是1.1.4的,大家可以在github上下载往期版本,目前最新应该是1.4.3

下载好后,解压它,找到配置文件,修改它,在 conf下,修改

application.properties

db.num=0
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=xxxx
复制代码


然后需要我们做的是,把conf下的sql导入到数据库,因为nacos可以持久化配置,接下来就是启动了, 回到它的bin目录,运行./startup.sh, win用户可以运行startup.cmd, 它有一个控制台地址localhost:8848,默认用户名和密码都是nacos


集成SpringCloud

首先修改pom.xml引入如下依赖, 项目我们依然使用之前的项目,大家可以自己单独建一个工程

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <spring.boot.version>2.2.5.RELEASE</spring.boot.version>
    <spring.cloud.version>Hoxton.SR3</spring.cloud.version>
    <spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
</properties>
<!-- 依赖约束 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>${spring.boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring.cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring.cloud.alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
        <version>3.0.3</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.22</version>
    </dependency>
</dependencies>
复制代码


然后我们添加一个模块springcloud-nacos, 在它的根目录下修改pom.xml:

<dependencies>
    <!-- nacos-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>
复制代码


resources下新建 bootstrap.yml, 之前我们都是建的application.yml,这里给大家说下它。它比application.yml有较高的优先级,也就是说它的配置不会被覆盖,我们可以把固定的配置写到这里,因为我们要集成nacos,所以后边我们就直接从nacos里获取配置了,可以实现动态获取

修改bootstrap.yml

server:
  port: 8003
spring:
  application:
    name: app-nacos
  cloud:
    # nacos
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml
复制代码


接着我们新建一个启动类,测试一下:

@SpringCloudApplication
public class NacosAppication {
    public static void main(String[] args) {
        SpringApplication.run(NacosAppication.class, args);
    }
}
复制代码


运行成功后,打开nacos控制台看一下,服务列表,会发现多了一个服务app-nacos,那么表示服务自动注册成功了, 默认下是在命名空间public下,如果想指定命名空间,需要新建命名空间,并修改bootstrap配置:

nacos:
    config:
    server-addr: 127.0.0.1:8848
    file-extension: yml
    namespace: '2ef2186e-078c-4904-8643-ff5e90555456'
复制代码


如何从nacos中获取配置

那么作为配置中心我们可以干啥呢?我们看到控制台有一个配置列表,点开,发现是空的,首先说明的是Nacos配置中心通过namespace、dataId和group来唯一确定一条配置。也就是

${prefix} - ${spring.profiles.active} . ${file-extension}
复制代码


  • file-extension 一般我们指定yml
  • spring.profiles.active 这个有没有很熟悉(之前讲的多环境)
  • prefix 我们也可以手动指定,默认为pring.application.name的值


好,有了上面的基本概念之后,我们新建一个配置app-nacos.yml,选择文件类型是yaml,随便输入点

app: 
    name: nacos
复制代码


下面我们要做的就是从nacos中获取这个配置信息, 在这之前,给大家提示一下,这个配置也可以分层的,我们可以看到还有一个Group组的概念,也就是说可以指定组中的配置,好家伙,又约束了一层

cloud:
# nacos
nacos:
    config:
    server-addr: 127.0.0.1:8848
    file-extension: yml
    namespace: '2ef2186e-078c-4904-8643-ff5e90555456'
    prefix: febs
    group: g_nacos
复制代码


好了之后,我们来代码实操一下,为了方便演示,我直接就写到控制器里了

@RestController
@RefreshScope
public class ConfigController {
    @Value("${app:name}")
    private String appName;
    @GetMapping("/api/appInfo")
    public String appInfo() {
        return "appName: " + appName;
    }
}
复制代码


主要通过@RefreshScope这个注解去获取,它支持动态刷新,大家可以试试把配置的app.name修改一下,会发现配置立即就生效了,这个功能有利于我们切配置的时候无缝衔接,比如我们服务转移了,或者数据库迁移了,很方便,所以说为啥要用Nacos,因为它方便强大


如果我想回滚配置怎么办呢?

我们可以发现配置列表有一个回滚的按钮,它可以帮助我们回滚到上一个版本的配置,


如果我想禁止它自动刷新怎么做呢?

修改配置

nacos:
    config:
    server-addr: 127.0.0.1:8848
    file-extension: yml
    namespace: '2ef2186e-078c-4904-8643-ff5e90555456'
    prefix: febs
    group: g_nacos
    refresh: false
复制代码


如何进行多配置读取呢?

我们可以通过指定的配置:

extension-configs:
        - dataId: nacos1.yaml
        group: g_1
        refresh: true
        - dataId: nacos2.yaml
        group: g_2
        refresh: false
复制代码


另外我们也可以通过共享配置

extension-configs:
       shared-configs: ext-config-one.yaml,ext-config-two.yaml
复制代码


或者我们就直接不指定

shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
复制代码


结束语

本期就到这里结束了,总结一下,本节主要讲了Nacos的基本介绍以及带大家安装了它,然后集成到SpringCloud的项目中,带大家体验了一下它作为注册中心配置中心的功能使用。


下期预告

有了配置中心之后,下期我们就带大家实现一下远程调用,看看在nacos下如何轻松的实现服务间调用, 将带大家学习RestTemplate的使用, 实现一个生产者和消费者的小例子, 下期不见不散 ~

相关文章
|
2月前
|
负载均衡 Kubernetes 网络协议
注册中心如何选型?Eureka、Zookeeper、Nacos怎么选
这是小卷对分布式系统架构学习的第9篇文章,继续探讨注册中心的原理及选型。文章详细介绍了Eureka、Nacos的工作机制与特点,并对比了Eureka、Nacos、Consul和Zookeeper在一致性协议、健康检查、负载均衡等方面的差异。最后根据不同的应用场景给出了注册中心的选型建议,帮助读者理解如何选择最适合的注册中心。
325 100
|
3月前
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
773 81
高效搭建Nacos:实现微服务的服务注册与配置中心
|
25天前
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
281 14
|
4月前
|
存储 Java Nacos
Spring Cloud+Nacos+KMS 动态配置最佳实践
本文讲述了 Spring Cloud 应用中结合 Nacos 实现了运行期配置动态更新的功能,以及在此基础上结合 KMS 在不改动代码的情况下对应用使用的敏感配置进行保护,解决将配置迁移到 Nacos 中可能存在的数据安全顾虑,并对其底层工作原理做了简单介绍。
946 65
|
3月前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
438 22
|
4月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
89 5
|
24天前
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
227 1
|
1天前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
6月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
2月前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
241 4