Springcloud Alibaba超詳細(xì)使用詳解
簡(jiǎn)介
Spring Cloud Alibaba是阿里巴巴結(jié)合自身的微服務(wù)實(shí)踐開源的微服務(wù)全家桶,我個(gè)人覺得其組件比Spring Cloud 中的組件更加好用和強(qiáng)大。并且對(duì)的Spring Cloud組件做了很好的兼容。比如在Spirng Cloud Alibaba中依然可以使用Feign作為服務(wù)調(diào)用方式,使用Eureak做服務(wù)注冊(cè)發(fā)現(xiàn)等等。
主要功能
1.服務(wù)注冊(cè)和發(fā)現(xiàn)(nacos):可以注冊(cè)服務(wù),并且客戶可以使用Spring托管的bean(自動(dòng)集成功能區(qū))發(fā)現(xiàn)實(shí)例。注冊(cè)中心。
2.分布式配置(nacos):支持分布式系統(tǒng)中的外部配置,配置更改時(shí)自動(dòng)刷新。 配置中心
3.流控制和服務(wù)降級(jí)(Sentinel ):支持WebServlet,WebFlux-->(比Springmvc更高級(jí))OpenFeign,RestTemplate,Dubbo訪問限制和降級(jí)流的功能。它可以在運(yùn)行時(shí)通過控制臺(tái)實(shí)時(shí)修改限制和降級(jí)流的規(guī)則,并且還支持監(jiān)視限制和降級(jí)度量標(biāo)準(zhǔn)。 - 服務(wù)熔斷限流hystrix
4.Rpc服務(wù):擴(kuò)展Spring Cloud客戶端RestTemplate(ribbon)和OpenFeign以支持調(diào)用Dubbo RPC服務(wù)。
5.分布式事務(wù)(seata):支持高性能且易于使用的分布式事務(wù)解決方案。
6.事件驅(qū)動(dòng):支持構(gòu)建與共享消息系統(tǒng)連接的高度可擴(kuò)展的事件驅(qū)動(dòng)微服務(wù)。
7.阿里云對(duì)象存儲(chǔ):大規(guī)模,安全,低成本,高度可靠的云存儲(chǔ)服務(wù)。支持隨時(shí)隨地在任何應(yīng)用程序中存儲(chǔ)和訪問任何類型的數(shù)據(jù)。
8.阿里云SchedulerX:準(zhǔn)確,高度可靠,高可用性的計(jì)劃作業(yè)調(diào)度服務(wù),響應(yīng)時(shí)間在幾秒鐘內(nèi)。
9.阿里云短信:阿里云短信服務(wù)覆蓋全球,提供便捷,高效,智能的通信功能,幫助企業(yè)快速聯(lián)系客戶。
與奈飛對(duì)比

注冊(cè)中心nacos
什么是nacos
Nacos致力于幫助您發(fā)現(xiàn),配置和管理微服務(wù)。它提供了一組簡(jiǎn)單有用的功能,使您能夠?qū)崿F(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn),服務(wù)配置,服務(wù)元數(shù)據(jù)和流量管理。Nacos使構(gòu)建,交付和管理微服務(wù)平臺(tái)變得更容易,更快捷。它是通過微服務(wù)或云原生方法支持以服務(wù)為中心的現(xiàn)代應(yīng)用程序體系結(jié)構(gòu)的基礎(chǔ)架構(gòu)。說的通俗一些,就是承擔(dān)了奈飛框架中的Eureka的功能,相當(dāng)于注冊(cè)中心,但比Eureka更加智能與便捷。
如何安裝nacos
官方提供了Nacos的服務(wù)端供我們下載使用,我們啟動(dòng)Nacos后將我們的微服務(wù)注冊(cè)進(jìn)入Nacos即可。
下載地址:[https://github.com/alibaba/nacos/releases]
啟動(dòng)nacos
nacos的啟動(dòng)也十分方便,在下載好的jar包目錄下執(zhí)行
- windows執(zhí)行bin目錄下的startup命令 :startup.cmd -m standalone
- linux 執(zhí)行 :sh startup.sh -m standalone
啟動(dòng)成功頁面如下所示

nacos的默認(rèn)端口為8848,在啟動(dòng)成功后,用戶即可訪問nacos,訪問地址為:(本地單機(jī)模式)http://127.0.0.1:8848/nacos/index.html
登錄的賬號(hào)和密碼均為:nacos
登錄成功頁面如圖所示(筆者這里已經(jīng)注冊(cè)好了幾個(gè)服務(wù),故會(huì)有信息,第一次登錄且未將服務(wù)注冊(cè)到nacos的話,這里是沒有信息的)

服務(wù)架構(gòu)簡(jiǎn)單搭建
舉例服務(wù)項(xiàng)目結(jié)構(gòu)

微服務(wù)調(diào)用流程
Order-Service-20010提供訂單的查詢服務(wù),Order-Client-30010調(diào)用Order-Service-20010提供的服務(wù)查詢自身的訂單信息,Order-Common作為公共服務(wù),提供了相關(guān)實(shí)體類以及對(duì)應(yīng)的無參有參構(gòu)造方法
項(xiàng)目搭建
父工程的pom.xml
<!--公共的一些配置-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<!--SpringBoot-->
<parent>
<groupId> org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<!--SpringCloud-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--導(dǎo)入lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
</dependencies>服務(wù)注冊(cè)到nacos
Order-Service-20010配置
添加依賴
<dependency>
<groupId>com.alibaba.cloud </groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>編寫啟動(dòng)類
@SpringBootApplication
@EnableDiscoveryClient
public class OrderServerStart {
public static void main(String[] args) {
SpringApplication.run(OrderServerStart.class);
}
}編寫配置文件yml
server:
port: 20010
spring:
application:
name: Order-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848Order-Client-30010配置
添加依賴
<dependency>
<groupId>com.alibaba.cloud </groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>編寫啟動(dòng)類
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class OrderClientStart
{
public static void main( String[] args )
{
SpringApplication.run(OrderClientStart.class);
}
}編寫配置文件yml
server:
port: 30010
spring:
application:
name: Order-client
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848啟動(dòng)成功后,nacos當(dāng)中便會(huì)看見注冊(cè)成功的服務(wù)

Nacos配置中心
客戶端接入配置中心
概述
在《SpringCloud極簡(jiǎn)入門》中我們通過Spring Cloud Config作為統(tǒng)一配置文件管理中心,其實(shí)我們總結(jié)一下發(fā)現(xiàn)Spring Cloud Config使用起來總歸比較麻煩。Nacos作為Spring Cloud Alibaba的一個(gè)重要組件,它不僅可以用作服務(wù)注冊(cè)與發(fā)現(xiàn),也可以用來替代Spring Cloud Config作為統(tǒng)一配置文件管理,而且他的使用更為簡(jiǎn)單和人性化。
如何實(shí)現(xiàn)
點(diǎn)擊頁面左上角的"+"按鈕即可添加新的配置,不過需要注意的是,編寫的后綴改為yaml,在項(xiàng)目中要將application.yml,修改為bootstrap.yml,并在內(nèi)部進(jìn)行相關(guān)的配置

導(dǎo)入依賴
<dependencies>
<!-- 配置中心客戶端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 服務(wù)注冊(cè)與發(fā)現(xiàn)-->
<dependency>
<groupId>com.alibaba.cloud </groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>springcloudalibaba-user-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>配置Controller
@RefreshScope //刷新配置
@RestController
public class UserController {
@Value("${temp.notify}")
private String notify;
@GetMapping("/user/{id}")
public User getById(@PathVariable Long id){
User user = new User(id,"root"+notify ,null);
return user;
}
}修改yml配置
以修改order-client的yml為例
server:
port: 30010
spring:
application:
name: Order-client
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
prefix: application-user
group: DEFAULT_GROUP測(cè)試

root后多了一個(gè)1234,為什么呢?
因?yàn)楣P者在nacos當(dāng)中的配置文件中,定義了notify的值為1234,這樣就表示配置中心配置成功
Sentinel限流控制
Sentinel和Hystrix
限流和熔斷
限流 , 限制流量,這里的流量我們可以理解成請(qǐng)求數(shù)量,其實(shí)就是限制服務(wù)器的請(qǐng)求并發(fā)數(shù)量,為什么要這么做?如果不做限流,那么在大量并發(fā)請(qǐng)求下我們的服務(wù)器會(huì)慢慢的變慢然后頂不住壓力而掛掉(類似堵車)。并不是說并發(fā)越大越好,有的時(shí)候我們的項(xiàng)目規(guī)模和業(yè)務(wù)決定了我們不需要那么大的并發(fā)性,當(dāng)大量的并發(fā)請(qǐng)求訪問到服務(wù)器時(shí)我們需要把部分請(qǐng)求拒絕在外,這個(gè)是流量限制 - 限流。
熔斷機(jī)制在在[《Spring Cloud 極簡(jiǎn)入門》)中有詳細(xì)的解釋,熔斷機(jī)制是對(duì)服務(wù)調(diào)用鏈路的保護(hù)機(jī)制,如果鏈路上的某個(gè)服務(wù)不可訪問,調(diào)用超時(shí),發(fā)生異常等,服務(wù)會(huì)進(jìn)行發(fā)熔斷,觸發(fā)降級(jí)返回托底數(shù)據(jù)。簡(jiǎn)單理解就是當(dāng)服務(wù)器不可訪問,可以返回一些預(yù)先準(zhǔn)備好的兜底數(shù)據(jù)給用戶,比如友好的提示信息,不至于直接向客戶拋出異常。
Hystrix的熔斷和資源隔離
其實(shí)在[《Spring Cloud 極簡(jiǎn)入門》]中我們已經(jīng)學(xué)習(xí)過Hystrix的熔斷和資源隔離機(jī)制,它的資源隔離可以通過線程池隔離和信號(hào)量隔離兩種方式來實(shí)現(xiàn)對(duì)流量的控制。Hystrix相比Sentinel來說它的線程池隔離(限流)會(huì)造成線程上下切換對(duì)資源的消耗比較大;Hystrix使用的信號(hào)量進(jìn)行資源的隔離效果不錯(cuò),但是無法對(duì)慢調(diào)用進(jìn)行自動(dòng)降級(jí)。
Sentinel定義
Sentinel誕生于阿里巴巴,其主要目標(biāo)是流量控制和服務(wù)熔斷,2018年,Sentinel演變?yōu)橐粋€(gè)開源項(xiàng)目現(xiàn)如今成為了Spring Cloud Alibaba的一個(gè)子項(xiàng)目。Sentinel是通過限制并發(fā)線程的數(shù)量來減少不穩(wěn)定資源的影響,而不是使用線程池,省去了線程切換的性能開銷。
當(dāng)資源的響應(yīng)時(shí)間變長(zhǎng)時(shí),線程將開始被占用。當(dāng)線程數(shù)累積到一定數(shù)量時(shí),新的傳入請(qǐng)求將被拒絕。反之亦然,當(dāng)資源恢復(fù)并變得穩(wěn)定時(shí),占用的線程也將被釋放,新請(qǐng)求將被接受。
除了限制并發(fā)性外,Sentinel可以根據(jù)響應(yīng)時(shí)間降級(jí)不穩(wěn)定資源也是保證可靠性的有效方法。當(dāng)資源的響應(yīng)時(shí)間太大時(shí),將在指定的時(shí)間窗口中拒絕所有對(duì)該資源的訪問。-- 熔斷機(jī)制
此外,Sentinel支持的熔斷降級(jí)維度更多,可對(duì)多種指標(biāo)進(jìn)行流控、熔斷,且提供了實(shí)時(shí)監(jiān)控和控制面板,功能更為強(qiáng)大。
Sentinel客戶端接入
導(dǎo)入依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>添加yml配置
spring:
cloud:
sentinel:
transport:
dashboard: localhost:1111資源限流實(shí)現(xiàn)
在Controller中添加一個(gè)Sentinelresource注解
@SentinelResource(value = "getUser",blockHandler = "LimitResource")
value表示要進(jìn)行限流的方法,blockHandler表示限流之后系統(tǒng)調(diào)用的方法
完整代碼:
@RefreshScope
@RestController
@RequestMapping("/user")
public class UserController {
@Value("${temp.notify}")
private String notify;
@Autowired
private OrderOpenFeignClient feignClient;
//限制的資源
@SentinelResource(value = "getUser",blockHandler = "LimitResource")
// 給資源取名user,后續(xù)通過名字來進(jìn)行限流
@GetMapping("/{id}")
public User getUser(@PathVariable("id") Long id){
//發(fā)起遠(yuǎn)程調(diào)用
List<Order> orders =feignClient.getList(id);
int i=new Random().nextInt(2);
System.out.println(1/i);
User user = new User(id,"root"+notify ,orders);
return user;
}
public User LimitResource(@PathVariable("id") Long id,BlockException e){
e.printStackTrace();
return new User(-1L,"限流了",null);
}
}如何設(shè)置限流

在sentinel的當(dāng)前頁面,點(diǎn)擊對(duì)應(yīng)資源的流控按鈕,進(jìn)行流控策略的配置。

這里單機(jī)閾值設(shè)置為1,表示1s內(nèi)的訪問量超過一次,則會(huì)觸發(fā)限流效果。 系統(tǒng)便會(huì)執(zhí)行自己設(shè)定的LimitResource方法,筆者這里便不附上運(yùn)行截圖了,配置十分簡(jiǎn)單,配置完成也不需要重啟服務(wù),直接進(jìn)行接口訪問壓測(cè)即可。
Sentinel流控效果
快速失敗
快速失敗:(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)是默認(rèn)的流控方式,當(dāng)流量達(dá)到閥值直接返回異常,QPS達(dá)到任何規(guī)則閾值后,后續(xù)請(qǐng)求就會(huì)立即拒絕,并拋出FlowException 異常。簡(jiǎn)單理解:并發(fā)太高,直接請(qǐng)求拒絕
warmup預(yù)熱
Warm Up預(yù)熱:(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式,根據(jù)codeFactor(默認(rèn)3)的值,從(閥值/codeFactor)為初始閥值,經(jīng)過預(yù)熱時(shí)長(zhǎng),才到達(dá)設(shè)置的QPS的閥值,即預(yù)熱/冷啟動(dòng)方式。簡(jiǎn)單理解:慢慢的增大處理并發(fā)的能力
排隊(duì)等待
排隊(duì)等待(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER),忽然增加的請(qǐng)求并發(fā)量達(dá)到了限流閾值后續(xù)請(qǐng)求會(huì)被拒絕,有時(shí)候我們可能更希望后續(xù)的請(qǐng)求可以加入隊(duì)列進(jìn)行排隊(duì),慢慢執(zhí)行,而不是直接拒絕請(qǐng)求,這種方式后嚴(yán)格控制請(qǐng)求通過的時(shí)間間隔,也即是讓請(qǐng)求以均勻的速度通過,對(duì)應(yīng)的是漏桶算法,這種方式主要用于處理間隔性突發(fā)的流量,例如消息隊(duì)列。 簡(jiǎn)單理解:突發(fā)流量處理不過來,讓請(qǐng)求排隊(duì)。
Sentinel熔斷
概述
什么是熔斷
Sentinel除了流控還提供了服務(wù)熔斷和降級(jí)機(jī)制,服務(wù)之間的調(diào)用關(guān)系錯(cuò)綜復(fù)雜,微服務(wù)的調(diào)用鏈上的某些服務(wù)資源不穩(wěn)定(宕機(jī),異常,超時(shí))可能會(huì)導(dǎo)致可能請(qǐng)求的失敗和請(qǐng)求的堆積,調(diào)用鏈產(chǎn)生連鎖反應(yīng)可能會(huì)導(dǎo)致整個(gè)微服務(wù)架構(gòu)癱瘓。服務(wù)熔斷降級(jí)機(jī)制是保障高可用的重要措施之一。
Sentinel熔斷
Sentinel的服務(wù)熔斷機(jī)制會(huì)對(duì)調(diào)用鏈上的某個(gè)不穩(wěn)定(宕機(jī),異常,超時(shí))的資源,做出請(qǐng)求限制,快速失敗,避免影響到其它的服務(wù)而導(dǎo)致級(jí)聯(lián)錯(cuò)誤。資源熔斷后,在后續(xù)的一定時(shí)間(時(shí)間窗口)之內(nèi),對(duì)該服務(wù)的請(qǐng)求都自動(dòng)熔斷,拋出 DegradeException異常。Sentinel擁有比Hystrix更強(qiáng)大和豐富的功能,能滿足我們的各種應(yīng)用場(chǎng)景,并且經(jīng)歷過淘寶雙十一的考驗(yàn),是微服務(wù)架構(gòu)中熔斷機(jī)制的不二選擇。
熔斷規(guī)則
平均響應(yīng)RT
平均響應(yīng)時(shí)間 (DEGRADE_GRADE_RT):當(dāng)資源的平均響應(yīng)時(shí)間超過閾值(DegradeRule 中的 count,以 ms 為單位)之后,資源進(jìn)入準(zhǔn)降級(jí)狀態(tài)。如果接下來 1s 內(nèi)持續(xù)進(jìn)入 5 個(gè)請(qǐng)求(即 QPS >= 5),它們的 RT 都持續(xù)超過這個(gè)閾值,那么在接下的時(shí)間窗口(DegradeRule 中的 timeWindow,以 s 為單位)之內(nèi),對(duì)這個(gè)方法的調(diào)用都會(huì)自動(dòng)地熔斷(拋出 DegradeException)。注意 Sentinel 默認(rèn)統(tǒng)計(jì)的 RT 上限是 4900 ms,超出此閾值的都會(huì)算作 4900 ms,若需要變更此上限可以通過啟動(dòng)配置項(xiàng) -Dcsp.sentinel.statistic.max.rt=xxx 來配置。
異常比例
異常比例(DEGRADE_GRADE_EXCEPTION_RATIO):每秒請(qǐng)求量 > 5 ,當(dāng)資源的每秒異??倲?shù)占通過量的比值超過閾值(DegradeRule 中的 count)之后,資源進(jìn)入降級(jí)狀態(tài),即在接下的時(shí)間窗口(DegradeRule 中的 timeWindow,以 s 為單位)之內(nèi),對(duì)這個(gè)方法的調(diào)用都會(huì)自動(dòng)地返回。異常比率的閾值范圍是 [0.0, 1.0],代表 0% - 100%。
異常數(shù)
異常數(shù) (DEGRADE_GRADE_EXCEPTION_COUNT):當(dāng)資源近 1 分鐘的異常數(shù)目超過閾值之后會(huì)進(jìn)行熔斷。注意由于統(tǒng)計(jì)時(shí)間窗口是分鐘級(jí)別的,若 timeWindow 小于 60s,則結(jié)束熔斷狀態(tài)后仍可能再進(jìn)入熔斷狀態(tài)。
慢調(diào)用比例
熔斷策略慢調(diào)用比例是以慢調(diào)用數(shù)量的比例作為閾值,首先需要設(shè)置最大 RT(即最大的響應(yīng)時(shí)間,用于鑒定是否是慢調(diào)用),請(qǐng)求的響應(yīng)時(shí)間大于該值則統(tǒng)計(jì)為慢調(diào)用。當(dāng)單位統(tǒng)計(jì)時(shí)長(zhǎng)(statIntervalMs)內(nèi)請(qǐng)求數(shù)大于設(shè)置的最小請(qǐng)求數(shù),并且慢調(diào)用的比例大于比例閾值,則接下來的請(qǐng)求會(huì)自動(dòng)熔斷,熔斷時(shí)間為設(shè)置的熔斷時(shí)長(zhǎng)。經(jīng)過熔斷時(shí)長(zhǎng)后熔斷器會(huì)進(jìn)入探測(cè)恢復(fù)狀態(tài)(HALF-OPEN 狀態(tài)),若在HALF-OPEN狀態(tài)下有一個(gè)請(qǐng)求響應(yīng)時(shí)間小于 最大RT 則結(jié)束熔斷,否則繼續(xù)熔斷。
熔斷實(shí)戰(zhàn)示例
導(dǎo)入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>配置yml
feign:
sentinel:
enabled: true #熔斷配置OpenFeign
接口
@FeignClient(value = "Order-server")
public interface OrderOpenFeignClient {
@GetMapping("/order/{id}")
public List<Order> getList(@PathVariable("id") Long id);
}熔斷返回fallback
@Component
public class UserFallBack implements FallbackFactory<OrderOpenFeignClient> {
@Override
public OrderOpenFeignClient create(Throwable throwable) {
return id ->Arrays.asList(new Order(-2L,"服務(wù)暫時(shí)不可用","請(qǐng)您稍后再試"));
}
}修改Controller
在SentinelResource中添加相關(guān)屬性值
Controller完整代碼
@RefreshScope
@RestController
@RequestMapping("/user")
public class UserController {
@Value("${temp.notify}")
private String notify;
@Autowired
private OrderOpenFeignClient feignClient;
//限制的資源
@SentinelResource(value = "getUser",blockHandler = "LimitResource",blockHandlerClass = UserFallback.class,
fallback = "Error")
// 給資源取名user,后續(xù)通過名字來進(jìn)行限流
@GetMapping("/{id}")
public User getUser(@PathVariable("id") Long id){
//發(fā)起遠(yuǎn)程調(diào)用
List<Order> orders =feignClient.getList(id);
int i=new Random().nextInt(2);
System.out.println(1/i);
User user = new User(id,"root"+notify ,orders);
return user;
}
//方案1
// public User LimitResource(@PathVariable("id") Long id,BlockException e){
// e.printStackTrace();
// return new User(-1L,"限流了",null);
// }
public User Error(@PathVariable("id") Long id){
return new User(-1L,"熔斷數(shù)據(jù)集",null);
}
}因?yàn)樵谶@里,寫了一個(gè)Error方法,并且在SentinelResource中添加了fallback="Error"所以fallback返回的將是Error的內(nèi)容。
測(cè)試結(jié)果:

寫在最后:
SpringCloudAlibaba是一款優(yōu)秀的微服務(wù)架構(gòu),在市面上有著廣泛的應(yīng)用。這篇文章介紹了SpringCloudAlibaba的一些基本使用,適合初學(xué)者,希望能夠給大家?guī)韼椭9P者小,中,大廠均有面試經(jīng)驗(yàn),目前正在從事全棧開發(fā)工作,堅(jiān)持每日分享java全棧開發(fā)知識(shí)與相關(guān)的面試真題,希望能夠給大家?guī)韼椭蠹夜餐M(jìn)步
- SpringCloudAlibaba微服務(wù)調(diào)用組件OpenFeign的方法
- Alibaba?SpringCloud集成Nacos、openFeign實(shí)現(xiàn)負(fù)載均衡的解決方案
- 淺談SpringCloud?Alibaba和SpringCloud的區(qū)別
- 聊聊SpringCloud和SpringCloudAlibaba的區(qū)別
- SpringCloudAlibaba整合Feign實(shí)現(xiàn)遠(yuǎn)程HTTP調(diào)用的簡(jiǎn)單示例
- SpringCloudAlibaba分布式組件詳解
- SpringCloud Alibaba項(xiàng)目實(shí)戰(zhàn)之nacos-server服務(wù)搭建過程
- SpringCloud Alibaba 基本開發(fā)框架搭建過程
相關(guān)文章
SpringBoot項(xiàng)目中控制臺(tái)日志的保存配置操作
這篇文章主要介紹了SpringBoot項(xiàng)目中控制臺(tái)日志的保存配置操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
SpringBoot讀取配置文件的6種實(shí)現(xiàn)方式
這篇文章主要介紹了SpringBoot讀取配置文件的6種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
SpringBoot項(xiàng)目啟動(dòng)錯(cuò)誤:找不到或無法加載主類的三種解決方法
在開發(fā)SpringBoot應(yīng)用時(shí),經(jīng)??赡軙?huì)遇到一個(gè)啟動(dòng)錯(cuò)誤:“錯(cuò)誤:找不到或無法加載主類 com.example.controller.demo.DemoApplication”,本文將介紹三種解決這一問題的方法,需要的朋友可以參考下2024-10-10
Spring Cloud 請(qǐng)求重試機(jī)制核心代碼分析
這篇文章主要介紹了Spring Cloud 請(qǐng)求重試機(jī)制核心代碼分析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06
SpringBoot定制JSON響應(yīng)數(shù)據(jù)返回的示例代碼
@JsonView 是 Jackson 庫中的一個(gè)注解,它允許你定義哪些屬性應(yīng)該被序列化到 JSON 中,基于不同的“視圖”或“配置”,在本文中,通過了解@JsonView,你將能夠更好地掌握如何在Spring Boot應(yīng)用中定制JSON數(shù)據(jù)的輸出,需要的朋友可以參考下2024-05-05
SpringBoot實(shí)現(xiàn)事務(wù)鉤子函數(shù)的示例
本文主要介紹了SpringBoot實(shí)現(xiàn)事務(wù)鉤子函數(shù)的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-08-08
SpringBoot集成Sharding Jdbc使用復(fù)合分片的實(shí)踐
數(shù)據(jù)庫分庫分表中間件是采用的 apache sharding。本文主要介紹了SpringBoot集成Sharding Jdbc使用復(fù)合分片的實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2021-09-09
IDEA運(yùn)行spring項(xiàng)目時(shí),控制臺(tái)未出現(xiàn)的解決方案
文章總結(jié)了在使用IDEA運(yùn)行代碼時(shí),控制臺(tái)未出現(xiàn)的問題和解決方案,問題可能是由于點(diǎn)擊圖標(biāo)或重啟IDEA后控制臺(tái)仍未顯示,解決方案提供了解決方法,包括通過右三角Run運(yùn)行(快捷鍵:Alt+42)或以Debug運(yùn)行(快捷鍵:Alt+5)來解決2025-01-01
Spring?AOP操作的相關(guān)術(shù)語及環(huán)境準(zhǔn)備
這篇文章主要為大家介紹了Spring?AOP操作的相關(guān)術(shù)語及環(huán)境準(zhǔn)備學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

