Nacos介绍

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

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

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

官方文档

https://nacos.io/zh-cn/docs/what-is-nacos.html

Nacos安装部署

环境依赖:

  • JDK1.8+

下载地址

官网地址:

https://github.com/alibaba/nacos/releases

百度网盘地址:

链接:https://pan.baidu.com/s/1fTmvE9M0C_Ep_EJxQR4FPg

提取码:iscm

Nacos的安装部署非常简单,如果只是作为测试学习,那么只需要将下载下来的Nacos进行解压,然后到bin目录,根据当前系统运行对应的startup.cmd即可。

注:如果nacos的版本在2.2.0+以上的版本时,必须执行此变更,否则无法启动。

修改conf目录下的application.properties文件。

设置其中的nacos.core.auth.plugin.nacos.token.secret.key值,详情可查看鉴权-自定义密钥.

Nacos支持三种部署模式

  • 单机模式 - 用于测试和单机试用。

  • 集群模式 - 用于生产环境,确保高可用。

  • 多集群模式 - 用于多数据中心场景。

将下载下来的nacos包进行解压,如果是window系统,打开bin文件夹,双击运行startup.cmd即可,linux也是一样,执行 sh startup.sh 命令。

默认运行的是集群模式,如果不想使用集群,只想用单机模式,那么需要再运行的时候添加如下命令.

window:

startup.cmd -m standalone

linux:

startup.sh -m standalone

如果不想每次运行添加上述命令,那么可以修改startup.cmd或sh startup.sh脚本,修改为set MODE="standalone",示例图如下:

配置完毕之后,执行启动脚本,启动Nacos,默认地址为http://localhost:8848/nacos,账号和密码为nacos/nacos,如果不想用这个,可以在登录之后的权限控制->用户列表菜单中进行修改。

示例图如下:

Springboot整合Nacos示例

环境依赖

  • JDK1.8+
  • Springboot2.x
  • nacos2.x

官方的版本对应建议配置:

版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。

但是为了防止版本问题,强烈建议Springboot的版本和nacos的版本完全一致。

maven仓库配置如下;

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/>
</parent> <dependencies> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Test 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency> <dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency> <!--日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j}</version>
</dependency> <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback}</version>
</dependency> <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback}</version>
</dependency> </dependencies>

注:如果Springboot是2.4以上的版本,maven仓库需要额外增加如下依赖:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

一个简单的示例

首先创建一个配置文件,配置文件用bootstrap.properties,配置信息如下:

spring.banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
server.port=8299
spring.application.name=springboot-nacos
spring.profiles.active=dev # nacos配置
## Nacos服务自动注册
nacos.discovery.autoRegister=true
## Nacos服务注册中心地址
spring.cloud.nacos.discovery.server-addr= http://127.0.0.1:8848
## Nacos服务配置中心地址
spring.cloud.nacos.config.server-addr= http://127.0.0.1:8848

然后再来创建一个基本的启动类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /**
* @Author pancm
* @Description springboot集成nacos配置中心
* @Date 2024/1/26
* @Param
* @return
**/
@SpringBootApplication
@EnableDiscoveryClient
public class App
{
private static final Logger logger = LoggerFactory.getLogger(App.class);
public static void main( String[] args )
{
// 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
SpringApplication.run(App.class, args);
logger.info("程序启动成功!");
}
}

这里我们还需要对配置是否生效进行测试,这里就创建一个Controller,然后调用接口的时候返回配置信息。@RefreshScope注解是可以进行动态刷新。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import static org.springframework.web.bind.annotation.RequestMethod.GET; /**
* @Author pancm
* @Description 官方示例文档
* @Date 2024/1/26
* @Param
* @return
**/
@RestController
@RequestMapping("config")
@RefreshScope
public class ConfigController { @Value("${pcm.name:pcm-1001}")
private String name; @RequestMapping(value = "/getName", method = GET)
public String getName() {
return name;
} }

:这里为了防止启动失败,添加配置的时候设置一个默认值。

然后运行App,启动成功,日志信息如下:

首先我们调用接口来查看当前的配置信息,输入http://localhost:8299/config/getName,返回示例图如下,可以看到是可以获取默认的配置。

然后我们在Nacos的页面上面添加一个pcm.name的配置,并且更改配置的值,这里我们更改为pcm-2001,然后点击发布。

这里需要注意一下DataId的名称命名规则,默认的情况下dataId=prefix.file-extension,其中profix默认为${spring.application.name}file-extension默认为properties。

如果指定了spring.profile.active,那么就会变成dataId=prefix-spring.profile.active.file-extension

比如上述的项目名称为springboot-nacos,配置文件的后缀是properties,那么DataId就是springboot-nacos.properties,指定了spring.profile.active=dev,那么DataId就是springboot-nacos-dev.properties

但是我指定了spring.profile.active=dev,为什么DataId是springboot-nacos.properties

也可以呢?因为这里还涉及到一个优先级的问题。

DataId有三个配置规则

  1. dataId =prefix
  2. dataId =prefix.file-extension
  3. dataId =prefix-spring.profile.active.file-extension

他们的优先级是按照匹配的精准度来进行了,也就是如果配置多个dataId的话,那么他会匹配最相近的,也就是匹配优先级是3>2>1,这里我们也可以通过启动中的日志进行查看。

发布成功之后我们可以看到日志也进行了刷新。

然后我们再进行访问http://localhost:8299/config/getName。通过下面的示例图我们可以看到配置已经刷新为我们设置的最新配置了。

Nacos配置管理

上述示例中,我们已经完成了一个简单的获取Nacos中的配置示例,并且可以实现配置刷新。但是如果我们有多个服务使用的话,那么我们需要对配置进行区分,不建议都是用默认的public空间,因此我们还需要创建新的命名空间,如果还有分组要求(一般就是环境区分,dev、test、prod),那么我们还可以再进行创建配置时指定好group。

在nacos的命名空间菜单中,我们创建一个新的命名空间,其中命名空间ID这个保证唯一就行,默认可以不填写。

创建成功之后,我们在来创建一个新的配置并且指定分组为dev,方便我们管理。此时里面的配置内容为pcm.name =pcm-dev

创建完成之后,我们在Springboot的项目配置文件中新增如下配置:

## nacos命名空间id
spring.cloud.nacos.config.namespace= pcm-namespace--id
## 对应的分组名称
spring.cloud.nacos.config.group= dev
## 配置文件后缀名,也可以不配置,默认为properties
spring.cloud.nacos.config.fileExtension= properties

重新启动项目,查看日子,我们可以看到已经配置成功了。

然后我们在重新启动项目,http://localhost:8299/config/getName。通过下面的示例图我们可以看到配置已经是设置的命名空间配置了。

多配置文件

在使用Nacos中,有时配置太多,不想放在一个配置文件中,此时就可以使用多个配置文件来进行区分管理。

在bootstrap.properties配置文件中新增如下配置,如果后续还有新的配置,参考下列配置,递增extension-configs[0]的数值即可,比如在新增一个配置文件,那么就是extension-configs[1] = xxx.properties 这样配置就可以了。

# 新增额外配置
##额外的第一个配置文件的dataId
spring.cloud.nacos.config.extension-configs[0].data-id=pcm-dev.properties
##额外的第一个配置文件的分组
spring.cloud.nacos.config.extension-configs[0].group=dev

在nacos中新增改配置文件,然后这里添加一个新的配置pcm.age=28.

然后再ConfigController代码中新增如下接口,添加完成之后重启项目。

    @Value("${pcm.age:18}")
private String age; @RequestMapping(value = "/getAge", method = GET)
public String getAge() {
return age;
}

访问http://localhost:8299/config/getAge。通过下面的示例图我们可以看到配置已经生生效了。

其他

关于SpringBoot整合nacos的demo简单讲解的文章就讲解到这里了,如有不妥,欢迎指正!

项目地址

SpringBoot 的nacos的项目工程地址:

https://github.com/xuwujing/springBoot-study/tree/master/springboot-nacos

SpringBoot整个集合的地址:

https://github.com/xuwujing/springBoot-study

SpringBoot整合系列的文章

音乐推荐

翩若惊鸿,婉若游龙,荣曜秋菊,华茂春松。仿佛兮若轻云之蔽月,飘飘兮若流风之回雪。远而望之,皎若太阳升朝霞;迫而察之,灼若芙蕖出渌波。--网易云网友评论

原创不易,如果感觉不错,希望给个推荐!您的支持是我写作的最大动力!

版权声明:

作者:虚无境

博客园出处:http://www.cnblogs.com/xuwujing

CSDN出处:http://blog.csdn.net/qazwsxpcm    

个人博客出处:http://www.panchengming.com

springboot整合nacos的入门Demo的更多相关文章

  1. 【Nacos】Springboot整合Nacos配置中心(二) 多环境配置

    本篇随笔接上一篇文章:Springboot整合Nacos配置中心(一),主要记录Nacos多环境的配置的方法 Nacos多环境的配置 方法一: 1.在项目中的bootstrap.yaml文件中配置激活 ...

  2. SpringBoot整合ActiveMQ快速入门

    Spring Boot 具有如下特性: 为基于 Spring 的开发提供更快的入门体验 开箱即用,没有代码生成,也无需 XML 配置.同时也可以修改默认值来满足特定的需求. 提供了一些大型项目中常见的 ...

  3. 基于springboot构建dubbo的入门demo

    之前记录了构建dubbo入门demo所需的环境以及基于普通maven项目构建dubbo的入门案例,今天记录在这些的基础上基于springboot来构建dubbo的入门demo:众所周知,springb ...

  4. SpringBoot整合SSM(代码实现Demo)

    SpringBoot整合SSM 如图所示: 一.数据准备: 数据库文件:数据库名:saas-export,表名:ss_company 创建表语句: DROP TABLE IF EXISTS ss_co ...

  5. springboot整合flowable-初步入门

    最近工作中有用到工作流的开发,引入了flowable工作流框架,在此记录一下springboot整合flowable工作流框架的过程,以便后续再次使用到时可以做一些参考使用,如果项目中有涉及到流程审批 ...

  6. MongoDB系列:三、springboot整合mongoDB的简单demo

    在上篇 MongoDB常用操作练习 中,我们在命令提示符窗口使用简单的mongdb的方法操作数据库,实现增删改查及其他的功能.在本篇中,我们将mongodb与spring boot进行整合,也就是在j ...

  7. 【Nacos】Springboot整合nacos配置中心(一)

    一.本地Nacos安装环境: Win7 ,JDK8 ,maven3.5 1.下载安装包 2.启动nacos服务,bin文件下下面startup.cmd 3.访问 http://localhost:88 ...

  8. SpringBoot整合Spring Security使用Demo

    https://start.spring.io/ 生成SpringBoot项目 pom文件应该是我这样的: <?xml version="1.0" encoding=&quo ...

  9. SpringBoot整合SpringData JPA入门到入坟

    首先创建一个SpringBoot项目,目录结构如下: 在pom.xml中添加jpa依赖,其它所需依赖自行添加 <dependency> <groupId>org.springf ...

  10. SpringBoot整合Nacos注册中心

    #### 什么是Nacos Nacos 是阿里巴巴的开源的项目,Nacos致力于帮助您发现.配置和管理微服务.Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流 ...

随机推荐

  1. The Cluster ID Zc7nlyfTQ5qPbhY2d8I_3A doesn't match stored clusterId Some(ZvQZIX9gTB-dj05be_i_-w) in meta.properties.

    启动kafka时报错(部分信息): [2022-05-12 20:26:05,589] INFO Cluster ID = Zc7nlyfTQ5qPbhY2d8I_3A (kafka.server.K ...

  2. MAC SAP for JAVA配置

    一.自定义应用程序服务器配置 conn = /H/<SAP路由器服务器地址(如果有)>/S/3299 /H/<SAP服务器地址>/S/32<Instance_no> ...

  3. 【收藏】制作艺术二维码,用 Stable Diffusion 就行!

    [收藏]Stable Diffusion 制作光影文字效果 https://www.cnblogs.com/Serverless/p/17620406.html 基于函数计算FC 快捷部署 Stabl ...

  4. Vue中生成二维码 组件库qrcode使用

    qrcode网址: https://www.npmjs.com/package/qrcode 安装代码如下: npm install qrcodeqrcode文档中生成二维码有很多环境下的用法.我们这 ...

  5. plsqll连接Oracle的两种方式

    第一种方式:配置tnsnames.ora 找到plsql软件根目录 下的配置文件

  6. java垮平台的原理-垃圾回收-day1

    目录 1. 跨平台原理 2. 垃圾回收 3. DOS的几个基本命令 4. PATH环境变量的作用 5 java的安装 6. 第一个java程序 6. 另外两个环境变量CLASS_PATH 与JAVA_ ...

  7. Apache ShardingSphere 实现分库分表及读写分离

    本文为博主原创,未经允许不得转载: 项目demo 源码地址:https://gitee.com/xiangbaxiang/apache-shardingjdbc 1. 创建Maven项目,并配置 po ...

  8. 介绍这个库:C# Blazor中显示Markdown文件

    1 讲目的 前几天上线了一个在线Icon转换工具,为了让大家使用放心,改了点代码,在转换下载Icon图标后立即删除临时文件,并在工具下面贴上了工具的开发步骤和代码,大家看这样改是否合适,见Issue ...

  9. Vue- 绑定的图片不显示

    需要通过 require包裹 <template> <div> {{user.username}}: <img :src="user.avatar" ...

  10. [IDEA] - tomcat VM配置

    -Dfile.encoding=UTF-8