Nacos介绍

Nacos /n:ks/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生运用的动态服务发现、装备办理和服务办理渠道。

Nacos 致力于帮助您发现、装备和办理微服务。Nacos 供给了一组简略易用的特性集,帮助您快速完成动态服务发现、服务装备、服务元数据及流量办理。

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

官方文档

nacos.io/zh-cn/docs/…

Nacos安装布置

环境依靠:

  • JDK1.8+

下载地址
官网地址:
github.com/alibaba/nac…
百度网盘地址:
链接:pan.baidu.com/s/1fTmvE9M0…
提取码: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”,示例图如下:

SpringBoot整合nacos的入门Demo

装备结束之后,履行发动脚本,发动Nacos,默许地址为http://localhost:8848/nacos,账号和密码为nacos/nacos,假如不想用这个,能够在登录之后的权限操控->用户列表菜单中进行修正。

示例图如下:

SpringBoot整合nacos的入门Demo

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,发动成功,日志信息如下:

SpringBoot整合nacos的入门Demo

首要咱们调用接口来检查当时的装备信息,输入http://localhost:8299/config/getName,回来示例图如下,能够看到是能够获取默许的装备。

SpringBoot整合nacos的入门Demo

然后咱们在Nacos的页面上面增加一个pcm.name的装备,而且更改装备的值,这儿咱们更改为pcm-2001,然后点击发布。

SpringBoot整合nacos的入门Demo

这儿需求留意一下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,这儿咱们也能够经过发动中的日志进行检查。

SpringBoot整合nacos的入门Demo

发布成功之后咱们能够看到日志也进行了改写。

SpringBoot整合nacos的入门Demo

然后咱们再进行拜访http://localhost:8299/config/getName。经过下面的示例图咱们能够看到装备现已改写为咱们设置的最新装备了。

SpringBoot整合nacos的入门Demo

Nacos装备办理

上述示例中,咱们现已完成了一个简略的获取Nacos中的装备示例,而且能够完成装备改写。可是假如咱们有多个服务运用的话,那么咱们需求对装备进行区分,不主张都是用默许的public空间,因而咱们还需求创立新的命名空间,假如还有分组要求(一般便是环境区分,dev、test、prod),那么咱们还能够再进行创立装备时指定好group。

在nacos的命名空间菜单中,咱们创立一个新的命名空间,其间命名空间ID这个确保唯一就行,默许能够不填写。

SpringBoot整合nacos的入门Demo

创立成功之后,咱们在来创立一个新的装备而且指定分组为dev,便利咱们办理。此刻里面的装备内容为pcm.name =pcm-dev

SpringBoot整合nacos的入门Demo

创立完成之后,咱们在Springboot的项目装备文件中新增如下装备:

## nacos命名空间id
spring.cloud.nacos.config.namespace= pcm-namespace--id
## 对应的分组名称
spring.cloud.nacos.config.group= dev
## 装备文件后缀名,也能够不装备,默许为properties
spring.cloud.nacos.config.fileExtension= properties

重新发动项目,检查日子,咱们能够看到现已装备成功了。

SpringBoot整合nacos的入门Demo

然后咱们在重新发动项目,http://localhost:8299/config/getName。经过下面的示例图咱们能够看到装备现已是设置的命名空间装备了。

SpringBoot整合nacos的入门Demo

多装备文件

在运用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.

SpringBoot整合nacos的入门Demo

然后再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的demo简略解说的文章就解说到这儿了,如有不当,欢迎指正!

项目地址

SpringBoot 的nacos的项目工程地址:
github.com/xuwujing/sp…

SpringBoot整个集合的地址:
github.com/xuwujing/sp…

SpringBoot整合系列的文章

音乐引荐

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

原创不易,假如感觉不错,希望给个引荐!您的支撑是我写作的最大动力!
版权声明:
作者:虚无境
博客园出处:www.cnblogs.com/xuwujing
CSDN出处:blog.csdn.net/qazwsxpcm    
个人博客出处:www.panchengming.com