通俗易懂的学习一下nacos
本文最后更新于187 天前,其中的信息可能已经过时,如有错误请发送邮件到2067863254@qq.com

咱们就用“开餐厅”这个比喻,来把 Nacos 给你讲得明明白白。你不用怕,我保证不用那些晦涩的术语。

一、Nacos 到底是什么?—— 餐厅的“服务台”和“菜单管理部”

想象一下,你要开一个大型餐厅,这个餐厅不是只有一个厨房,而是有很多个特色档口(比如炒菜档口、烧烤档口、甜点档口、饮料档口)。每个档口都是独立运营的,这就是微服务架构。 那么问题来了:

  1. 炒菜档口做好了菜,怎么知道该叫哪个服务员(另一个微服务)来取餐送给客人?
  2. 烧烤档口的秘制酱料配方突然要变更,难道要一个个去通知所有烧烤师傅吗?

这时候,你就需要一个核心部门:NacosNacos 主要干两件大事:

  1. 服务发现与注册中心 —— 餐厅的“服务台”
    • 工作流程:每个档口(微服务)开业时,都先到服务台(Nacos)报到:“你好,我是炒菜档口,我在厨房区1号位置。”
    • 有什么用:当饮料档口需要找炒菜档口合作一份套餐时,它不用自己满世界找,直接去问服务台(Nacos):“炒菜档口在哪儿?” 服务台就会告诉它准确位置。
    • 好处:档口可以随时开业、关门、搬家(服务上线、下线、扩容),只要在服务台更新一下信息就行,其他档口永远能通过服务台找到它。
  2. 配置管理中心 —— 餐厅的“菜单和配方管理部”
    • 工作流程:所有档口的菜单内容和秘制配方(应用的配置信息,比如数据库地址、功能开关、参数值)都不自己保管了,全部统一交给这个管理部门(Nacos)。
    • 有什么用:比如“辣度”标准要从“微辣、中辣、重辣”改成“一级辣、二级辣、三级辣”,管理部门只需要修改一份总菜单,然后通知所有相关的炒菜档口。档口们会自动收到新标准,不用一个个去改。
    • 好处:所有配置集中管理,修改起来非常方便,而且能实时生效,不用重启整个档口(微服务)。

简单总结:Nacos 就是一个微服务架构中的“大管家”,既管所有服务在哪里(服务发现),也管所有服务的配置信息(配置管理)。


二、核心概念(一点也不难)

  1. 服务(Service):就是我们的“炒菜档口”、“烧烤档口”,一个独立的业务功能单元。
  2. 服务注册(Register):档口开业后,去服务台(Nacos)登记信息的过程。
  3. 服务发现(Discover):饮料档口通过服务台(Nacos)查询和找到炒菜档口的过程。
  4. 配置管理(Configuration Management):把档口的配方(配置信息)放在Nacos里统一管理。
  5. 命名空间(Namespace):相当于餐厅的“楼层”或“区域”。比如:
    • dev命名空间:后厨的“测试区”,专门用来试验新菜,不会影响正式客人。
    • prod命名空间:正式的“用餐区”,为真实客人服务。
    • 这样做可以实现环境隔离,开发环境的配置不会搞乱生产环境。
  6. 分组(Group):相当于给档口“分类”。比如把所有“中餐类”的档口(炒菜、火锅)分到Chinese-Food组,把所有“西餐类”的档口分到Western-Food组。默认分组叫DEFAULT_GROUP。这样可以实现更细粒度的管理。

三、上手使用(四步搞定)

我们来模拟一个最简单的场景:有一个“用户服务”(user-service)需要被一个“订单服务”(order-service)调用。

第1步:安装并启动Nacos服务器

这相当于先把“服务台”和“管理部门”搭建起来。

  1. 去Nacos的GitHub发布页下载最新版的压缩包(比如 nacos-server-2.x.x.tar.gz)。
  2. 解压后,进入bin目录。
    • Linux/Mac:执行 sh startup.sh -m standalonestandalone代表单机模式,适合学习)
    • Windows:双击 startup.cmd文件。
  3. 启动成功后,打开浏览器访问 http://localhost:8848/nacos
  4. 输入默认用户名和密码(都是 nacos),你就看到了Nacos的管理界面!这就是你的“服务台”和“配置管理部”的办公室了。

第2步:将“用户服务”注册到Nacos(去服务台报到)

在你的“用户服务”的SpringBoot项目中:

  1. 添加依赖(在pom.xml中): <!– Spring Cloud Alibaba 依赖管理 –> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2022.0.0.0</version> <!– 请使用与你SpringBoot匹配的版本 –> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!– Nacos 服务发现依赖 –> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
  2. 配置文件(在application.yml中): spring: application: name: user-service # 给这个服务起个名字,比如“用户服务” cloud: nacos: discovery: server-addr: localhost:8848 # 告诉服务,Nacos服务台在哪里
  3. 启动主类上添加 @EnableDiscoveryClient注解(新版本可省略,但写上更明确): @SpringBootApplication @EnableDiscoveryClient // 开启服务发现功能 public class UserServiceApplication { public static void main(String[] args) { SpringApplication.run(UserServiceApplication.class, args); } }
  4. 启动“用户服务”。然后刷新Nacos控制台的“服务管理”->“服务列表”,你应该能看到一个名为user-service的服务了!报到成功!

第3步:“订单服务”通过Nacos发现并调用“用户服务”

“订单服务”的配置步骤和上面一模一样,确保它的application.nameorder-service。 关键是如何调用?我们不用写死user-service的IP地址,而是通过Nacos动态发现。

  1. 使用SpringCloud提供的 RestTemplateOpenFeign来调用。
  2. 这里用RestTemplate举例:
    • 在“订单服务”的启动类中,注册一个RestTemplate的Bean:
    @Bean @LoadBalanced // 这个注解是核心!它让RestTemplate拥有负载均衡的能力,能向Nacos查询地址 public RestTemplate restTemplate() { return new RestTemplate(); }
    • 在需要调用的地方(如Controller、Service中):
    @RestController public class OrderController { @Autowired private RestTemplate restTemplate; @GetMapping("/order/{userId}") public String getOrder(@PathVariable Long userId) { // 注意:这里直接用服务名“user-service”代替了具体的IP和端口! String url = "http://user-service/user/" + userId; String userInfo = restTemplate.getForObject(url, String.class); return "订单信息 for user: " + userInfo; } }
    • 神奇之处:当访问http://user-service/...时,@LoadBalanced注解的RestTemplate会向Nacos查询名为user-service的实例地址,并自动完成调用。即使user-service有多个实例(集群),它也会做负载均衡。

第4步:使用配置中心(管理配方)

现在,我们把“用户服务”的某个配置(比如“每页显示条数”)放到Nacos管理。

  1. 在“用户服务”中添加配置中心依赖<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
  2. 在Nacos控制台创建配置
    • 进入“配置管理”->“配置列表”。
    • 点击“+”号,新建配置。
    • Data ID:通常是 {spring.application.name}-{profile}.{后缀},例如我们创建一个 user-service-dev.yaml
    • Group:保持默认 DEFAULT_GROUP
    • 配置内容:写一个配置,比如: page: size: 5
  3. 在“用户服务”中读取这个配置
    • 创建一个 bootstrap.ymlbootstrap.properties文件(它的加载优先级比application.yml高)。
    • 内容如下: spring: application: name: user-service # 应用名,用于定位Data ID cloud: nacos: config: server-addr: localhost:8848 # 配置中心地址 file-extension: yaml # 指定配置后缀 discovery: server-addr: localhost:8848 # 注册中心地址
    • 在代码中,你可以用@Value注解来获取这个值: @RestController public class UserController { @Value("${page.size:10}") // :10 是默认值,如果Nacos上找不到就用10 private Integer pageSize; @GetMapping("/config") public String getConfig() { return "当前的每页大小是:" + pageSize; } }
  4. 动态刷新:如果想在Nacos上修改配置后,不重启服务就生效,在类上添加注解@RefreshScope即可。 @RestController @RefreshScope // 添加这个注解 public class UserController { // ... 上面的代码 }现在你去Nacos控制台把page.size5改成20,并发布,然后重新访问 /config接口,会发现值已经变了!这就是动态配置刷新,非常强大。

总结

你看,使用Nacos其实就四步曲:

  1. 启动Nacos服务器:把大管家请来。
  2. 注册服务:让所有微服务去大管家那里报到(加依赖,改配置)。
  3. 发现与调用:微服务之间通过服务名互相呼叫,不用关心对方在哪(用@LoadBalanced)。
  4. 管理配置:把配置信息交给大管家统一保管,修改能实时生效(用bootstrap.yml@RefreshScope)。

先从这些最简单的步骤开始实践,跑通一个例子,你就能深刻理解Nacos的价值了。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇