首頁 > 軟體

Reactive Programming入門概念詳解

2022-09-30 14:00:29

正文

為了應對高並行環境下的伺服器端程式設計,xx提出了一個實現非同步程式設計的方案 -Reactive Programming,中文名稱反應式程式設計。反應式程式設計(reactive programming)並不是一個新的概念,也不是一個新的技術,很早之前就被提出來了。

先從幾個概念入門說起:

  • Reactive Programming
  • Reactive Streams
  • Reactor
  • Webflux

Reactive Programming

反應式程式設計 (reactive programming) 是一種基於資料流 (data stream) 和 變化傳遞 (propagation of change) 的宣告式 (declarative) 的程式設計正規化。

響應式程式設計使用三個核心概念:資料流,變化傳遞和非同步觀察。

換句話說:使用非同步資料流進行程式設計,這意味著可以在程式語言中很方便地表達靜態或動態的資料流,而相關的計算模型會自動將變化的值通過資料流進行傳播。反應式程式設計提高了程式碼的抽象級別,可以只關注定義了業務邏輯的那些相互依賴的事件。

Reactive Streams

Reactive Streams :The purpose of Reactive Streams is to provide a standard for asynchronous stream processing with non-blocking backpressure。

Reactive Streams 的目的是為具有非阻塞背壓的非同步流處理提供標準。

對於Java程式設計師,Reactive Streams是一個API。Reactive Streams為我們提供了Java中的Reactive Programming的通用API。

Reactive Streams API的範圍是找到一組最小的介面,方法和協定,這些介面,方法和協定將描述必要的操作和實體,從而實現具有非阻塞背壓的非同步資料流。

Reactive Streams API中如下四個介面:(後面文章詳細)

  • Publisher 釋出者(生產者)
public interface Publisher<T> {    
    public void subscribe(Subscriber<? super T> s);
}
  • Subscriber訂閱者(消費者)
public interface Subscriber<T> {    
    public void onSubscribe(Subscription s);    
    public void onNext(T t);    
    public void onError(Throwable t);    
    public void onComplete();
}
  • Subscription 訂閱
public interface Subscription {   
    public void request(long n);    
    public void cancel();
}
  • Processor 處理者
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
}

Spring Reactor

Reactor 是第四代響應式庫,基於Reactive Streams規範,用於在 JVM 上構建非阻塞應用程式。是Spring提供的非阻塞式響應式程式設計框架,實現了Reactive Streams規範而已

  • reactor-core: Reactor 完全無阻塞,並提供高效的管理,它直接與Java的函數式API,CompletableFuture,Stream配合使用
    • [0|1| N]序列:Reactore提供了兩個響應式和可組合的API,Flux 和 Mono。

Flux 表示的是包含 0 到 N 個元素的非同步序列。在該序列中可以包含三種不同型別的訊息通知:正常的包含元素的訊息、序列結束的訊息和序列出錯的訊息。當訊息通知產生時,訂閱者中對應的方法 onNext(), onComplete()和 onError()會被呼叫。Mono 表示的是包含 0 或者 1 個元素的非同步序列。該序列中同樣可以包含與 Flux 相同的三種型別的訊息通知。Flux 和 Mono 之間可以進行轉換。對一個 Flux 序列進行計數操作,得到的結果是一個 Mono物件。把兩個 Mono 序列合併在一起,得到的是一個 Flux 物件。

  • Non-Blocking IO: Reactor 為HTTP(包括websocket),TCP和UDP提供背壓就緒的網路引擎。
  • webflux

Spring 產品組合提供了兩個並行堆疊。 一種是基於帶有 Spring MVC 和 Spring Data 結構的 Servlet API。 另一個是完全反應式堆疊,它利用了 Spring WebFlux 和 Spring Data 的反應式儲存庫。 如下技術棧:Spring官方提供

資料庫:以一種反應的方式存取和處理資料是非常重要的。MongoDB、Redis和Cassandra都有原生的Spring資料響應支援。許多關聯式資料庫(Postgres、Microsoft SQL Server、MySQL、H2和GoogleSpanner)通過R2DBC提供了反應性支援。

在訊息傳遞的世界中,Spring Cloud Stream還支援對RabbitMQ和Kafka等平臺的反應性存取。

Reactive Streams、Reactor和WebFlux 區別?

上面介紹了反應式程式設計的一些概念。三者的關係:

  • Reactive Streams 是一套反應式程式設計標準和規範;
  • Reactor 是基於 Reactive Streams 一套反應式程式設計框架;
  • WebFlux 以 Reactor 為基礎,實現 Web 領域的反應式程式設計框架。

參考:

以上就是Reactive Programming入門概念詳解的詳細內容,更多關於Reactive Programming入門的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com