Spring 社区的唯一一个国产开源项目 - 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 社区第一个也是唯一一个国产开源项目。

 

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>

Spring Cloud Alibaba 各版本兼容表:

 

Spring Cloud Alibaba 介绍

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

 

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

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

Spring Cloud Alibaba 功能

总体架构

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

服务注册 & 配置管理

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

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);
}

RestTemplate 客户端:

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

配置管理直接以约定俗成的方式构造 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,即可对这些组件生效。只需定义规则进行流控降级:

限流规则:

降级规则:

服务调用

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);
}

分布式消息 & 消息总线

基于 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-group1spring.cloud.stream.bindings.output.destination=test-topic-uppercasespring.cloud.stream.function.definition=uppercase|addprefix
@SpringBootApplication
@EnableBinding(Processor.class)
public class FunctionApplication {public static void main(String[] args) {new SpringApplicationBuilder(FunctionApplication.class).web(WebApplicationType.NONE).run(args);}@Beanpublic Function<String, String> uppercase() {return x -> x.toUpperCase();}@Beanpublic Function<String, String> addprefix() {return x -> "alibaba-" + x;}}

分布式事务

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;
}

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


原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

一个系统,搞定闲鱼服务端复杂问题告警-定位-快速处理

服务端问题排查对开发而言是家常便饭&#xff0c;问题并不可怕但要花大量时间去处理&#xff1b;另一方面故障的快速解决至关重要。 目前问题排查最大的障碍是什么呢&#xff1f;我们认为有以下几个原因&#xff1a; 大量的告警信息。链路的复杂性。排查过程繁复。依赖经验。…

Bespin Global荣膺“Gartner2020全球公有云基础设施管理服务提供商魔力象限领导者”

近日&#xff0c;国际权威调研机构Gartner发布了《2020全球公有云基础设施管理服务提供商魔力象限》报告&#xff0c;Bespin Global&#xff08;贝斯平&#xff09;被评为行业领导者&#xff0c;成为东亚唯一连续四年入选Gartner云MSP魔力象限以及东亚唯一进入领导者象限的科技…

Gartner:2019年公有云服务六大趋势

作系&#xff1a;Gartner杰出研究副总裁Ed Anderson、Gartner研究副总裁David Ackerman、Gartner研究副总裁Sid Nag、Gartner高级研究总监吴涛 在2017年至2018年间&#xff0c;云服务市场发生了巨大的变化。企业机构从低风险地尝试使用云转向全面、大规模地使用云。云项目已进入…

大促背后的流量利器|手淘push升级 比你更懂你

导读&#xff1a;过去的很长一段时间内&#xff0c;由于电商的强运营特性&#xff0c;手淘 App 的 Push 消息大部分时候是作为一个活动通知的通道&#xff0c;对重要活动进行通投引流。然而在竞争环境更加激烈和用户渗透日趋饱和的今天&#xff0c;具备更加精细化的用户运营手段…

京东发布“下一代智能协同开放平台”战略 助力政企数字化转型

5月7日,“下一代智能协同开放平台产业战略发布会”(以下简称“发布会”)在京召开。北京市海淀区委常委、常务副区长李俊杰,京东集团技术委员会主席、京东智联云总裁周伯文博士,以及中关村管委会等政府部门,金山、金蝶、致远互联、今目标、网易有道、稻壳互联等企业代表出席。为…

一行命令导致的数据丢失,阿里工程师是如何恢复的?

阿里妹导读&#xff1a;数据安全性被提到了前所未有的高度&#xff0c;数据保护的话题越来越成为敏感。因为&#xff0c;业务的中断时间对用户造成的影响愈来愈大。阿里技术专家凡钧从数据安全的形势与发展&#xff0c;面临的挑战&#xff0c;问题的定义&#xff0c;传统的解决…

ElasticSearch docker安装

文章目录五、安装ElasticSearch5.1. 修改服务器配置5.2. 创建容器并启动 ES5.3. 查看启动日志5.4. 进入镜像5.5. 修改cluster-name5.6. 安装中文分词插件5.7. 退出并重启镜像5.8. 查看启动日志五、安装ElasticSearch docker 安装 Elasticsearch6.4.3版本 及中文插件安装。 系统…

阿里云物联网平台远程配置功能JAVA 示例参考

概述 很多场景下&#xff0c;开发者需要更新设备的配置信息&#xff0c;包括设备的系统参数、网络参数、本地策略等。通常情况下&#xff0c;是通过固件升级的方式更新设备的配置信息。但是&#xff0c;这将加大固件版本的维护工作&#xff0c;并且需要设备中断运行以完成更新。…

Redis 6.0 新特性:多线程连环 13 问!

来源 | 码大叔责编 | Carol封图 | CSDN付费下载自视觉中国支持多线程的Redis6.0版本于2020-05-02终于发布了&#xff0c;为什么Redis忽然要支持多线程&#xff1f;如何开启多线程&#xff1f;开启后性能提升效果如何&#xff1f;线程数量该如何设置&#xff1f;开启多线程后会不…

支付宝这些程序员要逆天,滑板、画漫画、写科幻小说、航拍,玩得太溜

他一边用代码改变世界&#xff0c;一边用科幻小说去创造未来。 他一边用编程书写传奇&#xff0c;一边用画笔记录生活。 他一边用程序驱动科技&#xff0c;一边用滑板挥洒汗水。 他一边用产品推动技术&#xff0c;一边用航拍记录大地。 他们是四位来自蚂蚁金服的普通程序员&…

技术人最不该忽视可视化数据分析!

阿里妹导读&#xff1a;在这个“人人都是数据分析师”的时代&#xff0c;阿里的同学几乎都在参与数据的采集、加工与消费。数据可视化作为连接“加工——消费”的重要一环&#xff0c;其质量至关重要。优秀的可视化能促成卓越洞见&#xff0c;糟糕的内容则让所有的努力失去意义…

ETL异构数据源Datax_部署前置环境_01

文章目录一、概述1. 是什么&#xff1f;2. 开源地址二、简介2.1. 设计架构2.2. 框架结构三、检查环境3.1. 检验是否安装JDK(1.8以上&#xff0c;推荐1.8)3.2. 检验是否安装python环境&#xff0c;要求2.6<版本3.3. maven环境四、JDK环境安装4.1. rpm方式安装4.2. gz方式安装…

AI 玩王者荣耀狂上分!打了六局,心态崩了

你造吗&#xff1f;人工智能继进军围棋之后&#xff0c;又来我“王者峡谷”了。腾讯AI LAB与王者荣耀合作开发的AI【绝悟】&#xff0c;在最高规格赛事中获胜&#xff0c;宣布已达到“电竞职业水平”&#xff01;据称&#xff1a;【绝悟】一天的训练强度&#xff0c;高达人类44…

MFC 工具栏

目录 工具栏概述 工具栏的使用 添加工具栏资源 创建&#xff0c;加载工具栏 设置工具栏停靠 工具栏概述 CToolBarCtrl-父类CWnd&#xff0c;封装了关于工具栏控件的各种操作。 CToolBar一父类CControlBar&#xff0c;封装了关于工具栏的操作&#xff0c;以及和框架窗口的…

在SLS中快速实现异常巡检

一、相关算法研究 1.1 常见的开源算法 Yahoo&#xff1a;EGADSFaceBook&#xff1a;ProphetBaidu&#xff1a;OpprenticeTwitter&#xff1a;Anomaly DetectionRedhat&#xff1a;hawkularAliTsinghua&#xff1a;DonutTencent&#xff1a;MetisNumenta&#xff1a;HTMCMU&…

可能是你见过最完善的微前端解决方案

Techniques, strategies and recipes for building a modern web app with multiple teams using different JavaScript frameworks.—— Micro Frontends 前言 TL;DR 想跳过技术细节直接看怎么实践的同学可以拖到文章底部&#xff0c;直接看最后一节。 目前社区有很多关于微…

金山云纳斯达克敲钟上市 不负时代的机遇

5月8日&#xff0c;中国知名的独立云服务商金山云正式在美国纳斯达克挂牌交易&#xff0c;股票代码 “KC”。 金山云依托广泛的云基础架构&#xff0c;通过提供先进可信赖的云服务&#xff0c;为各行业定制了结构完善的解决方案&#xff0c;在中国云计算市场取得了领先地位&am…

前沿 | VLDB论文解读:阿里云超大规模实时分析型数据库AnalyticDB

前言 一年一度的数据库领域顶级会议VLDB 2019于美国当地时间8月26日-8月30日在洛杉矶召开。在本届大会上&#xff0c;阿里云数据库产品团队多篇论文入选Research Track和Industrial Track。 本文将对入围Industrial Track的论文《AnalyticDB: Realtime OLAP Database System at…

第一个Java

Hello World 随便创一个文件夹&#xff0c;储存代码 新建一个Java文件 文件后缀名.javaHello.java[注意]系统可能没有显示后缀名&#xff0c;需要手动打开 编写代码 public class Hello{public static void main(String[] args){System.out.print("Hello Wold");…

Teradata天睿公司任命Steve McMillan为总裁兼首席执行官

Teradata天睿公司日前宣布&#xff0c;公司董事会已经任命Steve McMillan担任总裁兼首席执行官以及董事会成员&#xff0c;自2020年6月8日起生效。McMillan先生曾在F5 Networks公司担任全球服务执行副总裁&#xff0c;未来将接任临时总裁兼首席执行官Victor Lund&#xff0c;在…