Spring Cloud Stream的函式式和響應式Reactive程式設計特點 - spring.io
Spring Cloud Stream(SCSt)的函式式和反應式Reactive程式設計帶來更少的程式碼、更少的配置。不過,最重要的是,您的程式碼是完全分離的,並且與SCSt的內部結構無關。
雖然下面描述的所有功能都是SCSt的依賴項Spring Cloud Function(SCF)的functional,但是在理解SCSt上下文中功能的附加含義時,您必須意識到某些細微差別。
供應商,函式和消費者
型別Supplier, Function, or Consumer的任何bean或可以對映到它們的任何Bean都可以被SCST視為一個訊息處理程式(Function或 Consumer),或者被視為一個訊息源(Supplier),根據使用的函式策略型別,使用<function-name>-<in/out>-<index>命名約定自動生成輸入和輸出繫結。
看下面案例:
@SpringBootApplication public class SampleApplication { @Bean public Function<String, String> uppercase() { return value -> value.toUpperCase(); } } |
這裡的函式被視為一個訊息處理程式,該訊息處理程式消費來自繫結的uppercase-in-0,結果傳送到繫結的uppercase-out-0。其餘部分可以像以前一樣使用。例如
--spring.cloud.stream.bindings.uppercase-in-0.content-type=text/plain。
單擊此處瞭解更多詳細資訊和配置選項。
命令式或反應式
函式可以是命令式或反應性。命令式函式在每個單獨的事件上觸發,而反應式函式僅觸發一次,將引用傳遞給Project Reactor提供的整個事件流抽象(例如Flux和Mono)。
命令式:
@SpringBootApplication public class SampleApplication { @Bean public Function<String, String> uppercase() { return value -> value.toUpperCase(); } } |
反應性:
@SpringBootApplication public class SampleApplication { @Bean public Function<Flux<String>, Flux<String>> uppercase() { return flux -> flux.map(value -> value.toUpperCase()); } } |
除了為您提供不同的(單例)程式設計樣式來處理事件之外,反應式程式設計還為某些用例增加了附加值,否則實現起來將非常複雜。儘管本文討論這些用例或響應模式超出了討論範圍,但仍然值得一提的是狀態管理用例(例如視窗,聚合和分組)以及拆分流或用例的情況。合併多個流,這將在下一節中討論。
關於反應式功能的繫結和命名規則,它們與上一節中說明的相同。
注意:雖然前面的示例僅Function作為示例,但相同的規則適用於Supplier和Consumer。使用者指南的Spring Cloud Function支援部分以及Reactor文件提供了更多詳細資訊。
函式性
有時需要對資料流進行分類和組織。例如,考慮一個經典的大資料用例,即處理包含“訂單”和“發票”的無組織資料,並且您希望每個都進入一個單獨的資料儲存中。在這裡發揮功能支援(具有多個輸入和輸出的功能)的支援。
讓我們看一個這樣的函式的示例(此處提供完整的實現細節):
@Bean public Function<Flux<Integer>, Tuple2<Flux<String>, Flux<String>>> organise() { return flux -> ...; } |
鑑於Project Reactor是SCF的核心依賴項,我們將使用其Tuple庫。Tuple向我們傳達基數cardinality和型別資訊而給我們帶來了獨特的優勢。兩者對於SCSt而言都是極其重要的。基數讓我們知道需要建立多少個輸入和輸出繫結並將其繫結到函式的相應輸入和輸出。知道型別資訊可確保正確的型別轉換。
同樣,這是繫結名稱命名約定的“索引”部分起作用的地方,因為在此函式中,兩個輸出繫結名稱為organise-out-0和organise-out-1。
重要提示:目前,僅針對Function<TupleN<Flux<?>...>, TupleN<Flux<?>...>>以複雜事件處理為中心的反應性函式()支援functional統一性,在複雜事件處理中,對事件融合的評估和計算通常需要檢視事件流,而不是單個事件。
有關最新資訊,請閱讀使用者指南中的“ 具有多個輸入和輸出引數的函式”部分
相關文章
- 什麼是函式響應式程式設計(Functional Reactive Programming:FRP)函式程式設計FunctionReactFRP
- Spring響應式Reactive程式設計的10個陷阱 -Jeroen RosenbergSpringReact程式設計ROS
- Java9第四篇-Reactive Stream API響應式程式設計JavaReactAPI程式設計
- Spring 5與Spring cloud的響應式程式設計之旅SpringCloud程式設計
- 函式響應式程式設計與RxSwift函式程式設計Swift
- 揚帆起航:從指令式程式設計到函式響應式程式設計程式設計函式
- [譯]函式式響應程式設計入門指南函式程式設計
- iOS 函式響應式程式設計 (ReactiveCocoa)– 前篇iOS函式程式設計React
- 響應式程式設計與響應式系統程式設計
- Reactive Spring實戰 -- 響應式Redis互動ReactSpringRedis
- Reactive Spring實戰 -- 響應式Kafka互動ReactSpringKafka
- Reactive Spring實戰 -- 響應式MySql互動ReactSpringMySql
- Spring Boot 中的響應式程式設計和 WebFlux 入門Spring Boot程式設計WebUX
- Vue3中的Ref與Reactive:深入理解響應式程式設計VueReact程式設計
- 使用Reactor響應式程式設計React程式設計
- 響應式程式設計RxJava (一)程式設計RxJava
- 響應式程式設計總覽程式設計
- 響應式程式設計一覽程式設計
- 《響應式程式設計(Reactive Programming)介紹》文章總結與案例分析程式設計React
- Spring Cloud Stream事件路由 - spring.ioSpringCloud事件路由
- [翻譯] 響應式程式設計(Reactive Programming) - 流(Streams) - BLoC - 實際應用案例程式設計ReactBloC
- JAVA中函式的特點Java函式
- JS 命令式 宣告式 函式式 程式設計?JS函式程式設計
- 函數語言程式設計 - 實現響應式框架函數程式設計框架
- # vue3 ref 和 reactive 函式VueReact函式
- 響應式Web設計Web
- 函式式思維和函數語言程式設計函式函數程式設計
- vue3函式setUp和reactive函式詳細講解Vue函式React
- 響應式程式設計入門(RxJava)程式設計RxJava
- 響應式程式設計庫RxJava初探程式設計RxJava
- Backpressure in Reactive Systems 響應式系統的反壓React
- Spring Boot 2 (十):Spring Boot 中的響應式程式設計和 WebFlux 入門Spring Boot程式設計WebUX
- 函式程式設計函式程式設計
- 基於RxJava的函式式Reactive Web框架:datamillRxJava函式ReactWeb框架
- 對響應式程式設計的懷疑 - lukaseder程式設計
- spring AOP 程式設計式應用Spring程式設計
- Stream聚合函式函式
- RxDart——Dart和Flutter中的響應式程式設計入門DartFlutter程式設計