你必須懂的,SpringCloud Alibaba組件
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
? 作者?|? 水瘦山寒
來(lái)源 |? urlify.cn/rqyyya
76套java從入門到精通實(shí)戰(zhàn)課程分享
一、介紹Spring Cloud Alibaba
Ⅰ、簡(jiǎn)介
spring cloud Netflix 相關(guān)技術(shù)整體進(jìn)入維護(hù)模式 Ribbon、Hystrix、zuul、Eureka、config等
spring cloud 整合Netflix
spring cloud alibaba 包含Netflix功能
中文介紹:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
Ⅱ、Spring cloud Alibaba 體系
服務(wù)限流降級(jí):默認(rèn)支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降級(jí)功能的接入,可以在運(yùn)行時(shí)通過(guò)控制臺(tái)實(shí)時(shí)修改限流降級(jí)規(guī)則,還支持查看限流降級(jí) Metrics 監(jiān)控。
服務(wù)注冊(cè)與發(fā)現(xiàn):適配 Spring Cloud 服務(wù)注冊(cè)與發(fā)現(xiàn)標(biāo)準(zhǔn),默認(rèn)集成了 Ribbon 的支持。
分布式配置管理:支持分布式系統(tǒng)中的外部化配置,配置更改時(shí)自動(dòng)刷新。
消息驅(qū)動(dòng)能力:基于 Spring Cloud Stream 為微服務(wù)應(yīng)用構(gòu)建消息驅(qū)動(dòng)能力。
分布式事務(wù):使用 @GlobalTransactional 注解, 高效并且對(duì)業(yè)務(wù)零侵入地解決分布式事務(wù)問(wèn)題。。
阿里云對(duì)象存儲(chǔ):阿里云提供的海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù)。支持在任何應(yīng)用、任何時(shí)間、任何地點(diǎn)存儲(chǔ)和訪問(wèn)任意類型的數(shù)據(jù)。
分布式任務(wù)調(diào)度:提供秒級(jí)、精準(zhǔn)、高可靠、高可用的定時(shí)(基于 Cron 表達(dá)式)任務(wù)調(diào)度服務(wù)。同時(shí)提供分布式的任務(wù)執(zhí)行模型,如網(wǎng)格任務(wù)。網(wǎng)格任務(wù)支持海量子任務(wù)均勻分配到所有 Worker(schedulerx-client)上執(zhí)行。
阿里云短信服務(wù):覆蓋全球的短信服務(wù),友好、高效、智能的互聯(lián)化通訊能力,幫助企業(yè)迅速搭建客戶觸達(dá)通道。
Sentinel:把流量作為切入點(diǎn),從流量控制、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)等多個(gè)維度保護(hù)服務(wù)的穩(wěn)定性。
Nacos:一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。
RocketMQ:一款開源的分布式消息系統(tǒng),基于高可用分布式集群技術(shù),提供低延時(shí)的、高可靠的消息發(fā)布與訂閱服務(wù)。
Dubbo:Apache Dubbo? 是一款高性能 Java RPC 框架。
Seata:阿里巴巴開源產(chǎn)品,一個(gè)易于使用的高性能微服務(wù)分布式事務(wù)解決方案。
Alibaba Cloud OSS: 阿里云對(duì)象存儲(chǔ)服務(wù)(Object Storage Service,簡(jiǎn)稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù)。您可以在任何應(yīng)用、任何時(shí)間、任何地點(diǎn)存儲(chǔ)和訪問(wèn)任意類型的數(shù)據(jù)。
Alibaba Cloud SchedulerX: 阿里中間件團(tuán)隊(duì)開發(fā)的一款分布式任務(wù)調(diào)度產(chǎn)品,提供秒級(jí)、精準(zhǔn)、高可靠、高可用的定時(shí)(基于 Cron 表達(dá)式)任務(wù)調(diào)度服務(wù)。
Alibaba Cloud SMS: 覆蓋全球的短信服務(wù),友好、高效、智能的互聯(lián)化通訊能力,幫助企業(yè)迅速搭建客戶觸達(dá)通道。
更多組件請(qǐng)參考 Roadmap。
二、服務(wù)注冊(cè)和配置中心**Nacos**
Ⅰ、Nacos介紹
一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。
Dynamic Naming and Configuration Service 注冊(cè)中心+配置中心
Nacos = Eureka + Config + Bus + Ribbon
Ⅱ、Nacos注冊(cè)中心
pom
????
????????
????????
????????????com.alibaba.cloud
????????????spring-cloud-alibaba-dependencies
????????????2.1.0.RELEASE
????????????<type>pomtype>
????????????import
????????
????
?
????
????????org.springframework.boot
????????spring-boot-starter-web
????
????
????
????
????????com.alibaba.cloud
????????spring-cloud-starter-alibaba-nacos-discovery
????
????
????????org.projectlombok
????????lombok
????????true
????
????
????????org.springframework.boot
????????spring-boot-starter-test
????????test
????????
????????????
????????????????org.junit.vintage
????????????????junit-vintage-engine
????????????
????????
????
?
????
????????
????????????org.springframework.boot
????????????spring-boot-maven-plugin
????????
????
yml
server:
??port:?9001
spring:
??application:
????name:?nacos-provider
??cloud:
????nacos:
??????discovery:
????????#nacos?服務(wù)地址
????????server-addr:?localhost:8848
management:
??endpoints:
????web:
??????exposure:
??????#注意這里的*?需要加上引號(hào)?不然啟動(dòng)報(bào)錯(cuò)
????????include:?'*'
main application
@SpringBootApplication
@EnableDiscoveryClient
public?class?NacosApplication?{
????public?static?void?main(String[]?args)?{
????????SpringApplication.run(NacosApplication.class,?args);
????}
}
pom
yml
main application
@Configuration
public?class?ApplictationContextConfig?{
????@Bean
????@LoadBalanced//如果有多臺(tái)服務(wù)提供者?不可忘加
????public?RestTemplate?restTemplate()?{
????????return?new?RestTemplate();
????}
}
@RestController
public?class?NacosConsumerController?{
????private?static?final?String?URL?=?"http://nacos-provider";//服務(wù)提供方
????@Autowired
????RestTemplate?restTemplate;
????@GetMapping(value?=?"/consumer/{string}")
????public?String?echo(@PathVariable?String?string)?{
????????return?"NacosConsumerController:?"?+?restTemplate.getForObject(URL?+?"/provider/"?+?string,?String.class);
????}
Ⅲ、Nacos配置中心
?????com.alibaba.cloud
?????spring-cloud-starter-alibaba-nacos-config
server:
??port:?83
spring:
??application:
????name:?nacos-config
??profiles:
????active:?dev
??cloud:
????nacos:
??????config:
????????server-addr:?localhost:8848
????????file-extension:?yaml
??????discovery:
????????#nacos?\u670D\u52A1\u5730\u5740
????????server-addr:?localhost:8848
s p r i n g . a p p l i c a t i o n . n a m e ? {spring.application.name}-spring.application.name?{profile}.${file-extension:properties}
nacos-config -dev .yaml
應(yīng)用名-環(huán)境.文件名后綴
@RestController
@RefreshScope//自動(dòng)刷新注解
public?class?NacosConfigController?{}
??cloud:
????nacos:
??????config:
??????#集群部署?地址修改為nginx代理地址
????????server-addr:?localhost:8848
????????file-extension:?yaml
??????discovery:
????????#集群部署?地址修改為nginx代理地址
????????server-addr:?localhost:8848
三、服務(wù)監(jiān)控降級(jí)Sentinel
核心庫(kù)(Java 客戶端)不依賴任何框架/庫(kù),能夠運(yùn)行于所有 Java 運(yùn)行時(shí)環(huán)境,同時(shí)對(duì) Dubbo / Spring Cloud 等框架也有較好的支持。
控制臺(tái)(Dashboard)基于 Spring Boot 開發(fā),打包后可以直接運(yùn)行,不需要額外的 Tomcat 等應(yīng)用容器。
Ⅰ、基本配置
直接官網(wǎng)下載jar包,java -jar xxxx.jar運(yùn)行 (需要有jdk配置)
配置微服務(wù)
????
????????
????????
????????????com.alibaba.cloud
????????????spring-cloud-alibaba-dependencies
????????????2.1.0.RELEASE
????????????<type>pomtype>
????????????import
????????
????
?
????
????
????????com.alibaba.cloud
????????spring-cloud-starter-alibaba-sentinel
????????2.2.3.RELEASE
????
????
????
????????com.alibaba.csp
????????sentinel-datasource-nacos
????????1.8.0
????
????
????
????????com.alibaba.cloud
????????spring-cloud-starter-alibaba-nacos-discovery
????
????
????????org.springframework.boot
????????spring-boot-starter-web
????
?
????
????????org.projectlombok
????????lombok
????????true
????
yml
server:
??port:?8401
spring:
??application:
????name:?sentinel-provider
??cloud:
????nacos:
??????discovery:
????????#nacos?服務(wù)注冊(cè)地址
????????server-addr:?localhost:8848
????sentinel:
??????transport:
????????#sentinel?dashboard?地址
????????dashboard:?localhost:8080
management:
??endpoints:
????web:
??????exposure:
????????include:?'*'
main application
@SpringBootApplication
@EnableDiscoveryClient
public?class?SentinelApplication?{
????public?static?void?main(String[]?args)?{
????????SpringApplication.run(SentinelApplication.class,?args);
????}
}
controller
@RestController
public?class?SentinelController?{
????@RequestMapping("/sentinel/testA")
????public?String?testA()?{
????????return?"AAAAAAAAAA";
????}
?
????@RequestMapping("/sentinel/testB")
????public?String?testB()?{
????????return?"BBBBBBBBBB";
????}
}
查看dashboard(懶加載 需要先做一次請(qǐng)求)
http://localhost:8401/sentinel/testA

Ⅱ、功能介紹
?簇點(diǎn)鏈路
?流控規(guī)則
?降級(jí)規(guī)則
?熱點(diǎn)規(guī)則
?系統(tǒng)規(guī)則
?授權(quán)規(guī)則
?集群流控
?機(jī)器列表
?實(shí)時(shí)監(jiān)控
Ⅲ、持久化
四、分布式事務(wù)
Ⅰ、Seata介紹
Transaction Coordinator(TC):維護(hù)全局和分支事務(wù)的狀態(tài),驅(qū)動(dòng)全局事務(wù)提交與回滾。
Transaction Manager?:定義全局事務(wù)的范圍:開始、提交或回滾全局事務(wù)。
Resource Manager(RM):管理分支事務(wù)處理的資源,與 TC通信以注冊(cè)分支事務(wù)并報(bào)告分支事務(wù)的狀態(tài),并驅(qū)動(dòng)分支事務(wù)提交或回滾。
Ⅱ、執(zhí)行流程
TM 要求 TC 開始新的全局事務(wù),TC 生成表示全局事務(wù)的 XID。
XID 通過(guò)微服務(wù)的調(diào)用鏈傳播。XID 通過(guò)微服務(wù)的調(diào)用鏈傳播。
RM 在 TC 中將本地事務(wù)注冊(cè)為 XID 的相應(yīng)全局事務(wù)的分支。RM 在 TC 中將本地事務(wù)注冊(cè)為 XID 的相應(yīng)全局事務(wù)的分支。
TM 要求 TC 提交或回滾 XID 的相應(yīng)全局事務(wù)。TM 要求 TC 提交或回滾 XID 的相應(yīng)全局事務(wù)。
TC 驅(qū)動(dòng) XID 的相應(yīng)全局事務(wù)下的所有分支事務(wù),完成分支提交或回滾。TC 驅(qū)動(dòng) XID 的相應(yīng)全局事務(wù)下的所有分支事務(wù),完成分支提交或回滾。
一階段:業(yè)務(wù)數(shù)據(jù)和回滾日志記錄在同一個(gè)本地事務(wù)中提交,釋放本地鎖和連接資源。
二階段:
提交異步化,非??焖俚赝瓿?。
回滾通過(guò)一階段的回滾日志進(jìn)行反向補(bǔ)償。
一階段本地事務(wù)提交前,需要確保先拿到?全局鎖?。
拿不到?全局鎖?,不能提交本地事務(wù)。
拿?全局鎖?的嘗試被限制在一定范圍內(nèi),超出范圍將放棄,并回滾本地事務(wù),釋放本地鎖。
一階段:業(yè)務(wù)數(shù)據(jù)和回滾日志記錄在同一個(gè)本地事務(wù)中提交,釋放本地鎖和連接資源。
二階段:
提交異步化,非??焖俚赝瓿伞?/span>
回滾通過(guò)一階段的回滾日志進(jìn)行反向補(bǔ)償。
一階段本地事務(wù)提交前,需要確保先拿到?全局鎖?。
拿不到?全局鎖?,不能提交本地事務(wù)。
拿?全局鎖?的嘗試被限制在一定范圍內(nèi),超出范圍將放棄,并回滾本地事務(wù),釋放本地鎖。
鋒哥最新SpringCloud分布式電商秒殺課程發(fā)布
??????
??長(zhǎng)按上方微信二維碼?2 秒
感謝點(diǎn)贊支持下哈?













