摘要:題外話服務(wù)可用性是指,服務(wù)提供者需要保證服務(wù)在任何時間情況下正確地提供。然后服務(wù)提供者,會將驗證碼發(fā)送到用戶手機。
Rx* (Observable.catch)方法 方法定義
Rx.Observable.catch(...args)
作用序列中可觀察對象因為異常而被終止后,繼續(xù)訂閱序列中的其他可觀察對象。
參數(shù)args (Array | arguments): 可觀察對象序列。
返回值(Observable): 可觀察對象序列中能夠正確終止,不拋出異常的第一個可觀察對象。
寶珠圖 實例var obs1 = Rx.Observable.throw(new Error("error")); var obs2 = Rx.Observable.return(42); var source = Rx.Observable.catch(obs1, obs2); var subscription = source.subscribe( x => console.log(`onNext: ${x}`), e => console.log(`onError: ${e}`), () => console.log("onCompleted")); // onNext: 42
在訂閱時, obs1拋出錯誤后,程序繼續(xù)執(zhí)行,轉(zhuǎn)而輸出沒有異常的obs2,并輸出obs2發(fā)射的值42。點擊進入在線演示。
題外話服務(wù)可用性是指,服務(wù)提供者需要保證服務(wù)在任何時間、情況下正確地提供。比如聯(lián)網(wǎng)的銀行系統(tǒng),用戶在各個ATM終端進行提取現(xiàn)金等操作后,數(shù)據(jù)都會被及時同步和備份。當(dāng)不可抗因素發(fā)生時,數(shù)據(jù)可以被盡快的通過備份恢復(fù)。通常這些解決方案被稱為災(zāi)備處理。
使用云服務(wù),例如Ucloud的Redis服務(wù),可以在同一個服務(wù)上看到兩個不同地址訪問地址,文檔描述如下:
每個云內(nèi)存存儲實例都會提供兩個IP進行訪問。
這兩個IP都可以對云內(nèi)存存儲實例進行訪問,分布在不同的接入服務(wù)上,其作用在于,當(dāng)其中一個IP無法正常訪問時,仍有另一個IP可用,不會完全中止服務(wù)。
因此,應(yīng)用程序可以增加一個容災(zāi)切換的邏輯處理:將訪問的IP列表設(shè)置好,默認(rèn)訪問其中的一個IP,當(dāng)該IP無法訪問時,自動切換到另一個IP繼續(xù)業(yè)務(wù)。
文檔中提到了增強服務(wù)可用性的線索:總是提供一組相同的服務(wù)而不是一個服務(wù),或者至少是相似的服務(wù),服務(wù)調(diào)用后可以完成相同的業(yè)務(wù)邏輯。
這個策略也是負(fù)載均衡的基礎(chǔ),可以緩解單個服務(wù)提供者的壓力,從用戶角度看,又感知不到服務(wù)的差異性:比如 多個HTTP服務(wù) 、_讀寫分離的數(shù)據(jù)庫_。
文末,舉一個實例:假設(shè)你需要做一個APP,APP中用戶在通過手機驗證碼驗證后,才能登錄賬戶。
許多第三方服務(wù)提供商,都提供手機驗證服務(wù),比如_LeanCloud_,調(diào)用者像服務(wù)提供方發(fā)送POST請求,請求的body為用戶手機號碼。然后服務(wù)提供者,會將驗證碼發(fā)送到用戶手機。用戶在收到驗證碼后,通過表單,輸入驗證碼,提交后,調(diào)用者再次向服務(wù)提供商發(fā)起POST請求,請求的body為用戶輸入的驗證碼然后等待服務(wù)提供商響應(yīng)。
當(dāng)然,某些情況下,服務(wù)提供商可能自己掛了,或者是不支持向某個號碼所屬的運營商提供服務(wù);還有些情況下,用戶的號碼可能在某個服務(wù)提供商的黑名單中。比如:你的一個用戶是 經(jīng)常寫競品分析的產(chǎn)品經(jīng)理 ,可能也許大概你的號碼就在某個服務(wù)提供商的黑名單中。
我們往往要同時接入多個服務(wù)提供商的短信驗證服務(wù),保證用戶能夠正常通過我們的注冊(登錄)流程:
回到catch()函數(shù),結(jié)合定義我們可以把一個提供商作為主要服務(wù)提供者,如果其不能提供服務(wù)(調(diào)用失敗),我們可以選擇第二家作為候選:
var service1 = Observable.create("服務(wù)提供商#1"); var service2 = Observable.create("服務(wù)提供商#1"); Observable.catch(service1, service2).subscribe({ ()=>console.log("succeed"), ()=>console.log("所有驗證服務(wù)均不可用") ()=>console.log("completed") })
這樣,用戶能夠收到驗證碼并成功驗證的幾率大大增加。
劇終
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/78502.html
摘要:選擇后,僅有聯(lián)通的可觀察對象會被觀察到。從外部看,所有訂閱者僅能觀測到這個聯(lián)通了支流。,其中表示輸入流,是操作符,是最后的輸出流。截圖驗證一下當(dāng)一個流被聯(lián)通后,其他的流腫么辦先記住結(jié)論未被選擇的流將被調(diào)用方法,也就是說,他們被終止了。 起因 在SegmentFault里發(fā)布過一篇RxJS的簡明教程,很多人反饋對這個主題很是很感興趣,詳見RxJS簡明教程。 Rx 是一種編程的思維,而不是...
摘要:任何程序設(shè)計語言在講解遞歸特性時,基本都會舉漢諾塔斐波拉契數(shù)列的例子。沒錯,請你對比一下斐波拉契數(shù)列和定義的相似之處遞歸完成后產(chǎn)生值的過程就是的過程。 Rx*(Observable.combineLatest)方法 方法定義 Rx.Observable.combineLatest(...args, [resultSelector]) 作用 通過處理函數(shù)總是將指定的可觀察對象序列中最新發(fā)...
摘要:當(dāng)無法匹配時,該對象被默認(rèn)返回。如果沒有明確指定,將返回附加了指定的對象。返回值返回值為經(jīng)過選擇后的可觀察對象。題外話鍵值對,可以對值進行命名。鍵值對是對象的組成部分,鍵名可以方便進行查找和比較操作。 Rx* (Observable.case)方法 方法定義 [Rx.Observable.case(selector, sources, [elseSource|scheduler])] ...
摘要:接下來,我們將實現(xiàn)一個真實的應(yīng)用程序,顯示幾乎實時發(fā)生的地震。得到的由表示,其中包含和的合并元素。如果不同同時傳出元素,合并序列中這些元素的順序是隨機的。是操作序列的強大操作符。但是的方法仍在運行,表明取消并不會取消關(guān)聯(lián)的。 Rxjs 響應(yīng)式編程-第一章:響應(yīng)式Rxjs 響應(yīng)式編程-第二章:序列的深入研究Rxjs 響應(yīng)式編程-第三章: 構(gòu)建并發(fā)程序Rxjs 響應(yīng)式編程-第四章 構(gòu)建完整...
摘要:插件開發(fā)前端掘金作者原文地址譯者插件是為應(yīng)用添加全局功能的一種強大而且簡單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內(nèi)優(yōu)雅的實現(xiàn)文件分片斷點續(xù)傳。 Vue.js 插件開發(fā) - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應(yīng)用添加全局功能的一種強大而且簡單的方式。插....
閱讀 3657·2021-11-24 10:19
閱讀 3803·2021-09-30 09:47
閱讀 1371·2019-08-30 15:56
閱讀 859·2019-08-29 15:11
閱讀 965·2019-08-29 13:43
閱讀 3645·2019-08-28 18:25
閱讀 2222·2019-08-26 13:27
閱讀 1492·2019-08-26 11:44