Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了

简介: 阿里妹导读:一年多前,Java 界最近发生了一件大事,阿里开源 Spring Cloud Alibaba,并推出首个预览版。Spring Cloud 本身是一套微服务规范,并不是一个拿来即可用的框架,而 Spring Cloud Alibaba 的开源为开发者们提供了这套规范的实现方式。

阿里妹导读:一年多前,Java 界最近发生了一件大事,阿里开源 Spring Cloud Alibaba,并推出首个预览版。Spring Cloud 本身是一套微服务规范,并不是一个拿来即可用的框架,而 Spring Cloud Alibaba 的开源为开发者们提供了这套规范的实现方式。同时,Spring Cloud Alibaba 提供的完整的微服务组件、中文文档和本地化的开源服务提高了开发者们接入微服务的速率,并降低了后续的运维难度。

经过一年多的孵化,Spring Cloud Alibaba 作为 Spring 社区的唯一一个国产开源项目,正式从 Spring Cloud Incubator 孵化器毕业,并发布了适配 Spring Cloud Edgware、Finchley、Greenwich 三个版本的新版本。
Spring Cloud Alibaba 是 Spring 社区第一个也是唯一一个国产开源项目。

1

(官方毕业公告参考 Spring Blog: https://spring.io/blog/2019/07/24/simplifying-the-spring-cloud-release-train)

Spring Cloud Alibaba 毕业后从孵化器仓库迁移到了 Github Alibaba 仓库下,新的仓库地址点击这里。 新的 maven 坐标如下:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.1.0.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
AI 代码解读

Spring Cloud Alibaba 各版本兼容表:

QzpcVXNlcnNcd2Itd3h5NTg0MzIzXEFwcERhdGFcUm9hbWluZ1xEaW5nVGFsa1w2ODY4MzMyNzFfdjJcSW1hZ2VGaWxlc1wxNTY3MDYyMzA3MTk4XzNFQjdEOUMwLTQ4OTAtNGZlNi1CQUM5LTBGRDU1NDM4NDMwNS5wbmc_

Spring Cloud Alibaba 介绍

Spring Cloud 是 Spring 社区打造出的一款基于 Spring Boot 用于快速构建分布式系统的框架,主要包括以下特性:

2

Spring Cloud Alibaba 是阿里巴巴开源中间件跟 Spring Cloud 体系的融合:

3

作为 Spring Cloud 体系下的新实现,Spring Cloud Alibaba 跟官方的组件或其它的第三方实现如 Netflix, Consul,Zookeeper 等对比,具备了更多的功能:

QzpcVXNlcnNcd2Itd3h5NTg0MzIzXEFwcERhdGFcUm9hbWluZ1xEaW5nVGFsa1w2ODY4MzMyNzFfdjJcSW1hZ2VGaWxlc1wxNTY3MDYwOTU5MzM0X0YyMzg1OTYwLTcxMTYtNDlhZi04MTE1LTFFRDUyNDk4RjJFMS5wbmc_

Spring Cloud Alibaba 功能

总体架构

依托 Spring Cloud Alibaba,只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

4

服务注册 & 配置管理

服务注册 & 配置管理是微服务应用中必不可少的两大基础功能。

Spring Cloud Alibaba 基于 Nacos 提供 spring-cloud-alibaba-starter-nacos-discovery & spring-cloud-alibaba-starter-nacos-config 实现了服务注册 & 配置管理功能。

依靠 @EnableDiscoveryClient 进行服务的注册,兼容 RestTemplate & OpenFeign 的客户端进行服务调用。

OpenFeign 客户端:

@FeignClient(name = "echo-service")
public interface EchoService {
  @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
  String echo(@PathVariable("str") String str);
}
AI 代码解读

RestTemplate 客户端:

@LoadBalanced
@Bean
public RestTemplate restTemplate1() {
  return new RestTemplate();
}
....
restTemplate.getForObject("http://echo-service/echo/hello-spring-cloud-alibaba",
        String.class);
AI 代码解读

配置管理直接以约定俗成的方式构造 dataId & Group 从 Nacos 读取配置设置到 Spring Environment 中即可。

流控降级

流控降级是微服务稳定性的法宝,用于解决各种不稳定的场景可能会导致的严重后果。

在限流层面:我们根据系统的处理能力对流量进行控制,在保证系统吞吐量比较高的同时又不会把系统打垮。

在降级层面:在服务出现不稳定因素的时候暂时切断服务的调用,等待一段时间再进行尝试。一方面防止给不稳定服务“雪上加霜”,另一方面保护服务的调用方不被拖垮。

Spring Cloud Alibaba 基于 Sentinel 提供 spring-cloud-alibaba-starter-sentinel 对 Spring 体系内基本所有的客户端,网关进行了适配,包括了 WebServlet, WebFlux, RestTemplate, OpenFeign, Netflix Zuul, Spring Cloud Gateway。

只需引入 starter,即可对这些组件生效。只需定义规则进行流控降级:

限流规则:

5

降级规则:

6

服务调用

Spring Cloud 默认的服务调用依赖 OpenFeign 或 RestTemplate 使用 REST 进行调用。

Spring Cloud Alibaba Dubbo 只需使用 @DubboTransported 注解即可将底层的 Rest 协议无缝切换成 Dubbo RPC 协议,进行 RPC 调用。这一举措让 Spring Cloud 的客户端调用多了一个新的 RPC 选择:

@Bean
@LoadBalanced
@DubboTransported
public RestTemplate restTemplate() {
  return new RestTemplate();
}

@FeignClient("dubbo-provider")
@DubboTransported(protocol = "dubbo")
public interface DubboFeignRestService {
  @GetMapping(value = "/param")
  String param(@RequestParam("param") String param);

  @PostMapping("/saveB")
  String saveB(@RequestParam("a") int a, @RequestParam("b") String b);
}
AI 代码解读

分布式消息 & 消息总线

基于 Spring Cloud Stream 提供 Binder 的新实现: Spring Cloud Stream RocketMQ Binder,也新增了 Spring Cloud Bus 消息总线的新实现 Spring Cloud Bus RocketMQ。

Spring Cloud Stream 对消息的编程模型进行了统一封装,用同一套代码进行消息的发送/接收,屏蔽底层消息中间件的实现细节,让我们在关注点放到业务逻辑上。如果想要更换底层消息中间件,直接引入 Binder 的新实现即可,代码层面几乎无需修改。这是一段使用 Spring Cloud Stream RocketMQ & Spring Cloud Function 完成消息的接收,并转换成大写 & 添加 alibaba- 前缀的新消息,再发送给新的 topic 的过程:

spring.cloud.stream.bindings.input.destination=test-topic
spring.cloud.stream.bindings.input.group=test-group1

spring.cloud.stream.bindings.output.destination=test-topic-uppercase

spring.cloud.stream.function.definition=uppercase|addprefix
AI 代码解读
@SpringBootApplication
@EnableBinding(Processor.class)
public class FunctionApplication {

  public static void main(String[] args) {
    new SpringApplicationBuilder(FunctionApplication.class)
        .web(WebApplicationType.NONE).run(args);
  }

    @Bean
    public Function<String, String> uppercase() {
      return x -> x.toUpperCase();
    }

    @Bean
    public Function<String, String> addprefix() {
        return x -> "alibaba-" + x;
    }

}
AI 代码解读

分布式事务

Seata 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题。
在 Spring Cloud 这一层面,我们通过在微服务中传递事务上下文的方式完成了 Seata 在 Spring Cloud 层面的接入:

  • Spring MVC 环境下支持自动还原 Seata 事务上下文
  • 支持服务调用者通过 RestTemplate 或 FeignClient 调用时,自动传递 Seata 事务上下文
  • 支持 FeignClient 和 Hystrix、Sentinel 同时使用的场景
    这是一段使用 Spring Cloud Alibaba Seata 完成 storage 和 order 服务进行数据存储的分布式事务代码:

    @GlobalTransactional(timeoutMills = 300000, name = "spring-cloud-demo-tx")
    @RequestMapping(value = "/seata/rest", method = RequestMethod.GET, produces = "application/json")
    public String rest() {
    
    // 调用 storage 服务。涉及数据库操作
    String result = restTemplate.getForObject(
        "http://127.0.0.1:18082/storage/" + COMMODITY_CODE + "/" + ORDER_COUNT,
        String.class);
    
    if (!SUCCESS.equals(result)) {
      throw new RuntimeException();
    }
    
    String url = "http://127.0.0.1:18083/order";
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    
    MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
    map.add("userId", USER_ID);
    map.add("commodityCode", COMMODITY_CODE);
    map.add("orderCount", ORDER_COUNT + "");
    
    HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(
        map, headers);
    
    // 调用 order 服务。涉及数据库操作
    ResponseEntity<String> response = restTemplate.postForEntity(url, request,
        String.class);
    
    result = response.getBody();
    
    if (!SUCCESS.equals(result)) {
      throw new RuntimeException();
    }
    
    return SUCCESS;
    }
    
    AI 代码解读

Roadmap

Spring Boot Admin 是一个开源社区项目,用于管理和监控 SpringBoot 应用程序。但是它没有跟 Spring Cloud 做深度的整合。我们希望做一个 Spring Cloud Admin,它能提供如下功能:

  • 增加服务治理控制台,整合微服务控制能力
  • 服务查询、管理
  • 配置管理
  • 限流降级等
  • 项目管理/监控
  • 参考 Spring Cloud Azure Playground http://azure-spring-cloud.azurewebsites.net/ ,创造 Spring Cloud Alibaba Playground,把一些最佳实践,视频教程,自动生成项目等功能放上去
  • 增加 Spring Cloud Alibaba 最佳实践项目
  • 针对 Spring Cloud Alibaba 各种特性,开发对应的实战 Demo
  • 替换 Spring Cloud 服务调用客户端 OpenFeign & Ribbon。开发更通用的服务调用客户端,替换 Spring Cloud 服务- - 调- 用客户端 OpenFeign & Ribbon

如果对这些内容敢兴趣,欢迎来 github issue 留言。

后续

Spring Cloud Alibaba 毕业并不意味着结束,而是一个新的开始。后续我们还有会一系列动作:

  • Spring Initializr 页面上将会提供 Spring Cloud Alibaba 的 Dependency
  • Spring Cloud 官方介绍页上提供 Spring Cloud Alibaba 的介绍
  • 提供 Spring Cloud Alibaba 的国内官网
目录
打赏
0
0
0
0
13399
分享
相关文章
DeepSeek + Higress AI 网关/Spring AI Alibaba 案例征集
诚挚地感谢每一位持续关注并使用 Higress 和 Spring AI Alibaba 的朋友,DeepSeek + Higress AI 网关/Spring AI Alibaba 案例征集中。
100 15
Spring AI Alibaba 应用框架挑战赛圆满落幕,恭喜获奖选手
第二届开放原子大赛 Spring AI Alibaba 应用框架挑战赛决赛于 2 月 23 日在北京圆满落幕。
支持 40+ 插件,Spring AI Alibaba 简化智能体私有数据集成
通过使用社区官方提供的超过 20 种 RAG 数据源和 20 种 Tool Calling 接口,开发者可以轻松接入多种外部数据源(如 GitHub、飞书、云 OSS 等)以及调用各种工具(如天气预报、地图导航、翻译服务等)。这些默认实现大大简化了智能体的开发过程,使得开发者无需从零开始,便可以快速构建功能强大的智能体系统。通过这种方式,智能体不仅能够高效处理复杂任务,还能适应各种应用场景,提供更加智能、精准的服务。
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
本文介绍了如何使用Spring Cloud Alibaba 2023.0.0.0技术栈构建微服务网关,以应对微服务架构中流量治理与安全管控的复杂性。通过一个包含鉴权服务、文件服务和主服务的项目,详细讲解了网关的整合与功能开发。首先,通过统一路由配置,将所有请求集中到网关进行管理;其次,实现了限流防刷功能,防止恶意刷接口;最后,添加了登录鉴权机制,确保用户身份验证。整个过程结合Nacos注册中心,确保服务注册与配置管理的高效性。通过这些实践,帮助开发者更好地理解和应用微服务网关。
72 0
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
Jeesite5:Star24k,Spring Boot 3.3+Vue3实战开源项目,架构深度拆解!让企业级项目开发效率提升300%的秘密武器
Jeesite5 是一个基于 Spring Boot 3.3 和 Vue3 的企业级快速开发平台,集成了众多优秀开源项目,如 MyBatis Plus、Bootstrap、JQuery 等。它提供了模块化设计、权限管理、多数据库支持、代码生成器和国际化等功能,极大地提高了企业级项目的开发效率。Jeesite5 广泛应用于企业管理系统、电商平台、客户关系管理和知识管理等领域。通过其强大的功能和灵活性,Jeesite5 成为了企业级开发的首选框架之一。访问 [Gitee 页面](https://gitee.com/thinkgem/jeesite5) 获取更多信息。
Jeesite5:Star24k,Spring Boot 3.3+Vue3实战开源项目,架构深度拆解!让企业级项目开发效率提升300%的秘密武器
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
232 4
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
2234 0
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
本次分享的主题是阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手,由阿里云两位工程师分享。
119 0
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
|
3月前
|
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
690 13
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
469 7