一起来学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的使用, 实现一个生产者和消费者的小例子, 下期不见不散 ~

相关文章
|
6天前
|
安全 Linux Nacos
如何使用公网地址远程访问内网Nacos UI界面查看注册服务
如何使用公网地址远程访问内网Nacos UI界面查看注册服务
18 0
|
5天前
|
XML SQL Java
SpringCloud 基础配置
SpringCloud 基础配置
10 0
|
19天前
|
负载均衡 Cloud Native Java
Nacos 注册中心(2023旧笔记)
Nacos 注册中心(2023旧笔记)
18 0
|
19天前
|
负载均衡 监控 容灾
【SpringCloud】详解Eureka注册中心
【SpringCloud】详解Eureka注册中心
23 0
|
19天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
1月前
|
Dubbo Java 应用服务中间件
深度剖析:Dubbo使用Nacos注册中心的坑
2020年笔者在做微服务部件升级时,Dubbo的注册中心从Zookeeper切换到Nacos碰到个问题,最近刷Github又有网友提到类似的问题,就在这篇文章里做个梳理和总结。
深度剖析:Dubbo使用Nacos注册中心的坑
|
1月前
|
SpringCloudAlibaba Java Nacos
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
|
1月前
|
Dubbo Java 应用服务中间件
双活工作下的数据迁移:Nacos注册中心实战解析
这篇内容介绍了如何使用NacosSync组件进行双活项目中的注册中心数据迁移。首先,准备包括64位OS、JDK 1.8+、Maven 3.2+和MySQL 5.6+的环境。接着,获取并解压NacosSync安装包,配置数据库连接,启动服务,并通过访问特定URL检查系统状态。然后,通过NacosSync控制台进行集群配置,添加Zookeeper和Nacos集群,并设置同步任务。当数据同步完成后,Dubbo客户端(Consumer和Provider)更新配置以连接Nacos注册中心。最后,迁移完成后,原有的Zookeeper集群可下线,整个过程确保了服务的平滑迁移。
40 1
|
1月前
|
开发框架 负载均衡 Java
Spring boot与Spring cloud之间的关系
总之,Spring Boot和Spring Cloud之间的关系是一种构建和扩展的关系,Spring Boot提供了基础,而Spring Cloud在此基础上提供了分布式系统和微服务架构所需的扩展和工具。
23 4
Spring boot与Spring cloud之间的关系
|
1月前
Springcloud-ribbon和hystrix配置
Springcloud-ribbon和hystrix配置
10 0