Reactive‐Stream - CCH0124/spring-sandbox GitHub Wiki

是 JVM 面向流的標準和規範

  1. 處理可能無限數量的元素
  2. 有序
  3. 在組件之間異步(互不等待)傳遞元素
  4. 強制性非阻塞背壓模式

https://www.e4developer.com/2018/04/28/springs-webflux-reactor-parallelism-and-backpressure/

正壓的話,基本上是沒有 BUFFER 該層。

Reactive Stream 基於本地的訊息系統設計,如下

FROM https://www.reactivemanifesto.org/

API Components

在 JAVA 9 提供以下的 API

  • Publisher 發布者;產生數據流
  • Subscriber 訂閱者;消費數據流
  • Subscription 訂閱關係
    • 訂閱關係是發佈者和訂閱者之間的關鍵介面。訂閱者透過訂閱來表示對發佈者產生數據的興趣。訂閱者可以請求一定數量的元素,也可取消訂閱
  • Processor 處理器
    • 是同時實現了發佈者和訂閱者介面的組件。他可以接收來自一個發佈者的數據進行處理,並將結果發布給下一個訂閱者。處理器在 Reactor 中充當中間橋梁,代表下一個處理階段,允許在數據流中進行轉換、過濾等操作。

編程的方式有以下

  • 命令式 全自定義
  • 響應式/聲明式 宣告流,說要幹嘛,最後結果是什麼

範例

響應式編程

  1. 底層: 基於數據緩衝隊列 + 訊息驅動模型 + 異步回調機制
  2. 編碼: 流式編程 + 鏈式調用 + 聲明式 API
  3. 效果: 高吞吐 + 占用少量資源 + 訊息實時處理