SpringCloud Alibaba 实战:搭建第一个 SpringCloud Alibaba 项目

SpringCloud Alibaba 实战:搭建第一个 SpringCloud Alibaba 项目

引言

在现代微服务架构中,SpringCloud 已经成为开发者构建分布式系统的首选工具之一。SpringCloud Alibaba 是 SpringCloud 生态中的一个重要子集,提供了一整套微服务开发的解决方案,集成了阿里巴巴的中间件和服务。这篇博客将带领大家一步一步搭建一个简单的 SpringCloud Alibaba 项目,帮助开发者快速上手。

目录

  1. SpringCloud Alibaba 简介
  2. 项目准备
    • 环境要求
    • 工具安装
  3. 创建 SpringCloud Alibaba 项目
    • 使用 Spring Initializr 初始化项目
    • 项目结构分析
  4. 引入 SpringCloud Alibaba 依赖
    • Maven 依赖配置
  5. 搭建服务注册中心(Nacos)
    • Nacos 简介
    • Nacos 安装与配置
  6. 实现服务消费者与提供者
    • 创建服务提供者
    • 创建服务消费者
    • 服务调用测试
  7. 配置网关(Spring Cloud Gateway)
    • 网关简介
    • 网关配置与路由规则
  8. 服务降级与熔断(Sentinel)
    • Sentinel 简介
    • 配置与使用示例
  9. 配置中心(Nacos Config)
    • 动态配置管理
  10. 总结与展望

SpringCloud Alibaba 简介

SpringCloud Alibaba 是一个为微服务解决方案提供全面支持的工具集。它集成了阿里巴巴的开源技术栈,如 Nacos、Sentinel、RocketMQ 等,旨在简化微服务架构的构建与管理。其主要特点包括:

  • 服务注册与发现:通过 Nacos 实现服务注册与发现。
  • 负载均衡与路由:使用 Spring Cloud Gateway 提供 API 网关功能。
  • 限流与熔断:Sentinel 提供了流量控制和熔断降级功能。
  • 配置管理:Nacos Config 允许动态配置管理,便于服务的配置更新。

项目准备

环境要求

在开始搭建项目之前,需要确保本地环境满足以下要求:

  • Java 11 或以上
  • Maven 3.6.0 或以上
  • IDEA 或 Eclipse 开发工具

工具安装

  1. Java 安装:从 Oracle 或 OpenJDK 下载并安装 JDK 11。

  2. Maven 安装:从 Maven 官方网站 下载并安装 Maven。

  3. IDEA/Eclipse 安装:推荐使用 IDEA,下载地址:JetBrains IDEA

创建 SpringCloud Alibaba 项目

使用 Spring Initializr 初始化项目

Spring Initializr 是 Spring 官方提供的项目初始化工具,能够快速生成项目结构。

  1. 访问 Spring Initializr,选择如下配置:

    • Project:Maven Project
    • Language:Java
    • Spring Boot:2.7.x
    • Project Metadata
      • Group:com.example
      • Artifact:springcloud-alibaba-demo
      • Name:SpringCloudAlibabaDemo
      • Package name:com.example.springcloudalibabademo
      • Packaging:Jar
      • Java:11
  2. Dependencies

    • Spring Web
    • Spring Cloud Alibaba Nacos Discovery
    • Spring Cloud Alibaba Nacos Config
    • Spring Cloud Gateway
    • Spring Cloud Alibaba Sentinel

点击“Generate”生成项目并下载。

项目结构分析

解压并导入项目后,项目结构大致如下:

springcloud-alibaba-demo
│   pom.xml
└───src├───main│   ├───java│   │   └───com.example.springcloudalibabademo│   │       └───SpringCloudAlibabaDemoApplication.java│   └───resources│       ├───application.properties│       └───static└───test└───java

引入 SpringCloud Alibaba 依赖

Maven 依赖配置

pom.xml 中添加 SpringCloud Alibaba 相关依赖:

<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.1</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><dependencies><!-- Spring Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Nacos Discovery --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- Nacos Config --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- Spring Cloud Gateway --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!-- Sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
</dependencies>

搭建服务注册中心(Nacos)

Nacos 简介

Nacos 是一个易于使用的动态服务发现、配置和服务管理平台。它帮助开发者快速实现微服务架构中的注册、配置与发现功能。

Nacos 安装与配置

  1. 下载 Nacos:Nacos Releases

  2. 启动 Nacos

    解压后进入 bin 目录,执行启动命令:

    • Windows:startup.cmd -m standalone
    • Linux/Unix/Mac:sh startup.sh -m standalone
  3. 访问控制台

    启动成功后,访问 http://localhost:8848/nacos 进入 Nacos 控制台。

实现服务消费者与提供者

创建服务提供者

  1. 在项目中创建一个模块 provider,并添加以下代码:

    pom.xml

    <dependencies><!-- Spring Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Nacos Discovery --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
    </dependencies>
    
  2. application.properties

    server.port=8081
    spring.application.name=service-provider
    spring.cloud.nacos.discovery.server-addr=localhost:8848
    
  3. ProviderApplication.java

    package com.example.springcloudalibabademo.provider;import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
    @RestController
    public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}@GetMapping("/hello")public String hello() {return "Hello from Provider!";}
    }
    

创建服务消费者

  1. 在项目中创建一个模块 consumer,并添加以下代码:

    pom.xml

    <dependencies><!-- Spring Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Nacos Discovery --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- OpenFeign --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
    </dependencies>
    
  2. application.properties

    server.port=8082
    spring.application.name=service-consumer
    spring.cloud.nacos.discovery.server-addr=localhost:8848
    
  3. ConsumerApplication.java

    package com.example.springcloudalibabademo.consumer;import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.openfeign.EnableFeignClients;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.beans.factory.annotation.Autowired;@SpringBootApplication
    @EnableFeignClients
    @RestController
    public class ConsumerApplication {@Autowiredprivate ProviderClient providerClient;public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}@GetMapping("/hello")public String hello() {return providerClient.hello();}
    }
    
  4. ProviderClient.java

    package com.example.springcloudalibabademo.consumer;import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.GetMapping;@FeignClient(name = "service-provider")
    public interface ProviderClient {@GetMapping("/hello")String hello();
    }
    

服务调用测试

  1. 启动服务提供者和消费者模块。
  2. 访问消费者服务的接口:http://localhost:8082/hello
  3. 返回结果应为:“Hello from Provider!”

配置网关(Spring Cloud Gateway)

网关简介

Spring Cloud Gateway 是 Spring 官方提供的 API 网关解决方案,提供路由、断言和过滤器等功能,支持对微服务进行统一管理。

网关配置与路由规则

  1. 在项目中创建一个模块 gateway,并添加以下代码:

    pom.xml

    <dependencies><!-- Spring Cloud Gateway --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!-- Nacos Discovery --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
    </dependencies>
    
  2. application.properties

    server.port=8080
    spring.application.name=gateway
    spring.cloud.nacos.discovery.server-addr=localhost:8848
    spring.cloud.gateway.discovery.locator.enabled=true
    spring.cloud.gateway.discovery.locator.lower-case-service-id=true
    
  3. GatewayApplication.java

    package com.example.springcloudalibabademo.gateway;import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
    public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}
    }
    
  4. 配置路由规则

    application.properties 中添加路由规则,使请求 /api/hello 路由到 service-consumer 服务:

    spring.cloud.gateway.routes[0].id=consumer
    spring.cloud.gateway.routes[0].uri=lb://service-consumer
    spring.cloud.gateway.routes[0].predicates[0]=Path=/api/hello
    
  5. 启动网关模块,访问 http://localhost:8080/api/hello,应返回“Hello from Provider!”

服务降级与熔断(Sentinel)

Sentinel 简介

Sentinel 是阿里巴巴开源的一款流量防护和熔断降级解决方案,用于保护服务的稳定性和可用性。

配置与使用示例

  1. 在消费者模块中添加 Sentinel 依赖:

    pom.xml

    <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    
  2. ConsumerApplication.java

    修改 ProviderClient 接口以支持熔断降级:

    @FeignClient(name = "service-provider", fallback = ProviderClientFallback.class)
    public interface ProviderClient {@GetMapping("/hello")String hello();
    }@Component
    public class ProviderClientFallback implements ProviderClient {@Overridepublic String hello() {return "Fallback: Service Unavailable";}
    }
    
  3. 启动消费者模块,停止提供者服务,访问 http://localhost:8082/hello,应返回“Fallback: Service Unavailable”。

配置中心(Nacos Config)

动态配置管理

  1. 在 Nacos 控制台添加配置:

    • Data ID:service-provider-dev.yaml
    • Group:DEFAULT_GROUP
    • Content:
      server:port: 8081
      
  2. 在服务提供者的 application.properties 中启用 Nacos Config:

    spring.profiles.active=dev
    spring.cloud.nacos.config.server-addr=localhost:8848
    spring.cloud.nacos.config.file-extension=yaml
    
  3. 启动服务提供者,查看是否读取了 Nacos 配置的端口号。

总结与展望

通过本次实践,我们成功搭建了一个简单的 SpringCloud Alibaba 项目,涵盖了服务注册与发现、网关路由、服务降级与熔断以及配置中心等核心功能。SpringCloud Alibaba 提供了一整套解决方案,帮助开发者轻松构建和管理微服务架构。在未来的开发中,可以进一步探索更多高级功能,如分布式事务(Seata)、消息队列(RocketMQ)等,构建更加复杂和健壮的微服务系统。


通过这种方式,读者可以逐步理解和实践 SpringCloud Alibaba 的核心功能,从而在真实项目中应用这些技术。希望这篇博客能够为您的开发旅程提供帮助!如果有任何疑问或建议,欢迎在评论区留言。

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

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

相关文章

科大讯飞语音转写demo go语言版

上传了一个语音文件&#xff0c;识别效果。 package audioimport ("bytes""crypto/hmac""crypto/md5""crypto/sha1""encoding/base64""encoding/json""fmt""io/ioutil""net/http"…

【图文详解】Spring是如何解决循环依赖的?

Spring是如何解决循环依赖的呢&#xff1f; 很多小伙伴在面试时都被问到过这个问题&#xff0c;刷到过这个题的同学马上就能回答出来&#xff1a;“利用三级缓存”。面试官接着追问&#xff1a;“哪三级缓存呢&#xff1f;用两级行不行呢&#xff1f;” 这时候如果没有深入研究…

Vs2022+QT+Opencv 一些需要注意的地方

要在vs2022创建QT项目&#xff0c;先要安装一个插件Qt Visual Studio Tools&#xff0c;根据个人经验选择LEGACY Qt Visual Studio Tools好一些&#xff0c;看以下内容之前建议先在vs2022中配置好opencv&#xff0c;配置方式建议以属性表的形式保存在硬盘上。 设置QT路径 打开v…

清华计算几何-算法LowBound和ConvexHull(凸包)-GrahamScan

算法复杂度最低界限LowBound 算法求解复杂度是否存在一个最低界限&#xff0c;有时候想尽一切办法优化一个算法&#xff0c;去优化其复杂度&#xff0c;比如 清华计算几何-ConvexHull(凸包)-求极点InTriangle/ToLeft Test-CSDN博客 清华计算几何-ConvexHull(凸包)-求极边_计…

DeFi革命:揭秘去中心化金融的核心技术与实操指南

目录 DeFi&#xff08;去中心化金融&#xff09;综述 基本特点 第一&#xff0c;DeFi 是无许可的金融 第二&#xff0c;DeFi 是无门槛的金融 第三&#xff0c;DeFi 是无人驾驶的金融 典型商业模式 闪电贷 MakerDAO 面临的挑战 DeFi技术要点 椭圆曲线签名 EIP-712:…

模拟依赖关系和 AI 是Vue.js测试的下一个前沿领域

Vue.js 是一个流行的 JavaScript 框架&#xff0c;因此&#xff0c;确保其组件按预期工作至关重要&#xff1a;有效&#xff0c;更重要的是&#xff0c;可靠。模拟依赖项是最有效的测试方法之一&#xff0c;我们将在本文中发现。 模拟依赖项的必要性 模拟依赖项是一种对测试施加…

个人定制化形象生成,FaceChain最新模型部署

FaceChain是阿里巴巴达摩院推出的一个开源的人物写真和个人数字形象的AI生成框架。 FaceChain利用了Stable Diffusion模型的文生图功能&#xff0c;并结合人像风格化LoRA模型训练及人脸相关感知理解模型&#xff0c;将输入的图片进行训练后推理输出生成个人写真图像。 FaceCh…

Live555源码阅读笔记:哈希表的实现(C++)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

算法日记day 20(中序后序遍历序列构造二叉树|最大、合并、搜索二叉树)

一、中序后序序列构造二叉树 题目&#xff1a; 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,…

使用SpringEvent解决WebUploader大文件上传解耦问题

目录 前言 一、SpringEvent涉及的相关组件 1、 事件&#xff08;Event&#xff09; 2、事件监听器 3、事件发布器 二、WebUploader大文件处理的相关事件分析 1、事件发布的时机 2、事件发布的代码 三、事件监听器及实际的业务处理 1、文件上传处理枚举 2、文件上传监…

Python+selenium web自动化测试知识点合集2

选择元素 对于百度搜索页面&#xff0c;如果我们想自动化输入“selenium”&#xff0c;怎么做呢&#xff1f; 这就是在网页中&#xff0c;操控界面元素。 web界面自动化&#xff0c;要操控元素&#xff0c;首先需要 选择 界面元素 &#xff0c;或者说 定位 界面元素 就是 先…

C++客户端Qt开发——界面优化(QSS)

1.QSS 如果通过QSS设置的样式和通过C代码设置的样式冲突&#xff0c;则QSS优先级更高 ①基本语法 选择器{属性名&#xff1a;属性值; } 例如&#xff1a; QPushButton {color: red; } 1>指定控件设置样式 #include "widget.h" #include "ui_widget.h&qu…

qt--做一个拷贝文件器

一、项目要求 使用线程完善文件拷贝器的操作 主窗口不能假死主窗口进度条必须能动改写文件大小的单位&#xff08;自适应&#xff09; 1TB1024GB 1GB1024MB 1MB1024KB 1KB1024字节 二、所需技术 1.QFileDialog 文件对话框 QFileDialog也继承了QDialog类&#xff0c;直接使用静态…

Redis缓存数据库进阶——Redis与分布式锁(6)

分布式锁简介 1. 什么是分布式锁 分布式锁是一种在分布式系统环境下&#xff0c;通过多个节点对共享资源进行访问控制的一种同步机制。它的主要目的是防止多个节点同时操作同一份数据&#xff0c;从而避免数据的不一致性。 线程锁&#xff1a; 也被称为互斥锁&#xff08;Mu…

Robot Operating System——内部审查(Introspection)Service

大纲 introspection_service检验Parameter值和类型修改内部审查&#xff08;Introspection&#xff09;功能的状态完整代码 introspection_client完整代码 测试参考资料 在ROS 2&#xff08;Robot Operating System 2&#xff09;中&#xff0c;内部审查&#xff08;Introspect…

【中项】系统集成项目管理工程师-第7章 软硬件系统集成-7.3软件集成

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

python 裁剪图片

情况&#xff1a; 有时候看视频&#xff0c;看到一个漂亮的妹子&#xff0c;按下 Alt PrintScreen 进行截图之后&#xff0c;会把整个屏幕都截图。 需要适当剪裁一下。 每次打开 PS &#xff0c; 也太慢了。 所以写个代码&#xff0c; 快速处理。 效果对比&#xff1a; 原始…

【2025留学】德国留学真的很难毕业吗?为什么大家不来德国留学?

大家好&#xff01;我是德国Viviane&#xff0c;一句话讲自己的背景&#xff1a;本科211&#xff0c;硕士在德国读的电子信息工程。 之前网上一句热梗&#xff1a;“德国留学三年将是你人生五年中最难忘的七年。”确实&#xff0c;德国大学的宽进严出机制&#xff0c;延毕、休…

OOP知识整合----集合

目录 一、定义 1、集合: ( 不限制长度&#xff0c;存多少是多少) 2、集合框架: 二、List集合中常用的方法 1、Boolean add(Object o) 2、void add(int index,Object o) 3、Boolean remove(Object o) 4、Object remove(int index) 5、int size() 6、Boolean conta…

Code Effective学习笔记--第8章防御式编程

这一章聚焦如何通过断言和Java的异常处理机制这些防御式编程的方法来提高程序的健壮性和安全性&#xff0c;这是防御式编程技术的方面。但是健壮性和安全性到了一定的程度其实是矛盾的&#xff0c;健壮性意味着对于任何的输入&#xff0c;程序都不会终止而且都能给出返回&#…