国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【SpringBoot系列】如何優(yōu)雅地實現(xiàn)異步調(diào)用

這篇具有很好參考價值的文章主要介紹了【SpringBoot系列】如何優(yōu)雅地實現(xiàn)異步調(diào)用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


【SpringBoot系列】如何優(yōu)雅地實現(xiàn)異步調(diào)用

1.前言

在現(xiàn)代的應(yīng)用程序開發(fā)中,異步調(diào)用是提高系統(tǒng)性能和響應(yīng)能力的重要手段之一。

Spring Boot作為一個快速開發(fā)框架,提供了多種方式來實現(xiàn)異步調(diào)用,使得開發(fā)者能夠更加優(yōu)雅地處理并發(fā)和異步任務(wù)。

本文將介紹如何在Spring Boot中實現(xiàn)異步調(diào)用的方法和技巧,幫助開發(fā)者更好地利用異步調(diào)用提升系統(tǒng)的性能和可擴展性。


2.同步和異步之間的區(qū)別

【SpringBoot系列】如何優(yōu)雅地實現(xiàn)異步調(diào)用

2.1 執(zhí)行方式

同步是指程序按照順序依次執(zhí)行,每個操作完成后再執(zhí)行下一個操作;

異步是指程序不按照順序執(zhí)行,可以同時執(zhí)行多個操作。

2.2 阻塞與非阻塞

同步操作是阻塞的,即在執(zhí)行某個操作時,程序會一直等待該操作完成后才能繼續(xù)執(zhí)行下一個操作;

異步操作是非阻塞的,即在執(zhí)行某個操作時,程序可以繼續(xù)執(zhí)行其他操作,不需要等待該操作完成。

2.3 返回結(jié)果

同步操作會立即返回結(jié)果,程序可以直接使用該結(jié)果進(jìn)行后續(xù)處理;

異步操作不會立即返回結(jié)果,而是通過回調(diào)函數(shù)、輪詢或者事件通知等方式來獲取結(jié)果。

2.4 資源利用率

同步操作會占用線程資源,每個操作都需要一個線程來執(zhí)行

異步操作可以充分利用線程資源,一個線程可以同時處理多個操作。

2.5 編程模型

同步操作的編程模型相對簡單,代碼易于理解和調(diào)試;

異步操作的編程模型相對復(fù)雜,需要處理回調(diào)函數(shù)、事件監(jiān)聽等機制。

【SpringBoot系列】如何優(yōu)雅地實現(xiàn)異步調(diào)用


3.幾種異步的方式

【SpringBoot系列】如何優(yōu)雅地實現(xiàn)異步調(diào)用

3.1 @Async注解

@Async注解是Spring框架提供的一個注解,用于標(biāo)識一個方法是異步執(zhí)行的。

當(dāng)一個方法被@Async注解修飾后,該方法的執(zhí)行將會在一個單獨的線程中進(jìn)行,而不會阻塞當(dāng)前線程。

使用@Async注解需要滿足以下條件:

1.在Spring配置文件中開啟異步支持,可以通過在配置類上添加@EnableAsync注解或者在配置文件中配置task:annotation-driven/來實現(xiàn)。
2.在需要異步執(zhí)行的方法上添加@Async注解。

示例
@Service
public class MyService {
    @Async
    public void doSomething() {
        // ...
    }
}

調(diào)用doSomething()方法時,會在新的線程中執(zhí)行,實現(xiàn)異步。

需要注意的是,使用@Async注解時,被注解的方法不能是private或final的,因為Spring需要通過代理來實現(xiàn)異步執(zhí)行。另外,被注解的方法不能在同一個類中被調(diào)用,否則異步執(zhí)行將失效,因為Spring無法通過代理來實現(xiàn)異步調(diào)用。

3.2 CompletableFuture

? CompletableFuture是Java 8中引入的一個類,用于支持異步編程和處理異步任務(wù)的結(jié)果。它提供了一種簡潔而強大的方式來處理異步操作,可以方便地進(jìn)行任務(wù)的組合、轉(zhuǎn)換和處理

3.2.1 特點

異步執(zhí)行

CompletableFuture可以通過supplyAsync()或runAsync()方法來異步執(zhí)行任務(wù),返回一個CompletableFuture對象。

鏈?zhǔn)讲僮?/strong>

CompletableFuture提供了一系列的方法,如thenApply()、thenAccept()、thenRun()等,可以對異步任務(wù)的結(jié)果進(jìn)行處理,形成鏈?zhǔn)讲僮鳌?/p>

異常處理

CompletableFuture提供了exceptionally()和handle()方法,用于處理異步任務(wù)中的異常情況。

組合操作

CompletableFuture提供了一系列的組合方法,如thenCompose()、thenCombine()、allOf()、anyOf()等,可以方便地組合多個異步任務(wù)。

等待結(jié)果

CompletableFuture提供了一系列的方法,如get()、join()、getNow()等,可以等待異步任務(wù)的結(jié)果。

3.2.2 示例
import java.util.concurrent.CompletableFuture;

public class CompletableFutureExample {

public static void main(String[] args) {
// 異步執(zhí)行任務(wù)
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 異步任務(wù)的邏輯
return "Hello, CompletableFuture!";
});

// 處理異步任務(wù)的結(jié)果
future.thenAccept(result -> {
System.out.println(result);
});

// 等待異步任務(wù)的結(jié)果
future.join();
}
}

調(diào)用該方法會立即返回一個CompletableFuture,在其他線程中異步執(zhí)行方法邏輯,最終設(shè)置結(jié)果。

需要注意的是,CompletableFuture類是線程安全的,可以在多線程環(huán)境下使用。

另外,CompletableFuture還提供了一些其他的方法,如whenComplete()、thenCompose()、thenCombine()等,可以根據(jù)具體需求選擇合適的方法來處理異步任務(wù)。

3.3 Reactor/RxJava

? Reactor和RxJava都是用于支持響應(yīng)式編程的庫,它們提供了一種基于事件流的編程模型,可以方便地處理異步和并發(fā)操作。

3.3.1 Reactor示例
import reactor.core.publisher.Flux;

public class ReactorExample {

    public static void main(String[] args) {
        // 創(chuàng)建一個包含1到5的異步序列
        Flux<Integer> flux = Flux.range(1, 5);

        // 訂閱序列并處理元素
        flux.subscribe(System.out::println);
    }
}
3.3.2 RxJava示例
import io.reactivex.Observable;

public class RxJavaExample {

    public static void main(String[] args) {
        // 創(chuàng)建一個包含1到5的異步序列
        Observable<Integer> observable = Observable.range(1, 5);

        // 訂閱序列并處理元素
        observable.subscribe(System.out::println);
    }
}

需要注意的是,Reactor和RxJava都提供了豐富的操作符和工具,可以進(jìn)行過濾、轉(zhuǎn)換、組合等操作,以及處理錯誤和異常情況??梢愿鶕?jù)具體需求選擇合適的操作符和方法來處理異步和并發(fā)操作。

3.4 WebFlux

WebFlux是Spring Framework 5引入的一種響應(yīng)式編程模型,用于構(gòu)建高性能、可擴展的Web應(yīng)用程序。它基于Reactor庫,提供了一種非阻塞的、異步的編程方式,可以處理大量并發(fā)請求,同時保持低的資源消耗。

WebFlux的核心是基于事件驅(qū)動的編程模型,通過使用異步非阻塞的方式處理請求和響應(yīng),可以充分利用服務(wù)器資源,提高系統(tǒng)的吞吐量和響應(yīng)速度。它支持多種編程模型,包括函數(shù)式編程和反應(yīng)式流編程,可以根據(jù)實際需求選擇合適的方式進(jìn)行開發(fā)。

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;
import reactor.core.publisher.Mono;

@SpringBootApplication
public class WebFluxExampleApplication {

	public static void main(String[] args) {
		SpringApplication.run(WebFluxExampleApplication.class, args);
	}
}

@RestController
class HelloController {
    @GetMapping("/hello")
    public Mono<String> hello() {
    	return Mono.just("Hello, WebFlux!");
    }
}

總結(jié)

通過本文的介紹,我們了解了在Spring Boot中實現(xiàn)異步調(diào)用的多種方式和技巧。

無論是使用@Async注解實現(xiàn)異步方法,還是使用CompletableFuture來處理異步任務(wù),亦或是使用消息隊列來實現(xiàn)異步消息處理,Spring Boot都提供了豐富的工具和框架來支持異步調(diào)用。

通過合理地運用這些技術(shù),我們可以優(yōu)雅地處理并發(fā)和異步任務(wù),提升系統(tǒng)的性能和可擴展性。


寫在最后

感謝您的支持和鼓勵! ????

如果大家對相關(guān)文章感興趣,可以關(guān)注公眾號"架構(gòu)殿堂",會持續(xù)更新AIGC,系統(tǒng)架構(gòu), 分布式, java, GO, python, 游戲相關(guān) 等系列文章,一系列干貨隨時送達(dá)!

【SpringBoot系列】如何優(yōu)雅地實現(xiàn)異步調(diào)用文章來源地址http://www.zghlxwxcb.cn/news/detail-465810.html

到了這里,關(guān)于【SpringBoot系列】如何優(yōu)雅地實現(xiàn)異步調(diào)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • SpringBoot實現(xiàn)異步調(diào)用的幾種方式

    SpringBoot實現(xiàn)異步調(diào)用的幾種方式

    一、使用 CompletableFuture 實現(xiàn)異步任務(wù) CompletableFuture 是 Java 8 新增的一個異步編程工具,它可以方便地實現(xiàn)異步任務(wù)。使用 CompletableFuture 需要滿足以下條件: 異步任務(wù)的返回值類型必須是 CompletableFuture 類型; 在異步任務(wù)中使用 CompletableFuture.supplyAsync() 或 CompletableFuture.runAsy

    2024年02月08日
    瀏覽(23)
  • 如何在不依賴于Mq的形式下更優(yōu)雅地實現(xiàn)異步任務(wù)處理?。。? decoding=

    如何在不依賴于Mq的形式下更優(yōu)雅地實現(xiàn)異步任務(wù)處理?。?!

    考慮到現(xiàn)有業(yè)務(wù)很多依賴于 MQ的方式進(jìn)行,這種方式需要依賴于MQ,發(fā)送消息到mq和消費mq消息時需要了解mq消息結(jié)構(gòu)進(jìn)行相應(yīng)處理; 對于后續(xù)對同樣的事件做其他處理的人如不能提前了解到已有相應(yīng)消息發(fā)到了mq就得再發(fā)一次消息到mq等。 圖1.1 消息中間件 現(xiàn)需要考慮在不依賴

    2024年02月19日
    瀏覽(19)
  • 互聯(lián)網(wǎng)大廠技術(shù)-HTTP請求-Springboot整合Feign更優(yōu)雅地實現(xiàn)Http服務(wù)調(diào)用

    互聯(lián)網(wǎng)大廠技術(shù)-HTTP請求-Springboot整合Feign更優(yōu)雅地實現(xiàn)Http服務(wù)調(diào)用

    目錄 一、SpringBoot快速整合Feign 1.添加Pom依賴 2.啟動類添加注解 3.引用Feign服務(wù) 二、為請求添加Header的3種方式 1.添加固定header 2.通過接口簽名添加header 3.動態(tài)添加header 三、為請求添加超時配置 1.默認(rèn)超時時間 3.超時異常 4.全局超時配置 5.為單個服務(wù)設(shè)置超時配置 四、為請求配

    2024年02月04日
    瀏覽(21)
  • java 如何快速實現(xiàn)異步調(diào)用方法

    java 如何快速實現(xiàn)異步調(diào)用方法

    在實現(xiàn)異步調(diào)用之前,我們先了解一下,什么是異步編程?什么場景下適用等等情況。 我們都知道,在傳統(tǒng)的同步編程中,當(dāng)一個操作開始執(zhí)行時, 程序會阻塞并等待該操作完成,然后才能繼續(xù)執(zhí)行后續(xù)代碼 。這種阻塞等待的方式可能會導(dǎo)致程序響應(yīng)性能下降,因為在等待

    2024年02月15日
    瀏覽(15)
  • SpringBoot如何優(yōu)雅的實現(xiàn)重試功能

    在有些特定場景,如和第三方對接。 我們調(diào)用接口時需要支持重試功能,第一次調(diào)用沒成功,我們需要等待x秒后再次調(diào)用。 通常會設(shè)置重試次數(shù),避免業(yè)務(wù)。 一般我們會這樣寫 這樣寫本身,沒什么問題。 但是如果多個接口都需要重試的話,代碼就不優(yōu)雅了。 spring系列的

    2024年02月08日
    瀏覽(22)
  • SpringBoot項目如何優(yōu)雅的實現(xiàn)操作日志記錄

    SpringBoot項目如何優(yōu)雅的實現(xiàn)操作日志記錄

    在實際開發(fā)當(dāng)中,對于某些關(guān)鍵業(yè)務(wù),我們通常需要記錄該操作的內(nèi)容,一個操作調(diào)一次記錄方法,每次還得去收集參數(shù)等等,會造成大量代碼重復(fù)。 我們希望代碼中只有業(yè)務(wù)相關(guān)的操作,在項目中使用注解來完成此項功能。 通常就是使用Spring中的AOP特性來實現(xiàn)的,那么在

    2024年01月18日
    瀏覽(23)
  • 并發(fā)編程 | CompletionService - 如何優(yōu)雅地處理批量異步任務(wù)

    上一篇文章中,我們詳細(xì)地介紹了 CompletableFuture,它是一種強大的并發(fā)工具,能幫助我們以聲明式的方式處理異步任務(wù)。雖然 CompletableFuture 很強大,但它并不總是最適合所有場景的解決方案。 在這篇文章中,我們將介紹 Java 的 CompletionService,這是一種能處理 批量異步任務(wù)

    2024年02月15日
    瀏覽(40)
  • 互聯(lián)網(wǎng)大廠技術(shù)-HTTP請求-Springboot整合Feign更優(yōu)雅地實現(xiàn)Http服務(wù)調(diào)用
no suitable HttpMessageConverter found for response type

    互聯(lián)網(wǎng)大廠技術(shù)-HTTP請求-Springboot整合Feign更優(yōu)雅地實現(xiàn)Http服務(wù)調(diào)用 no suitable HttpMessageConverter found for response type

    目錄 一、SpringBoot快速整合Feign 1.添加Pom依賴 2.啟動類添加注解 3.引用Feign服務(wù) 二、為請求添加Header的3種方式 1.添加固定header 2.通過接口簽名添加header 3.動態(tài)添加header 三、為請求添加超時配置 1.默認(rèn)超時時間 3.超時異常 4.全局超時配置 5.為單個服務(wù)設(shè)置超時配置 四、為請求配

    2024年02月11日
    瀏覽(23)
  • 【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驅(qū)動架構(gòu)(MDA)解析,實現(xiàn)異步處理與解耦合!

    【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驅(qū)動架構(gòu)(MDA)解析,實現(xiàn)異步處理與解耦合!

    ???? 歡迎光臨,終于等到你啦 ???? ??我是 蘇澤 ,一位對技術(shù)充滿熱情的探索者和分享者。???? ??持續(xù)更新的專欄 《Spring 狂野之旅:從入門到入魔》 ?? 本專欄帶你從Spring入門到入魔 ? 這是蘇澤的個人主頁可以看到我其他的內(nèi)容哦???? 努力的蘇澤 http://suzee.blog.

    2024年03月10日
    瀏覽(28)
  • springboot @Async 異步調(diào)用接口處理數(shù)據(jù)

    springboot @Async 異步調(diào)用接口處理數(shù)據(jù)

    @Async 異步背景 新增的數(shù)據(jù)需要分發(fā)給下游業(yè)務(wù)系統(tǒng),由于下游業(yè)務(wù)系統(tǒng)狀態(tài)未知,所以需要異步發(fā)送數(shù)據(jù)給下游業(yè)務(wù)系統(tǒng)。 系統(tǒng)生效按鈕---controller新增--異步調(diào)用servcie---數(shù)據(jù)集成 在springboot框架中實現(xiàn)步驟 首先在啟動類上加上 @EnableAsync 注解開啟項目的異步調(diào)用功能,其次

    2024年02月16日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包