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