Netflix在2012年開始意識到他們的架構(gòu)要滿足他們龐大的用戶群體已經(jīng)變得步履維艱。因此他們決定重新設(shè)計架構(gòu)來減少REST調(diào)用的次數(shù)。取代幾十次的REST調(diào)用,而是讓客戶端自己處理需要的數(shù)據(jù),他們決定基于客戶端需求創(chuàng)建一個專門優(yōu)化過的REST調(diào)用。
為了實現(xiàn)這一目標,他們決定嘗試響應(yīng)式,開始將.NET Rx遷移到JVM上面。他們不想只基于Java語言;而是整個JVM,從而有可能為市場上的每一種基于JVM的語言:如Java、Clojure、Groovy、Scala等等提供一種新的工具。
2013年二月份,Ben Christensen 和 Jafar Husain發(fā)在Netflix技術(shù)博客的一篇文章第一次向世界展示了RxJava。
主要特點有:
正如.NET,RxJava Observable 是push 迭代的等價體,即pull。pull方法是阻塞并等待的方法:消費者從源頭pull值,并阻塞線程直到生產(chǎn)者提供新的值。
push方法作用于訂閱和響應(yīng):消費者訂閱新值的發(fā)射,當它們可用時生產(chǎn)者push這些新值并通知消費者。在這一點上,消費者消費了它們。push方法很明顯更靈活,因為從邏輯和實踐的觀點來看,開發(fā)者只需忽略他需要的數(shù)據(jù)是來自同步還是異步;他的代碼將仍然起作用。