鍍金池/ 教程/ Java/ 創(chuàng)建非阻塞服務(wù)
異步 TCP、UDP 及 HTTP
微批處理
編解碼器與緩沖區(qū)
組合多個(gè)服務(wù)調(diào)用
環(huán)境與調(diào)度者
環(huán)形緩沖區(qū)處理者
Stream 數(shù)據(jù)持久化
函數(shù)式功能
reactor-stream
概述
背壓和溢出
核心處理者
數(shù)據(jù)路由
響應(yīng)式數(shù)據(jù)流
什么是 Reactor?
支持響應(yīng)式背壓
微服務(wù)
組合操作
使用 Stream 和 Promise(約定) 協(xié)調(diào)任務(wù)
Reactor 介紹
分區(qū)
發(fā)布訂閱模型
錯(cuò)誤處理
分析
核心概述
創(chuàng)建非阻塞服務(wù)
使用緩沖區(qū)
請(qǐng)求應(yīng)答模式
關(guān)于該項(xiàng)目
理解線程模型
reactor-核心
響應(yīng)式擴(kuò)展
Streams 的基礎(chǔ)知識(shí)
構(gòu)架總覽
Rx 之外的其它 API
注冊(cè)表
使用窗口
使用前提

創(chuàng)建非阻塞服務(wù)

首先要做的就是隔離微服務(wù)的訪問(wèn)?,F(xiàn)在,我們將不再返回 T 或 Future,取而代之的將是 Publisher 以及特定的 Stream 或 Promise。立竿見(jiàn)影的好處就是我們可以不必費(fèi)心考慮錯(cuò)誤處理或是線程(僅是現(xiàn)在)了:錯(cuò)誤將在 onError 調(diào)用(非冒泡)中傳遞,而線程可以在后續(xù)過(guò)程中使用類似 dispatchOn 的方法進(jìn)行調(diào)整。另一個(gè)好處就是它能讓我們的代碼更加實(shí)用。Java 8 Lambdas 也可以正常使用。我們的目標(biāo)是減少控制語(yǔ)句中的括號(hào)噪音(if、for、while 等),并限制上下文中分享的需求。我們的最終設(shè)計(jì)目標(biāo)就是鼓勵(lì)在大型數(shù)據(jù)集中流式輪詢:函數(shù)將適用于序列,一個(gè)一個(gè)返回結(jié)果,避免循環(huán)重復(fù)。

我們提倡使用實(shí)現(xiàn)的部件且非 Publisher 在編譯時(shí)訪問(wèn)所有的 Reactor Stream API,除非你希望你的 API 隱藏(圖書館的開發(fā)者可能有此需求)。`Streams.wrap(Publisher) 將會(huì)使盡解數(shù)將這種通用的返回類型轉(zhuǎn)化成一個(gè)合適的 Stream。

表 15,進(jìn)化成響應(yīng)型微服務(wù),第一部分,UserService 中的錯(cuò)誤隔離和非阻塞操作

http://wiki.jikexueyuan.com/project/reactor-2.0/images/35.png" alt="" />

結(jié)果

  • 所有的查詢方法 時(shí):
    • 不再有異常拋出,異常都在管道中傳遞。
    • 不再有控制邏輯,我們使用例如 map 或 filter 這樣的預(yù)定義操作。
    • 只返回發(fā)布者(Stream 或 Promise)。
    • 通過(guò)超時(shí)機(jī)制限制阻塞的查詢(之后可以進(jìn)行重試或者回退等操作)。
    • 在訂閱時(shí)使用一個(gè)分配好的 workDispatcher。
  • get(name): 時(shí):
    • 使用類型定義的單一數(shù)據(jù)發(fā)布者,或是Promise。
    • 在訂閱時(shí),調(diào)用task回調(diào)函數(shù)。
  • allFriends(user): 時(shí):
    • 在 onSubscribe 線程中使用 defer() 惰性的調(diào)用數(shù)據(jù)庫(kù)查詢。
    • 現(xiàn)在還沒(méi)有背壓策略,我們?cè)谝粋€(gè)阻塞(但異步)的調(diào)用中讀取所有的結(jié)果。
    • 在 FlatMap 中,我們將返回的列表轉(zhuǎn)化為一個(gè)數(shù)據(jù)流。
    • 在一個(gè)異步調(diào)度器中分派數(shù)據(jù),這樣下游處理不會(huì)影響讀取操作。
  • filteredFind(name): 時(shí):
    • 我們使用 stream() 將第一個(gè) get 操作獲取到的 Promise 轉(zhuǎn)化為 Stream。
    • 如果用戶可用,我們只需要調(diào)用 allFriends() sub-stream。
    • 返回的 Stream 將在第一次 allFriends() 信號(hào)發(fā)出后恢復(fù)。
上一篇:reactor-stream下一篇:Reactor 介紹