【微服务】Nacos 注册中心

news2024/11/29 4:43:44
 <!-- nacos 依赖-->
 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-alibaba-dependencies</artifactId>
     <version>${nacos.version}</version>
     <type>pom</type>
     <scope>import</scope>
  </dependency>

一、初识 Nacos

1. Nacos 的环境安装与测试

Nacos 是阿里巴巴的产品,现在是 SpringBoot 中的一个组件。相比 Eureka 功能更加丰富,在国内受欢迎程度较高。Nacos 的官网是 Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网

安装好 Nacos 之后可以进入到其 bin 文件夹,双击startup.cmd 命令。也可通过指令打开 nacos

startup.cmd -m standalone

启动后界面如下,复制链接 http://10.183.72.85:8848/nacos/index.html 到浏览器打开 

nacos 管理登录页如下,用户名和密码默认都是 nacos。至此 nacos 的环境安装就做好了。

2. nacos 的使用

Nacos 是 SpringCloudAlibaba (阿里巴巴)的组件,而 SpringCloudAlibaba 也遵循 SpringCloud 中定义的服务注册、服务发现规范。因此使用 Nacos 和使用 Eureka 对于微服务来说,并没有太大区别。差别在于依赖不同、服务地址不同。接下来我们就开始探索如何使用 nacos 吧。

1. 在父工程引入依赖

 <!-- nacos 依赖-->
 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>${nacos.version}</version>
      <type>pom</type>
      <scope>import</scope>
  </dependency>

2. 在子工程引入 nacos-discovery 依赖;以及在 yml 配置文件配置 nacos 的服务地址 

 <!-- nacos 客户端依赖-->
 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 </dependency>
spring:
  cloud:
    nacos:
      server-addr: localhost:8848   # nacos 服务地址

3. 启动user-service 和 order-service , 刷新 nacos 的管理网站,发现服务已注册 

3. 小结

Nacos 服务搭建

  1. 下载安装包
  2. 解压
  3. 在bin目录下运行指令:startup.cmd -m standalone 

注:-m 参数后面指定的 standalone 是一个模式值,表示应用程序将以独立模式启动


Nacos服务注册和发现

  1. 引入 nacos.discovery 依赖
  2. 配置 nacos 地址 spring.cloud.nacos.server-addr

二、服务分级存储模型

1. 概念

一个服务有很多实例,例如我们的 每个 user-service 就是一个实例

localhost:8081

localhost:8082

可以把这些实例看作鸡蛋,服务看作菜篮子,把鸡蛋放在同一个菜篮,如果菜篮掉了,鸡蛋就芭比Q了。为了避免这个问题,可以把鸡蛋放在多个菜篮子里,这样一个菜篮子没了,其它菜篮子里还有鸡蛋。Nacos 的服务分级存储模型也引入了这个思想, 把实例分布在各个城市机房,同一个机房的服务就看作是一个集群。简单的说:一个服务(user-service)有多个集群,一个集群有多个实例。

当微服务互相访问时,会先访问本地集群实例,因为本地访问速度快。当本地集群不可用时,才访问其它集群。

Nacos 引入集群概念就是为了降低出现跨集群调用的概率,从而提高访问速度。

2. 集群配置

在服务提供者 user-service 子模块添加集群名称

spring:
  cloud:
    nacos:
      server-addr: localhost:8848  # nacos服务端地址
      discovery:
        cluster-name: HZ # 集群名称,也就是机房所在位置。例如:HZ,杭州

重启实例后,可以在 Nacos 管理网页看到集群的分布和我们设置的一样。

3. 同集群优先配置

在 服务消费者 order-service 的 application.yml 设置负载均衡的 IRule 为 NacosRule, 这个规则会优先寻找自己同集群的服务。

userservice:   #要做配置的服务端地址(服务提供则)
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

NacosRule 负载均衡策略

  1. 有限考虑本地集群服务实例
  2. 本地服务实例找不到再去找其它集群找可用实例,并且会警告
  3. 确定了可用实例列表后,采用随机负载均衡挑选一个实例

4. 权重配置

在实际项目部署中每台的机器性能有差异,我们想性能好的机器承担更多的请求。但 NacosRule 默认是同集群随机挑选的,自然不清楚哪台机器的性能好。所有 Nacos 为我们提供了权重配置来控制访问频率,权重越大访问频率越高。默认是1,权重值在[0, 1] 之间。如果设置为0,这台机器永远不会访问。下面说明如何设置权重。

1. 打开 Nacos 管理页面,哪个性能好权重就设高一些,默认是1,权重值在[0, 1] 之间。如果设置为0,这台机器永远不会访问。

5. 环境隔离

Nacos 中服务存储和数据存储的最外层都是一个名为 namespace 的东西, 用来做最外层隔离

 在 Nacos 管理页面可以创建 namespace, 用来隔离不同环境。

命名空间--》创建命名空间--》输入 “命名空间” 和 “描述” 信息 --》 确定,就创建好了。

保存后生成了一个空间 ID

在 服务消费者 order-server 模块的 appliacation.yml 配置

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 0484cc4a-3d5c-45dd-b916-d1af0b62b7c4 # 命名空间,填上述ID

重启 order-server 模块,来到 Nacos 管理网页,如下图发现多了一个 dev  

 此时再次访问数据,发现报错了,原因是 namespace 是唯一的,更改 namespace 后就找不到 userservice。

总的来说归纳以下几点事项 :

  • 每个 namespace 都有唯一的 id
  • 服务设置时要写 id, 而不是名称
  • 不同 namespace 下服务互不可见

6. Nacos 与 Eureka 的区别

 Nacos 的服务注册有两种实例:

临时实例默认类型,服务实例宕机超过一定时间,从服务列表剔除

非临时实例(持久实例):如果实例宕机,不会从服务列表提出。

spring:
  cloud:
    nacos:
     discovery:
        ephemeral: false # 设置为非临时实例

nacos 架构图如下 

Eureka 架构图如下 

 共同点:

  1. 都支持服务注册和服务拉取;
  2. 都支持为服务提供者做宕机监测;

不同点:

  1. Nacos支持服务端主动检测服务提供者状态:临时实例采用心跳模式;非临时实例采用主动检测模式;
  2. 临时实例心跳不正常会被剔除;非临时实例则不会被剔除;
  3. Nacos支持服务列表变更的消息推送模式,服务列表更新更及时;
  4. Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式(A: 可用性; C: 一致性;P: 区间容错性)

三、Nacos 配置管理

1 微服务拉取配置

当微服务部署的实例越来越多,逐个修改微服务配置就容易出错。我们需要一种统一配置管理方案,集中管理所有实例的配置。

Nacos 的配置管理一方面可以可以将配置统一管理;另一方面可以再更新配置后,及时通知微服务,实现热更新。

项目启动之前,会先读取 nacos 配置文件,然后再读取本地配置文件并和 nacos 配置文件合并。  

1. 在 user-service 模块的 pom 添加 nacos 配置管理依赖 

 <!-- nacos 的配置管理依赖-->
 <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 </dependency>

2. 创建 bootstrap.yml 配置依赖,如果本地配置文件有相同部分请去除

spring:
  application:
    name: userservice
  profiles:
    active: dev  #环境
  cloud:
    nacos:
      server-addr: localhost:8848  # nacos 地址
      config:
        file-extension: yaml  # 文件后缀名

 3. 在 user-service 模块的 Controller 层添加测试,读取配置文件中的 dateformat

4.  重启测试, 如下图说明已经成功读取到了我们在nacos中配置的日期格式。

注意:不是所有的配置都适合放在配置中心,维护比较麻烦;建以将一些关键参数,需要运行时调整的参数放到 nacos 配置中心,一般都是自定义的配置

2. 热更新的两种方式

所谓热更新就是修改 nacos 配置后,无需重启实现更新操作。

方式一

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

方式二

使用 @ConfigurationProperties 注解代替 @Value 注解。

1. 创建一个配置类 PatternProperties,代码如下

@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

 在 UserController 类注入刚才的 PatternProperties 配置类

 整体代码如下 

package cn.itcast.user.web;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private PatternProperties properties;

    @GetMapping("/now")
    public String now() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));
    }

}

四、Nacos 多环境共享配置

微服务启动该时会从 nacos 读取多个配置文件:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml

  • [spring.application.name].yaml,例如:userservice.yaml

无论 profile 如何变化,[spring.application.name].yaml 这个文件一定会加载,因此多环境共享配置可写入这个文件。

1. 配置

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

2.  共享配置文件添加上图所示的 属性名(envShardValue),一定要一致,否则无数据

 3. 修改端口为 8082 的 profile 值。这样就设置为 UserApplication (8081) 使用的 profile 是 dev,UserApplication2 (8082) 使用的profile是test。

 4. 启动 UserApplication:8082 和 UserApplication: 8083 

访问 http://localhost:8082/user/prop,结果如下:

访问 http://localhost:8083/user/prop,结果如下:

显然 dev 和 test  两个环境都访问到了 envShardValue 这个共享变量属性。

 2. 多种配置优先级

当 nacos 线上配置、本地配置 同时出现时,优先级如下: 

[服务名]-[环境].yaml  >  [服务名].yaml  >  本地配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2227329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Wasserstein Generative Adversarial Networks

Abstract 我们引入了一种名为 WGAN 的新算法&#xff0c;它是传统 GAN 训练的替代方案。 在这个新模型中&#xff0c;我们表明我们可以提高学习的稳定性&#xff0c;摆脱模式崩溃等问题&#xff0c;并提供对调试和超参数搜索有用的有意义的学习曲线。 此外&#xff0c;我们表明…

pip命令行安装pytest 一直报错

其实就是切换不同镜像安装 我最终成功的是阿里云镜像 pip install --trusted-host mirrors.aliyun.com pytest 也可以用其他的 pip install -i https://pypi.org/simple pytest # 或者使用其他的镜像源 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pytest

v4.7版本使用线下付款方式不给管理员发送新订单通知问题修复

在app/api/controller/v1/order/StoreOrderController.php文件中&#xff0c;将红框内的代码注释&#xff0c;加上绿框的代码即可修复 if ($this->services->setOrderTypePayOffline($order[order_id])) {event(NoticeListener, [$order, admin_pay_success_code]);retur…

DIY可视化-uniapp悬浮菜单支持拖动、吸附-代码生成器

在Uniapp中&#xff0c;悬浮菜单支持拖动和吸附功能&#xff0c;可以为用户带来更加灵活和便捷的操作体验。以下是对这两个功能的详细解释&#xff1a; 悬浮菜单支持拖动 提高用户体验&#xff1a;用户可以根据自己的需要&#xff0c;将悬浮菜单拖动到屏幕上的任意位置&#x…

MySQL企业常见架构与调优经验分享

文章目录 一、选择 PerconaServer、MariaDB 还是 MYSQL二、常用的 MYSQL 调优策略三、MYSOL 常见的应用架构分享四、MYSOL 经典应用架构 观看学习课程的笔记&#xff0c;分享于此~ 课程&#xff1a;MySQL企业常见架构与调优经验分享 mysql官方优化文档 调优MySQL参数 一、选择 …

Stable Diffusion 3.5发布:图像生成新纪元,多模态AI的突破!

在人工智能的图像生成领域&#xff0c;我们刚刚迎来了一位新的明星——Stable Diffusion 3.5。这是一款由多模态扩散Transformer&#xff08;MMDiT&#xff09;驱动的文本到图像模型&#xff0c;它在图像质量、字体处理、复杂提示理解以及资源效率方面都实现了显著提升。今天&a…

华为ensp静态路由,浮动路由,缺省路由讲解及配置

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;网络通信基础TCP/IP专栏&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年10月24日0点15分 祝大家程序员节快乐~ 路由的选择与管理至关重要。静态路由…

少儿编程进入义务教育课程:培养信息科技素养的新政策解读

近年来&#xff0c;随着数字化进程的推进和人工智能技术的普及&#xff0c;编程教育逐渐走入中小学课堂。教育部在《义务教育课程方案和课程标准&#xff08;2022年版&#xff09;》中正式将编程与信息科技教育纳入小学和初中的课程体系中&#xff0c;强调培养学生的计算思维、…

js监听div尺寸,ResizeObserver

示例&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><style>.observedDiv {width: 40vw;height: 50vh;background-color: lightblue;}</style></head><body><div id"…

NVR批量管理软件/平台EasyNVR多个NVR同时管理:H.265与H.264编码优势和差异深度剖析

在数字化安防领域&#xff0c;视频监控系统正逐步成为各行各业不可或缺的一部分。随着技术的不断进步&#xff0c;传统的视频监控系统已经难以满足日益复杂和多变的监控需求。下面我们谈及NVR批量管理软件/平台EasyNVR平台H.265与H.264编码优势及差异。 一、EasyNVR视频汇聚平台…

QT实时显示日志内容

性能有待提高&#xff1b; 能够读取指定目录下的日志文件&#xff0c;显示在下拉框中。 选择某一个日志之后&#xff0c;点击获取数据按钮&#xff0c;能够实时刷新日志内容。 但是每次刷新都会对整个文件进行读取&#xff0c;文本框重新加载文本。效率很低&#xff0c;影响性能…

Unity 编辑器扩展精髓 之 窗口创建与绘制基础组件

本专栏基础资源来自唐老狮和siki学院&#xff0c;仅作学习交流使用&#xff0c;不作任何商业用途&#xff0c;吃水不忘打井人&#xff0c;谨遵教诲 本文只需要知道三个重点即可 EditorWindow类负责操作窗口 OnGUI方法是进入GUI窗口绘制的关键函数 GUILayout类负责绘制具体内容 …

前端页面样式没效果?没应用上?

当我们在开发项目时会有很多个页面、相同的标签&#xff0c;也有可能有相同的class值。样式设置的多了&#xff0c;分不清哪个是当前应用的。我们可以使用网页的开发者工具。 在我们开发的网页中按下f12或&#xff1a; 在打开的工具中我们可以使用元素选择器&#xff0c;单击我…

项目管理软件:5款甘特图工具测评

在项目管理中&#xff0c;甘特图作为一种直观且高效的任务进度展示工具&#xff0c;被广泛应用于各个行业。以下是几款功能强大、易于使用的甘特图工具&#xff0c;它们能够帮助项目经理更好地规划、跟踪和管理项目进度。 1、进度猫 进度猫是国内项目管理新秀&#xff0c;是…

#渗透测试#SRC漏洞挖掘# 信息收集-Shodan进阶路由交换

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

你真的会使用万用表吗?

​更多电路设计&#xff0c;PCB设计分享及分析&#xff0c;可关注本人微信公众号“核桃设计分享”&#xff01; 前几天公司一个刚毕业出来的小伙伴在实验室用万用表测负载电流的时候&#xff0c;直接打火花&#xff0c;把他吓得不轻 我一看&#xff0c;好家伙&#xff0c;万用…

基于SSM的心理咨询管理管理系统(含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的心理咨询管理管理系统拥有三个角色&#xff1a;学生用户、咨询师、管理员 管理员&#xff1a;学生管理、咨询师管理、文档信息管理、预约信息管理、测试题目管理、测试信息管理…

SpringBoot框架下的扶贫信息管理系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理精准扶贫管理系统的相关信息成为必然。开发…

如何用猿大师办公助手实现OA系统中Word公文/合同在线编辑及流转?

在OA系统或者合同管理系统中&#xff0c;我们会经常遇到网页在线编辑Word文档形式的公文及合同的情况&#xff0c;并且需要上级对下级的公文进行批注等操作&#xff0c;或者不同部门的人需要签字审核&#xff0c;这就需要用到文档流转功能&#xff0c;如何用猿大师办公助手实现…

2024年全国山洪径流模拟与洪水危险性评价技术及典型地区洪水淹没及损失分析——建议收藏!

原文链接&#xff1a;2024年全国山洪径流模拟与洪水危险性评价技术及典型地区洪水淹没及损失分析——建议收藏&#xff01;https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247624758&idx2&sn9f51a07adadc7a7af5ddfe79dd5dd22e&chksmfa8da9d1cdfa20c7305…