【分布式微服务专题】从单体到分布式(二、SpringCloud整合Nacos)

目录

  • 前言
  • 阅读对象
  • 阅读导航
  • 前置知识
  • 笔记正文
    • 一、下载安装
    • 二、项目整合
      • 2.1 服务注册与发现
      • 2.2 动态配置管理
    • 三、其他实验
    • 四、服务之间的调用
  • 学习总结
  • 感谢

前言

本篇笔记主要是记录我整合Nacos项目进来的过程。以实现服务注册发现,以及分布式配置管理。关于Nacos,右侧点击:Nacos官网传送门

阅读对象

  1. 需要有实际Springboot-web开发经验
  2. 了解Nacos基本使用(可以从前言里面给的链接去官网学习,或者看看这篇文章《Nacos使用详解》)

阅读导航

系列上一篇文章:《【分布式微服务专题】从单体到分布式(一、SpringCloud项目初步升级)》

前置知识

笔记正文

一、下载安装

1)下载
当前环境:win11
版本:2.2.3,官方介绍说这是当前推荐的稳定版本
下载地址:Nacos2.2.3下载
在这里插入图片描述
2)解压运行
解压,然后进入nacos/bin目录,以单机模式运行startup.cmd -m standalone在这里插入图片描述
当看到下面这个界面的时候就表示启动成功了:
在这里插入图片描述
接着,访问Nacos自带的客户端验证一下:http://localhost:8848/nacos
在这里插入图片描述

二、项目整合

Nacos在项目模块上,大概会分为两个,分别是:nacos-confignacos-discovery,即:【分布式配置】和【服务注册与发现】。下面我们就分开两步来整合。

  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更
  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现

2.1 服务注册与发现

1)首先是现在pom中添加【服务注册与发现】的jar包依赖

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

2)添加项目yml配置

spring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848

3)最后就是在启动类上添加@EnableDiscoveryClient启用【服务注册与发现】相关功能
4)启动服务。我则是添加到了shen-product服务上,效果如下:
在这里插入图片描述
可以在nacso的服务列表中,看到shen-product注册到了nacos上。我们也可以尝试启动其他服务去验证哦。比如,我这里再启动一个shen-productshen-order服务。
在这里插入图片描述
点击shen-product服务集群的的详情可以看到如下画面:
在这里插入图片描述
OK,非常强大。注意刀上面的权重了吗?你会想到啥?对嘛,负载均衡呀xdm。
对了,想要在IDEA里面启动多个服务实例其实也不难,就是右上角新增一个SpringBootApplication实例就好,当然注意修改端口
在这里插入图片描述
5)调用shen-product
我们在上面启动了两个shen-product实例,我们来试试效果。先来试试http://localhost:9001/product/list,再来试试http://localhost:9002/product/list
在这里插入图片描述
在这里插入图片描述

2.2 动态配置管理

说到动态配置这个东西,有个前置内容需要先跟大家说说。Nacos提供的这个动态配置,是用于存储配置和其他元数据的 key/value,为分布式系统中的外部化配置提供服务器端和客户端支持。比如:同一组服务集群里面共享一些配置application.yml
那你们,还记得SpringBoot项目得application.yml加载顺序吗?包括其他所有配置。正常来说包括但不限于以下:

  1. 命令行参数
  2. 操作系统环境变量
  3. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  4. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件 再来加载不带profile
  5. jar包外部的application.properties或application.yml(不带spring.profile)配置文件
  6. jar包内部的application.properties或application.yml(不带spring.profile)配置文件

上面的内容不是重点,重点是,这里体现了一种配置思想:高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 (覆盖 + 并级)。
那么问题就来了,既然SpringBoot配置文件需要遵循以上原则,那么,我在Nacos中的配置文件如何获取?有同学会说:我们不是有Nacos的地址嘛,通过地址去下载获取咯。确实是的,但是Nacos的地址你配置在哪里?我们上面的示例是把它配置在application.yml文件吧?但是application.yml文件要互补,然而想要获取最全的配置文件一定要先去nacos下载!所以在引入nacos-config配置中心的时候,就出现了逻辑矛盾。
为了解决这个问题,SpringCloud标准约定,引入一个全新的配置文件bootstrap.yml。它跟application.yml差不多,只不过优先级大于后者。bootstrap直译:引导。

1)首先是现在pom中添加【配置中心】的jar包依赖

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

另外我们不是在上面说要引入新的配置文件bootstrap.yml嘛,似乎2.x版本之后需要额外引入另一个包才行,不然会报错找不到bootstrap配置文件,如下:(下面这个包来自spring-cloud-dependencies,所以需要自己添加这个项目的管理依赖哦)

   <!-- bootstrap文件发现--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>

2)在bootstrap.yml文件配置nacos配置中心地址(spring.cloud.nacos.config

server:port: 9001spring:application:name: shen-productcloud:nacos:discovery:server-addr: 127.0.0.1:8848config:server-addr: 127.0.0.1:8848

3)在nacos中新建两张配置表
说到配置文件,首先需要向大家解释。SpringCloud应用会首先向Nacos查找${prefix}-${spring.profiles.active}.${file-extension}的配置文件。

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
  • 更多内容请查看Nacos Config

比如我上面的配置中,会默认先查找shen-product.properties文件。
但是通常我们在配置中心里面,还会自定义很多通用的配置文件,比如我这么配置:

  1. application-conf.yaml:用来配置所有微服务的数据库配置。毕竟我是在试验阶段,共用一个数据库很合理吧… 甚至redis,mq等等。这些配置往往不需要支持动态更新
  2. config-info.yaml:用来存放一些需要动态更新的业务配置。例如我在里面存放了一个config.author来存放作者名字

如下图:
在这里插入图片描述
在这里插入图片描述
4)修改bootstrap.yml文件,支持yaml格式配置文件,支持拓展配置文件

server:port: 9001spring:application:name: shen-productcloud:nacos:discovery:server-addr: 127.0.0.1:8848config:server-addr: 127.0.0.1:8848file-extension: yamlextension-configs:- data-id: application-conf.yaml- data-id: config-info.yamlrefresh: true

5)商品服务新增测试接口
在这里插入图片描述
注意上面@RefreshScope注解,用来开启类的动态配置刷新

6)访问http://localhost:9001/product/getMyMan测试接口;修改配置继续测试

三、其他实验

官方还有一些其他的东西,比如:
在这里插入图片描述
这里就不试了,感觉Nacos比较重要的应该就是以上两点。另外还有Nacos集群搭建等等,也不在这里实验咯。

四、服务之间的调用

前面我的很多接口示例都是在单个服务上发生的,在我们的实际使用场景中,肯定会存在跨服务之间的调用。目前正在学习DubboOpenFeign,看看整合哪一种。

不过考虑到Alibaba的微服务体系,我应该会选择整合Dubbo。理由如下:

  1. 横向对比的话,Dubbo可以完美替代OpenFeign
  2. OpenFeign唯一的优势应该是在于使用更简单,不过我觉得缺点是它只能使用http协议。http在我的刻板印象里面就是性能很拉跨,当然,http还有http1.1http2,Dubbo框架可以支持http2,而前者默认不支持,不过也可以切换客户端的方式来支持
  3. 学习Dubbo更有利于面试
  4. Dubbo唯一的缺点就是学习成本会高一点,毕竟内容多,呜呜呜

其实我还有一点疑问,Dubbo看官网介绍,总感觉跟Nacos有很多功能是重叠的,咋回事呢
在这里插入图片描述

学习总结

感谢

感谢本站大佬【作者:不凉帅】的文章《Nacos使用详解》)

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

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

相关文章

重塑未来工作方式,亚马逊云科技re:Invent推出生成式AI助手Amazon Q

亚马逊云科技在re:Invent 2023宣布推出Amazon Q&#xff0c;这是一种新型生成式AI支持的助手&#xff0c;专门用于满足办公场景需要&#xff0c;可以根据客户业务进行定制。客户可以快速获得复杂问题的相关答案、生成内容并采取行动——所有这些都基于客户自身的信息存储库、代…

超详细GitHub注册和登录教程

GitHub 是程序员开源精神之所系。在这个神奇的开源社区&#xff0c;职业程序员和编程爱好者畅所欲言&#xff0c;探寻自己感兴趣的项目、分享源代码、交流学习。最近看到好多朋友私信我&#xff0c;让我出一个详细的githup注册和登录的教程&#xff0c;现在它来啦&#xff01; …

CodeSys学习笔记

文章目录 1.运动控制的两种方式1.1.SM3_CNC1.2.SM3_Robotics 2.两种运动控制方式的速度、加速度等参数的控制2.1.SM3_CNC2.2.SM3_Robotics 3.CNC的M指令的使用&#xff08;实现&#xff09;逻辑。4.SM3_Robotics中的坐标系5.SM3_Robotics如何实现插补并连续执行&#xff1f;6.J…

《Linux源码趣读》| 好书推荐

目录 一. &#x1f981; 前言二. &#x1f981; 像小说一样趣读 Linux 源码三. &#x1f981; 学习路线 一. &#x1f981; 前言 最近、道然科技给狮子送了两本书&#xff1a;一本是付东来的《labuladong的算法笔记》、一本是闪客著的《Linux源码趣读》&#xff0c;《labulado…

回文日期

//每次枚举前四位,把前四位反转拼接到后面去,这样就是在回文数里判断一个数是不是合法日期 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Main{static int n,m,res;static BufferedReader in new BufferedRead…

前端性能优化的一些方法和策略

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

【EI征稿中|ACM出版】2023 人工智能、系统与网络安全国际学术会议 (AISNS 2023)

2023 人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff09; 2023 International Conference on Artificial Intelligence, Systems and Network Security 由西南科技大学计算机科学与技术学院主办的2023人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff…

实现跨VLAN通信、以及RIP路由协议的配置

一、如下图片&#xff1a; 1. 按照拓扑图所示&#xff0c;将8台计算机分别配置到相应的VLAN中。&#xff08;20分&#xff09; 2. 配置实现同一VLAN中的计算机可以通信。&#xff08;22分&#xff09; 3. 配置实现PC1,PC2,PC3,PC4可以互相通信&#xff0c;PC5,PC6,PC7,PC8可以互…

数组指针与函数指针

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

超参数优化的多功能贝叶斯优化包SMAC3

地址 关键词 Bayesian optimization, hyperparameter optimization, SMAC3 文章概述 本文介绍了SMAC3&#xff0c;一个用于超参数优化的多功能贝叶斯优化包。SMAC3使用随机森林作为代理模型&#xff0c;并结合了多样性的BO和强化策略&#xff0c;如积极竞赛和多样性方法…

Python编程技巧 – 异常处理

Python编程技巧 – 异常处理 Python Programming Skills – Exception Handling By JacksonML 每一个程序都未必是健壮的&#xff0c;有时候很脆弱。只有在人的理想思维状况下&#xff0c;返回的结果才是正确的&#xff0c;如意的。 1. 错误发生及异常输出 面对种种编写有疏…

PR剪辑视频做自媒体添加字幕快速方式(简单好用的pr视频字幕模板)

如何选择合适的字幕添加进短视频呢&#xff1f;首先要先确定增加的视频风格&#xff0c;简约、商务、科技感、炫酷&#xff1b;再确定用途&#xff0c;注释、标记、语音翻译、引用、介绍&#xff1b;最后在相应的模板中挑选几个尝试&#xff0c;悬着一个最切合主题的使用&#…

推荐的国外自动控制原理优秀教材:现代控制系统

推荐国外著名高等院校信息科学与技术优秀教材《现代控制系统》&#xff08;Modern Control Systems&#xff09;&#xff0c;全书930页。自动控制原理课程教程,控制系统基础教材,涵盖控制工程方法,大量例题详细演示设计流程,电子版教学PPT和教学辅导手册供师生使用。 现代控制…

23、文件上传漏洞——Web容器及IIS

文章目录 一、常见web容器1.1 名词解释1.2 什么是web容器 二、IIS简介2.1 什么是IIS2.2 什么是文件解析 三、IIS6.0 文件解析漏洞3.1 漏洞利用 一、常见web容器 1.1 名词解释 服务器&#xff1a;一种管理资源并为用户提供服务的计算机。 web服务器&#xff0c;即www服务器或h…

C语言三种循环输出9*9乘法表

解题思路&#xff1a; 1、外层循环控制1~9循环 2、内层控制循环的次数 比如&#xff1a; 1 * 1 1 循环一次 1 * 1 1 1 * 2 循环两次 依此类推 int i, j;printf("for 打印9*9乘法表\r\n");for(i 1; i <10; i) {for(j 1; j < i;j) {printf("%d * %d %d…

QT----自定义信号和槽

第二天 2.1自定义信号和槽 新建一个Qtclass 自定义信号&#xff1a;返回值是void &#xff0c;只需要声明&#xff0c;不需要实现&#xff0c;可以有参数&#xff0c;可以重载 自定义槽&#xff1a;返回值void &#xff0c;需要声明&#xff0c;也需要实现&#xff0c;可以有…

学习设计模式的一个好网址

常用设计模式有哪些&#xff1f; (refactoringguru.cn)https://refactoringguru.cn/design-patterns

如何处理3dmax渲染完成后阴影部分?

使用3dmax软件&#xff0c;对效果图进行渲染过程中&#xff0c;有不少小伙伴&#xff0c;在渲染完成后出现问题。 较为常见的3dmax渲染问题有3dmax渲染有阴影&#xff1f; 对于一些新手伙伴遇到这类问题&#xff0c;不知如何解决&#xff0c;就会苦恼3dmax渲染有阴影怎么办&am…

【实战oj题】——相同的树及二叉树的最大深度

前言&#xff1a;二叉树是我们数据结构中一个比较重要的内容&#xff0c;它的oj题自然也就很多类型&#xff0c;那么我们今天就来解决二叉树中的oj题——相同的树。 这个题我们就得分情况了&#xff0c;如果两个树的根节点都为空的话&#xff0c;那么两棵树就会相等&#xff0c…

西南科技大学C++程序设计实验十一(泛型程序设计与C++标准模板库)

一、实验目的 1. 掌握泛型程序设计概念; 2. 掌握vector、deque、list容器使用方法; 3.了解set、map容器使用方法。 二、实验任务 1.分析完善以下程序,理解vector容器使用方法: #include <iostream> __#include <vector>_______ //补充vector模板头文件 …