Spring Cloud Alibaba学习笔记(一)

Spring Boot Alibaba(一)

系统架构的"打怪升级"之路

1. 单体架构:"一个人就是一支军队"

想象一下,你开了一家路边小餐馆。刚开始生意一般,你既是老板,又是大厨,还得兼职端盘子、收银,甚至厕所堵了都得你自己通。这就是单体架构

  • 核心特征 :所有功能(用户、订单、支付)都写在一个项目里,最后打成一个 war 包扔到 Tomcat 里运行。
  • 优点:开发简单,部署方便,不用操心太多。
  • 致命痛点
    • 代码耦合严重:你想改个菜单(下单功能),结果不小心把收银台(支付功能)给砸了。
    • 扩展受限:生意好了忙不过来,你没法只雇个服务员,只能克隆一个"全能的你",成本太高。
    • 迭代困难:每次改个小功能,整个店都得重新装修重启,效率极低。
2. 分布式架构:"分工合作,效率翻倍"

生意火了,你终于招兵买马了!你雇了专门的厨师炒菜,专门的服务员点餐,专门的收银员收钱。大家各司其职,效率瞬间起飞。这就是分布式架构

  • 核心特征:按功能点把项目拆分成多个模块。
  • 新问题
    • 远程调用麻烦:服务员得跑去厨房喊一嗓子"菜好了没?",模块间通信变复杂了。
    • 负载均衡:如果有三个服务员,老板怎么知道把哪桌客人分给谁?
3. 微服务架构:"专业的人做专业的事"

后来你开成了连锁品牌,成立了专门的"采购部"、"人事部"、"财务部"。每个部门只负责核心职能,为所有门店服务。这就是微服务

  • 核心特征:单一职责,服务自治。用户服务只管注册登录,订单服务只管下单发货。

️ Spring Cloud------微服务界的"组装大师"

1. 什么是 Spring Cloud?

很多人以为它是个框架,其实不对。它是一套微服务开发全家桶

Spring 官方非常鸡贼(褒义),它从来不重复造轮子。它发现 Netflix 公司造了很多好用的零件(Eureka, Ribbon, Hystrix),于是 Spring 就基于 Spring Boot,把这些零件组装在一起,提供了一套开箱即用的解决方案。

公式记忆法:
Spring Cloud = Spring Boot + Netflix (早期的经典组合)

2. 什么是 Spring Cloud Alibaba?

既然有了 Spring Cloud,为啥还要搞个 Alibaba 版?

因为后来 Netflix 的很多核心组件(比如 Eureka 2.0)不更新了,甚至停更了。这时候,国产之光阿里巴巴站了出来,把自己在双11这种亿级流量下摸爬滚打出来的经验开源了,推出了 Spring Cloud Alibaba。

新公式:
Spring Cloud Alibaba = Spring Boot + Alibaba

它用 Nacos 代替了 Eureka+Config,用 Sentinel 代替了 Hystrix,更符合国内场景,功能更强大。

3. 版本匹配------微服务开发的"第一大坑"

警告 :这是新手最容易踩雷的地方!

Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者之间有着严格的"门当户对"关系。如果版本不匹配,你会遇到各种莫名其妙的 Bug,让你怀疑人生。

推荐搭配:

  • 下表为按时间顺序发布的 Spring Cloud Alibaba 以及对应的适配 Spring Cloud 和 Spring Boot 版本关系

    Spring Cloud Alibaba Version Spring Cloud Version Spring Boot Version
    2021.0.1.0 Spring Cloud 2021.0.1 2.6.3
    2.2.7.RELEASE Spring Cloud Hoxton.SR12 2.3.12.RELEASE
    2021.1 Spring Cloud 2020.0.1 2.4.2
    2.2.6.RELEASE Spring Cloud Hoxton.SR9 2.3.2.RELEASE
    2.1.4.RELEASE Spring Cloud Greenwich.SR6 2.1.13.RELEASE
    2.2.1.RELEASE Spring Cloud Hoxton.SR3 2.2.5.RELEASE
    2.2.0.RELEASE Spring Cloud Hoxton.RELEASE 2.2.X.RELEASE
    2.1.2.RELEASE Spring Cloud Greenwich 2.1.X.RELEASE
    2.0.4.RELEASE(停止维护,建议升级) Spring Cloud Finchley 2.0.X.RELEASE
    1.5.1.RELEASE(停止维护,建议升级) Spring Cloud Edgware 1.5.X.RELEASE

注册中心和配置中心------Nacos

1. 什么是 Nacos?

Nacos 的名字就是它的功能说明书:

  • Na = Naming (服务注册与发现)
  • Co = Configuration (配置管理)
  • S = Service (服务)

它是阿里巴巴开源的一个"瑞士军刀",既是注册中心 ,又是配置中心

2. Nacos 的安装与启动

别被复杂的集群吓到了,单机版启动只需三步:

  1. 上传解压tar -zxvf nacos-server-1.4.1.tar.gz
  2. 启动 :进入 bin 目录,执行 ./startup.sh -m standalone (standalone 表示单机模式,不加这个默认是集群,会报错)。
  3. 访问 :浏览器输入 http://ip:8848/nacos,默认账号密码都是 nacos
3. Nacos 作为注册中心

它的作用就像一个服务户籍管理处

服务提供者 (Provider)

  • 依赖spring-cloud-starter-alibaba-nacos-discovery

  • 配置 (application.yml):

    yaml 复制代码
    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.61.132:8848 # 告诉 Nacos 服务器在哪
      application:
        name: nacos-provider # 给自己起个名,注册进去
  • 启动类 :加上 @EnableDiscoveryClient 注解,表示"我要去注册了"。

服务消费者 (Consumer)

  • 依赖:同上。

  • 配置:同上(也要注册进去,方便别人找到我)。

  • 调用代码
    以前写死 IP 地址调用,现在要用 DiscoveryClient 去查户口:

    java 复制代码
    // 1. 注入 DiscoveryClient
    @Autowired
    private DiscoveryClient discoveryClient;
    
    // 2. 根据服务名获取实例列表
    List<ServiceInstance> instances = discoveryClient.getInstances("nacos-provider");
    // 3. 拿到 IP 和端口,拼接 URL 进行调用
    ServiceInstance instance = instances.get(0);
    String url = "http://" + instance.getHost() + ":" + instance.getPort() + "/provider/...";
4. Nacos 作为配置中心

它的作用是集中管理配置文件,修改配置不用重启服务,动态生效,简直是运维的福音。

关键步骤

  1. 依赖 :除了 discovery,还要加 spring-cloud-starter-alibaba-nacos-config

  2. 配置文件 :注意!必须创建一个 bootstrap.yml (不是 application.yml)。因为配置中心的加载优先级比本地配置高,应用启动初期就要去 Nacos 拉取配置。

    yaml 复制代码
    spring:
      cloud:
        nacos:
          config:
            server-addr: 192.168.61.132:8848
            prefix: nacos-config  # 对应 Data ID 的前缀
            file-extension: yaml  # 文件格式
  3. Nacos 控制台操作
    在网页上新建配置,Data ID 的命名规则必须严格遵守:prefix + file-extension (例如 nacos-config.yaml)。配置内容写好后发布,你的微服务就能实时读取到了。

未完待续...

相关推荐
無限進步D2 小时前
Java 基础算法训练
java·开发语言·算法·入门
奔5大叔学编程2 小时前
一个参数取名导致的 DRF 下 GET 方法的行为异常
后端
map1e_zjc2 小时前
Java SpringBoot学习记录(4)
java·开发语言·学习
我叫黑大帅2 小时前
Go 项目中 Redis 缓存的实用设计与实现(Cache-Aside 模式)
redis·后端·面试
小毛驴8502 小时前
多线程同步打标记的几种实现方案
java·开发语言·python
didadida2622 小时前
深度解析:现代单页应用(SPA)中微信授权登录的高可用架构实现
后端
Mr_Xuhhh2 小时前
递归之美:合并两个有序链表的优雅解法
java·开发语言
小魏小魏我们去那里呀2 小时前
Java2Flowchart:一款把 Java 方法一键转换成 Mermaid 流程图的 IntelliJ 插件
java·ide·intellij-idea
小江的记录本2 小时前
【RAG】RAG检索增强生成(核心架构、全流程、RAG优化方案、常见问题与解决方案)
java·前端·人工智能·后端·python·机器学习·架构