【Spring Cloud Alibaba】:Nacos 使用全详解

【Spring Cloud Alibaba】:Nacos 使用全详解

目录

🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
🌟了解分布式系统的 Gossip协议 请看 : Gossip协议:分布式系统中的“八卦”传播艺术

其他优质专栏: 【🎇SpringBoot】【🎉多线程】【🎨Redis】【✨设计模式专栏(已完结)】…等

如果喜欢作者的讲解方式,可以点赞收藏加关注,你的支持就是我的动力
✨更多文章请看个人主页: 码熔burning
前言:
上文我们了解到 Nacos 的作用,以及在本地启动 Nacos 的服务器,接下来,在本篇文件会详细的讲解 Nacos 的使用和配置。🎈

一、服务注册发现

整合 Spring Cloud AlibabaNacos 简单的很,直接启动 Alibaba提供的 Nacos 服务即可,这样就能让程序员把更多的经历放在核心业务上。

看本文之前先看:【Spring Cloud Alibaba】:Nacos 入门讲解

以下是一个简单的架构图:

在这里插入图片描述

接下来我要按照这个简单的架构图来讲解!

参考上面的架构图,需要创建两个模块,分别是nacos-provider(服务提供者)、nacos-consumer(服务消费者)

  • nacos-provider:注册进入nacos-server,对外暴露服务
  • nacos-consumer:注册进入nacos-server,调用nacos-provider的服务

1、nacos-provider服务提供者创建

1. 添加 Maven 依赖
在pom文件中需要添加 spring-cloud-starter-alibaba-nacos-discovery 这个依赖,代码如下:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

这里没有指定版本是因为父模版指定了 spring-cloud-alibaba-dependencies 的版本,所以子模块直接引入依赖即可,因为这样能够更好地达到版本管理的效果。
具体还请看:【Spring Cloud Alibaba】:Nacos 入门讲解

2.配置YML文件

server:port:9901spring:application:# 指定服务名称,在nacos中的名字name: nacos-provider cloud:nacos:discovery:# nacos的服务地址,nacos-server中IP地址:端口号server-addr: 127.0.0.1:8848

3.开启服务注册和发现功能
大部分 SpringBoot 引入了某些功能模块之后都要手动的在启动类添加@EnableXxxx 来开启某个功能,否则无法引入自动配置。这里开启服务注册发现功能的注解是:@EnableDiscoveryClient

@EnableDiscoveryClient//开启服务注册发现功能@SpringBootApplicationpublicclassProviderApplication{publicstaticvoidmain(String[] args){SpringApplication.run(ProvideApplication.class, args);}}

4.编写接口
由于 nacos-provider 作为服务的提供者,肯定是需要提供服务的,这里编写一个接口来供消费者服务。

@RestController@RequestMapping("/nacos")publicclass testController {@GetMapping("/test")publicStringtest(){return"调用了服务者提供服务接口";}}

5.启动项目
启动项目就是在项目的启动类中启动,点这绿色的小三角符号。

在这里插入图片描述

启动完成之后,可以在 Nacos 中查看是否以及进行了服务的注册,可以看到 nacos-provider 已经成功注册到了 Nacos 中。

在这里插入图片描述

2、nacos-consumer服务消费者创建

nacos-consumernacos-provider 步骤差不多
1.添加 Maven 依赖
nacos-consumer 服务的pom文件添加 spring-cloud-starter-alibaba-nacos-discovery

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

2.配置YML文件

server:port:9902spring:application:name: nacos-consumer cloud:nacos:discovery:server-addr: 127.0.0.1:8848service-url:nacos-provider: http://nacos-provider #微服务的访问名称

3.开启服务注册和发现功能
使用 @EnableDiscoveryClient 注解来开启服务注册和发现功能

@SpringBootApplication@EnableDiscoveryClient//开启功能的注解publicclassConsumerApplication{publicstaticvoidmain(String[] args){SpringApplication.run(ConsumerApplication.class, args);}}

4.调用 nacos-provider 的接口
首先创建一个 RestTemplate ,将其注册到 IOC 容器中,然后添加@LoadBalanced注解来开启负载均衡。
开启负载均衡前需要添加依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
publicclassAutoBeanConfig{@Bean@LoadBalanced//开启负载均衡publicRestTemplaterestTemplate(){returnnewRestTemplate();}}

编写调用接口:

@RestControllerpublicclassConsumerController{@ResourceprivateRestTemplate restTemplate;//获取配置文件中的微服务访问地址@Value("${service-url.nacos-provider}")privateString servicePrivadeUrl;@GetMapping("/test")publicResponseEntity<String>test(){return restTemplate.getForEntity(servicePrivadeUrl +"/nacos/test",String.class);}}

注意: 因为已经将 nacos-provider 注入到了 Nacos 中了,所以是可以直接通过服务名直接找到对应的服务的,而 servicePrivadeUrl 注入的就是服务名。

5.启动项目
启动之后就能看到 Nacos 中已经有两个服务了

在这里插入图片描述

然后进行接口的调用看看能不能调用成功,在浏览器中访问:http://localhost:9902/test,可以看到调用成功了。

在这里插入图片描述


总结:可以看到,Nacos 的服务注册和发现是如此的简单。还不需要自己搭建注册中心,直接提供好了。

二、配置管理

为什么需要配置管理呢?🤔试想一下、如果你的一个线上项目想要修改某个配置,比如数据源变了,要添加新的数据源,这个时候修改完了应该怎么办?把项目停掉重启?你觉得这样做合理吗,显然是不合理的吧。

当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。

Nacos 一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。

在这里插入图片描述

1、添加配置文件

首先,在 Nacos 添加配置文件,如下图步骤:

在这里插入图片描述


填写完配置信息之后,进行发布

在这里插入图片描述

Data ID是什么?dataId是一个配置的唯一标识,怎么取值呢?格式如下
${prefix}-${spring.profiles.active}.${file-extension}

  • prefix:前缀,默认是spring.application.name的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active: 即为当前环境对应的 profile。当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。

2、拉取配置

创建一个模块,名叫 config-demo 父类为 ,来获取 Nacos 的配置内容

首先添加依赖:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>

创建一个 bootstrap.yml 文件,该文件是用来设置 Nacos 的配置,该文件会在 application.yml 之前被读取

在这里插入图片描述


配置如下

spring:application:name: nacos-config # 服务名称profiles:active: dev #开发环境,这里是dev cloud:nacos:server-addr: localhost:8848# Nacos地址config:file-extension: yaml # 文件后缀名

根据配置文件的内容,他会去 Nacos 中读取作为 nacos-config-dev.yaml 的Data ID里面的内容,也就是我们上面在 Nacos 中添加的。

在这里插入图片描述

application.yml 文件设置改模块的端口为9903

server:port:9903

3、读取配置

创建一个 controller 来测试一下

@RestController publicclassNacosController{ @Value("${datas.version}")//读取Nacos的配置信息privateString version; @GetMapping("/test")publicStringtest(){return"这是在Nacos中添加的配置信息: version = "+ version;}}

启动项目,访问 http://localhost:9903/test ,结果如下:

在这里插入图片描述

恭喜你,读取 Nacos 的配置信息成功!🎉

但是目前还不能动态刷新(热更新), 也就是修改了 Nacos 中的配置信息,无需启动项目就能实时的读取新的配置信息。不相信?🤔那你请看!

在这里插入图片描述

不启动,重新访问 http://localhost:9903/test

在这里插入图片描述

那怎么才能实现热更新呢?别急,往下看!

4、配置热更新

方式一:添加 @RefreshScope 注解

@Value 注入的变量所在类上添加注解 @RefreshScope

在这里插入图片描述

重新启动项目,访问http://localhost:9903/test

在这里插入图片描述


修改 Nacos 中的配置信息:

在这里插入图片描述


再次访问http://localhost:9903/test

在这里插入图片描述
方式二:使用@ConfigurationProperties注解代替@Value注解。

添加一个类,来读取 Nacos 的配置信息

@Component @Data @ConfigurationProperties(prefix ="datas")publicclassDatasProperties{privateString version;}

然后再 controller 中使用这个类来代替@Value

在这里插入图片描述


重启应用,访问http://localhost:9903/test

在这里插入图片描述

修改 Nacos 的配置内容:

在这里插入图片描述

访问http://localhost:9903/test

在这里插入图片描述

5、多环境共享

其实微服务启动时,会去 nacos 读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
  • [spring.application.name].yaml,例如:userservice.yaml
    [spring.application.name].yaml不包含环境,因此可以被多个环境共享。
1)添加环境共享配置

我们首先在 nacos 中添加一个 nacos-config.yaml

在这里插入图片描述
在这里插入图片描述
2)读取环境共享配置

在 nacos-config 服务中修改 DatasProperties 类,读取新添加的属性内容:

在这里插入图片描述

修改 controller 类的内容

在这里插入图片描述
3)运行两个ConfigApplication

复制一个 nacos-config 服务,修改端口号为,修改Active profiles,然后运行两个程序。

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分别访问 http://localhost:9903/testhttp://localhost:9904/test

在这里插入图片描述
在这里插入图片描述

可以看出来,不管是 dev ,还是 test 环境,都读取到了 content 这个属性的值。

4)配置共享的优先级
在这里插入图片描述

三、多环境配置隔离

一般在业务开发的时候,至少会有三个环境,也就是开发(dev),测试(test),生产环境(prod)

每个环境肯定配置是大部分是不一样的,所以说,怎么才能很好的在不同的环境使用不一样的配置呢?🤔是的,Nacos 就能够很好的区分以上三种不同的配置。

Nacos 是如何区分的呢?答案就是 Namespace

Namespace(命名空间):解决多环境及多租户数据的隔离问题 在多套不同的环境下,可以根据指定的环境创建不同的Namespace,实现多环境的数据隔离

查看配置信息所处在那个命名空间:

在这里插入图片描述

1、命名空间的创建

创建一个命名空间:

在这里插入图片描述

作者这里创建了3个不同的命名空间

在这里插入图片描述

创建完成之后,那应该怎么使用呢?怎么指定那个命名空间呢?答案就是: 命名空间ID

2、添加配置信息

首先在 dev 这个命名空间下添加配置信息

在这里插入图片描述

3、读取不同环境下的配置信息

修改配置文件 bootstrap.yml

在这里插入图片描述

配置完毕,启动项目,访问 http://localhost:9903/test

在这里插入图片描述

四、业务配置隔离

在实际项目中,是有很多的微服务的,不同服务之间的配置是不一样的,那这个时候如果都创建在一起,那会显得非常的臃肿,难以区分,Nacos 针对这个问题是如何做的呢?🤔
答案就是 Group,该单词大家都认识吧,也就是分组的意思。😁

Group:Nacos 中的一组配置集,是组织配置的维度之一,简单的说则是不同的系统或微服务的配置文件可以放在一个组里。Nacos如果不指定Group,则默认的分组是DEFAULT_GROUP。

对于有多个微服务而言,比如订单系统,用户系统,针对这两个不同的微服务,可以将他们单独的分为一个组,订单系统分在ORDER_GROUP、用户系统分在USER_GROUP

1、创建配置信息指定Group分组

在命名空间 dev 环境下创建一个配置信息,指定分组

在这里插入图片描述
在这里插入图片描述

2、读取Group的配置信息

修改配置文件 bootstrap.yml 的内容

在这里插入图片描述

配置完成,启动项目,访问 http://localhost:9903/test

在这里插入图片描述

五、Nacos实现共享配置

共享配置,主要体现在随着项目中的微服务数量越来越多😣,而这些微服务多多少少都会有一些共同的配置,比如数据源信息啊。而这个时候我们就可以将这些共同的配置抽取出来,作为项目中共有的配置。

Nacos 就能很好的实现共享配置,接下来让我来带你一步一步地操作。😁

1、添加一个环境共享配置

在这里插入图片描述


在这里插入图片描述
注意: 因为我们是在public命名空间下创建的共享配置,所以在微服务的配置文件中不指定namespace的值默认就是读取在public命名空间下的配置信息

2、读取共享配置

修改 nacos-config 的配置文件 bootstrap.yaml 的内容

在这里插入图片描述

这里就通过 @Value 注解来获取 Nacos 的配置内容

在这里插入图片描述


启动项目,访问 http://localhost:9903/test1

在这里插入图片描述
注意:如果共享配置信息放在了其他命名空间或者指定了分组,需要填写相应的namespace和Group
在这里插入图片描述

六、Nacos的持久化

Nacos默认使用的是内嵌的数据库 Derby ,如果想要更换数据库,比如 mysql ,也是非常简单的。

首先在 MySQL 中创建一个数据库,名为 nacos_config(名字随意哈),然后执行 Nacos 提供的 SQL 脚本,在 Nacos 下载目录的 conf 文件夹下


在这里插入图片描述

SQL 脚本执行完成之后,生产的表如下:


在这里插入图片描述

然后修改配置文件的数据源


在这里插入图片描述

在配置文件中取消 MySQL 数据源的注释,配置成自己的数据源即可


在这里插入图片描述

修改完毕,重启 Nacos-server

七、Nacos集群的搭建

Nacos推荐集群模式部署,这样可以避免单点故障,官方给出的 Nacos 的集群图:


在这里插入图片描述


其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。

企业中大致会是这样的架构:


在这里插入图片描述

那如何搭建集群呢?
首先进入到 conf 文件下,找到 cluster.conf.example 文件复制一份并修改名称为 cluster.conf 放到当前目录下


在这里插入图片描述

修改内容如下:

192.168.124.1:8847 192.168.124.1:8848 192.168.124.1:8849 

192.168.124.1就是你的服务器IP,后面的是Nacos的端口号

修改完成之后,将nacos文件复制两份


在这里插入图片描述

然后分别修改两个个文件夹中的application.properties
nacos1:

server.port=8847

nacos2:

server.port=8849

然后分别启动三个 nacos 节点,我这里先启动两个,来查看效果,双击 startup.cmd 文件
访问 http://localhost:8848/nacos ,点击集群管理,可以看到

在这里插入图片描述

但是一般会使用 nginx 来进行反向代理,这里就不演示 nginx 的搭建了。

nginx 配置文件的内容大致为:

upstream nacos{ server 192.168.124.1:8847 server 192.168.124.1:8848 server 192.168.124.1:8849} server{ listen 80; location /{proxy_pass http://nacos;}}

你以为这样就完了? 不,还没有完!
你既然搭建了集群,那肯定是要修改项目的 bootstrap.yaml


在这里插入图片描述

或者:


在这里插入图片描述
到目前为止,你已经掌握了Nacos的大部分知识了,该文章也告一段落了

拓展

Nacos 默认是 AP,但可以通过配置切换到 CP 模式。 选择哪种模式取决于你的业务需求。 如果对可用性要求更高,选择 AP;如果对数据一致性要求更高,选择 CP。

深入了解CAP知识请看:CAP定理和BASE理论 趣学!

Read more

AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

云边有个稻草人-ZEEKLOG博客 目录 引言 一、什么是DeepSeek? 1.1 DeepSeek平台概述 1.2 DeepSeek的核心功能与技术 二、蓝耘通义万相2.1概述 2.1 蓝耘科技简介 2.2 蓝耘通义万相2.1的功能与优势 1. 全链条智能化解决方案 2. 强大的数据处理能力 3. 高效的模型训练与优化 4. 自动化推理与部署 5. 行业专用解决方案 三、蓝耘通义万相2.1与DeepSeek的对比分析 3.1 核心区别 3.2 结合使用的优势 四、蓝耘注册流程 五、DeepSeek与蓝耘通义万相2.1的集成应用 5.1 集成应用场景 1. 智能医疗诊断

By Ne0inhk
基于腾讯云HAI + DeepSeek快速设计自己的个人网页

基于腾讯云HAI + DeepSeek快速设计自己的个人网页

前言:通过结合腾讯云HAI 强大的云端运算能力与DeepSeek先进的 AI技术,本文介绍高效、便捷且低成本的设计一个自己的个人网页。你将了解到如何轻松绕过常见的技术阻碍,在腾讯云HAI平台上快速部署DeepSeek模型,仅需简单几步,就能获取一个包含个人简介、技能特长、项目经历及联系方式等核心板块的响应式网页。 目录 一、DeepSeek模型部署在腾讯云HAI 二、设计个人网页 一、DeepSeek模型部署在腾讯云HAI 把 DeepSeek 模型部署于腾讯云 HAI,用户便能避开官网访问限制,直接依托腾讯云 HAI 的超强算力运行 DeepSeek-R1 等模型。这一举措不仅降低了技术门槛,还缩短了部署时间,削减了成本。尤为关键的是,凭借 HAI 平台灵活且可扩展的特性,用户能够依据自身特定需求定制专属解决方案,进而更出色地适配特定业务场景,满足各类技术要求 。 点击访问腾讯云HAI控制台地址: 算力管理 - 高性能应用服务 - 控制台 腾讯云高性能应用服务HAI已支持DeepSeek-R1模型预装环境和CPU算力,只需简单的几步就能调用DeepSeek - R1

By Ne0inhk
如何通过 3 个简单步骤在 Windows 上本地运行 DeepSeek

如何通过 3 个简单步骤在 Windows 上本地运行 DeepSeek

它是免费的——社区驱动的人工智能💪。         当 OpenAI 第一次推出定制 GPT 时,我就明白会有越来越多的人为人工智能做出贡献,并且迟早它会完全由社区驱动。         但从来没有想过它会如此接近😂让我们看看如何在 Windows 机器上完全免费使用第一个开源推理模型!  步骤 0:安装 Docker 桌面         我确信很多人已经安装了它,所以可以跳过,但如果没有 — — 这很简单,只需访问Docker 的官方网站,下载并运行安装 👍         如果您需要一些特定的设置,例如使用 WSL,那么有很多指导视频,请查看!我将继续下一步。 步骤 1:安装 CUDA 以获得 GPU 支持         如果您想使用 Nvidia 显卡运行 LLM,则必须安装 CUDA 驱动程序。(嗯……是的,它们需要大量的计算能力)         打开CUDA 下载页面,

By Ne0inhk
在 VSCode 中本地运行 DeepSeek,打造强大的私人 AI

在 VSCode 中本地运行 DeepSeek,打造强大的私人 AI

本文将分步向您展示如何在本地安装和运行 DeepSeek、使用 CodeGPT 对其进行配置以及开始利用 AI 来增强您的软件开发工作流程,所有这些都无需依赖基于云的服务。  步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT         要在本地运行 DeepSeek,我们首先需要安装Ollama,它允许我们在我们的机器上运行 LLM,以及CodeGPT,它是集成这些模型以提供编码辅助的 VSCode 扩展。 安装 Ollama Ollama 是一个轻量级平台,可以轻松运行本地 LLM。 下载Ollama 访问官方网站:https://ollama.com * 下载适合您的操作系统(Windows、macOS 或 Linux)的安装程序。 * 验证安装 安装后,打开终端并运行: ollama --version  如果 Ollama 安装正确,

By Ne0inhk