使用Project Reactor進行反應式資料流 - spring.io
Spring團隊開發了Project Reactor,以支援Spring生態系統中的反應式工作。您不需要Spring即可使用Project Reactor,但是Spring生態系統中的所有反應式API均基於Project Reactor來提供資料流選項。
讓我們看一個示例,該示例說明Project Reactor如何簡化不同資料流源和接收器的組合工作,並消除所有手動執行緒化程式碼。
您需要以下依賴項:
org.springframework.boot:spring-boot-starter-webflux
下面示例說明了在給定不同資料型別的情況下標準化處理的難易程度。在此示例中,我們比較一下Java 8的java.util.Stream<T?>和a CompletableFuture<T>,在大多數反應式應用程式中,您不必從事將非反應性型別轉換為反應性型別(如Flux<T>或Mono<T>)的業務。這些例子將更加直接。本示例假定您有兩個資料來源,需要將它們組合在一起。
package bootiful.rx; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.concurrent.CompletableFuture; import java.util.stream.Stream; @SpringBootApplication public class BootifulApplication { CompletableFuture<String> returnCompletableFuture(int counter) { return CompletableFuture.supplyAsync(() -> { var start = System.currentTimeMillis(); try { Thread.sleep((long) (Math.max((Math.random() * 10), 5) * 1000)); } catch (InterruptedException e) { // threads smdh } var stop = System.currentTimeMillis(); var delta = stop - start; return "(" + Thread.currentThread().getName() + ") Hello, #" + counter + "! (after " + delta + " ms.)"; }); } Stream<Integer> returnStream() { return Stream.iterate(0, integer -> integer + 1); } @Bean ApplicationListener<ApplicationReadyEvent> begin() { return event -> { Flux<String> count = Flux// .fromStream(this.returnStream()) // .take(10) // .flatMap(c -> Flux.zip(Mono.just(c), Mono.fromCompletionStage(this.returnCompletableFuture(c)))) // .map(tuple -> tuple.getT2() + " #" + tuple.getT1()); // count.subscribe(System.out::println); }; } public static void main(String[] args) { SpringApplication.run(BootifulApplication.class, args); } } |
相關文章
- 聊聊Spring Reactor反應式程式設計SpringReact程式設計
- Java反應式框架Reactor中的Mono和FluxJava框架ReactMonoUX
- 使用Reactor響應式程式設計React程式設計
- 使用Project進行專案管理Project專案管理
- WebClient: Spring的新的HTTP反應式客戶端 - spring.ioWebclientSpringHTTP客戶端
- 解構反應式程式設計——Java8,RxJava,Reactor之比較程式設計RxJavaReact
- 使用Apache Flink和Apache Ignit進行資料流分析Apache
- 如何使用傳統資料庫思維進行實時資料流分析? – thenewstack資料庫
- 設計模式 in real world - 反應器模式(Reactor Pattern)設計模式React
- 使用反應式關聯式資料庫連線規範R2DBC操作MySQL資料庫資料庫MySql
- 使用BootStrap進行響應式佈局案例boot
- [譯] 使用 NumPy 和 Pandas 進行 Python 式資料清理Python
- 使用正規表示式進行xml資料驗證(轉)XML
- 使用pandas進行資料分析
- 高效能網路程式設計-反應堆模型(reactor)程式設計模型React
- 使用Speedment實現並行資料庫流並行資料庫
- 使用AndroidKiller進行APK反編譯AndroidAPK編譯
- vue3 - 使用reactive定義響應式資料進行資料修改賦值時,資料更新但檢視不更新VueReact賦值
- 使用Mysql工具進行資料清洗MySql
- 使用RMAN進行資料遷移
- 《反應式應用開發》之“什麼是反應式應用”
- 響應式程式設計簡介之:Reactor程式設計React
- Django中views資料查詢使用locals()函式進行優化DjangoView函式優化
- 使用Java 9 Flow進行響應式程式設計Java程式設計
- 使用 Dynatrace 對 Node.js 應用的效能資料進行分析Node.js
- 如何使用Java串列埠進行資料通訊及應用案例Java串列埠
- Elasticsearch 使用 NFS 進行資料備份ElasticsearchNFS
- 使用RMAN進行資料庫複製資料庫
- 使用ETL進行資料接入的方式
- Fuzz:一個反“大資料”的流媒體公司大資料
- 漸進式web應用開發---promise式資料庫(五)WebPromise資料庫
- [Tools] 使用 Charles 對 Android 應用進行 HTTPS 資料抓包AndroidHTTP
- 如何有效使用Project(2)——進度計劃的執行與監控Project
- ASP.NET Web API 應用教程(一) ——資料流使用ASP.NETWebAPI
- ASP.NET Web API 應用教程(一) ——資料流使用ASP.NETWebAPI
- 使用RSocket進行服務通訊的反應性服務簡介 - Rafał Kowalski
- 使用反應式程式設計替換Java自動資源管理 - Arvind程式設計Java
- 使用KepServerEx進行資料模擬Server