



全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
傳智播客專注于Java、.Net和Php、網(wǎng)頁平面設(shè)計(jì)工程師的培訓(xùn)第1章 Spring 5 響應(yīng)式編程近年來,響應(yīng)式編程在開發(fā)者社區(qū)和客戶中很受歡迎,由于其以聲明的方式構(gòu)建應(yīng)用程序的能力,而不是強(qiáng)制,形成更加敏感和有彈性的應(yīng)用。Spring 5 將反應(yīng)系統(tǒng)納入其核心框架的事實(shí)已經(jīng)顯示出向聲明式編程的范式轉(zhuǎn)變。響應(yīng)式編程管理數(shù)據(jù)生產(chǎn)者和消費(fèi)者之間的異步數(shù)據(jù)流,它們需要以流暢的方式對(duì)數(shù)據(jù)進(jìn)行響應(yīng)。所以,響應(yīng)式編程都是異步和事件驅(qū)動(dòng)的流暢應(yīng)用程序,需要少量的線程進(jìn)行縮放。響應(yīng)式編程很難構(gòu)建基于線程的架構(gòu),由于在基于共享可變狀態(tài)、線程和鎖的應(yīng)用程序擴(kuò)展過程中涉及到高度復(fù)雜性。在響應(yīng)式編程的上下文中,“在流中有數(shù)據(jù)時(shí),所有事物都是流并以流暢方式行為?!?.1 為什么是響應(yīng)式編程高層次的抽象與響應(yīng)式編程導(dǎo)致了代碼可讀性的提高,因此開發(fā)人員可以主要關(guān)注定義業(yè)務(wù)邏輯的事件的相互依存性。在高度并發(fā)的環(huán)境中,響應(yīng)模式自然地適合于消息處理,這是一個(gè)常見的企業(yè)用例。由于執(zhí)行反壓力的特性,響應(yīng)式方法最適合控制生產(chǎn)者和消費(fèi)者之間的流量,這將有助于避免內(nèi)存不足。對(duì)于一個(gè)或幾個(gè)線程,IO綁定任務(wù)可以通過異步和非阻塞方式執(zhí)行,而且不阻塞當(dāng)前線程。在高交互和實(shí)時(shí)應(yīng)用程序或任何操作/事件時(shí),都可能觸發(fā)多個(gè)連接子系統(tǒng)的通知,在這種情況下響應(yīng)式編程可以更有效的進(jìn)行管理。1.2 用于響應(yīng)式編程實(shí)現(xiàn)的理想案例大量的交易處理服務(wù),如銀行部門。大型在線購物應(yīng)用程序的通知服務(wù),如亞馬遜。股票價(jià)格同時(shí)變動(dòng)的股票交易業(yè)務(wù)。1.3 響應(yīng)流 (Reactive Streams)“響應(yīng)流”定義一個(gè) API 規(guī)范,其中包含一組最小的接口,這些接口公開了定義非阻塞反壓力的數(shù)據(jù)流的操作和實(shí)體的方法。隨著反壓力的引入,響應(yīng)流允許用戶控制來自出版商的數(shù)據(jù)交換速率。響應(yīng)流 API java.util.concurrent.flow 已正式成為 java 9 的一部分。響應(yīng)流主要用作互操作層。1.4 Spring 5 提供的響應(yīng)式編程Spring-Web-Reactive 模塊和 Spring MVC 都支持相同的 Controller 編程,但 Spring-Web-Reactive 是在 Reactive 和非阻塞引擎上執(zhí)行的。Spring-Web-Reactive 模塊和 Spring MVC 共享許多通用的算法,但 Spring-Web-Reactive 模塊已經(jīng)重新定義了許多 Spring MVC 契約,例如 HandlerMapping和HandlerAdapter,以使它們變得異步和非阻塞,以及啟用響應(yīng)式 HTTP 請(qǐng)求和響應(yīng)(以 RouterFunction 和 HandlerFunction 的形式)。除了現(xiàn)有的 RestTemplate 外,新的響應(yīng)式 WebClient 也在 Spring 5 中引入。支持響應(yīng)式編程的 HTTP 客戶端(例如 Reactor、Netty、Undertow)已經(jīng)采用了一系列響應(yīng)式的 ClientHttpRequest 和 ClientHttpResponse 抽象,它們將請(qǐng)求和響應(yīng)體作為 Flux 公開,并且在讀寫端提供全面的背壓支持。Spring 5 Framework 引入了Reactor,作為 Reactive Streams 規(guī)范的實(shí)現(xiàn)。Reactor 是用于在 JVM 上構(gòu)建非阻塞應(yīng)用程序的下一代 Reactive 庫。Reactor 擴(kuò)展了基本的 Reactive Streams Publisher 契約,并定義了 Flux 和 Mono API 類型,分別為 0.N 和 0.1 的數(shù)據(jù)序列提供聲明性操作。Spring Web Reactive 使用 Servlet 3.1 提供了非阻塞 I/O,并運(yùn)行在 Servlet 3.1 容器上。Spring WebFlux 提供了兩種編程模型可供選擇。注解式控制器:這些與 Spring MVC 相同,在使用一些 Spring-Web 模塊提供的附加注解的情況下。Spring MVC 和 WebFlux 控制器都支持 Reactive 返回類型。另外,WebFlux 還支持 Reactive RequestBody 參數(shù)。函數(shù)式編程模型:基于 lambda 的輕量級(jí)小型庫,用于給出路由和處理請(qǐng)求的實(shí)用程序。1.5 Spring Web Reactive vs. Spring Web MVCSpring 5 包含了 Spring Web Reactive(在 spring-web-reactive 模塊下)和 Spring Web MVC(在 spring-webmvc 模塊下)。雖然 Spring Web Reactive 和 Spring Web MVC 模塊共享了很多算法,但是由于 Spring Web Reactive 能夠在響應(yīng)式的非阻塞 Reactive Streams HTTP 適配器層上運(yùn)行,因此它們之間不共享代碼。Spring MVC 執(zhí)行需要 Servlet 容器,而 Spring Web Reactive 也可以在非 Servlet 運(yùn)行時(shí)上運(yùn)行,比如在 Netty 和 Undertow 上運(yùn)行。如果對(duì)具有輕量級(jí)、函數(shù)式的 Web 框架的非阻塞 Web 棧的必要要求,并與 Java 8 lambda 或 Kotlin一起使用,則應(yīng)該考慮從 Spring MVC 應(yīng)用程序切換到 Spring Web Reactive。1.6 響應(yīng)式編程的基本結(jié)構(gòu)這是一個(gè)2.0.0M5 版本的 pom.xml ,依賴于 WebF.springframework.bootspring-boot-starter-parent2.0.0.M5org.springframework.bootspring-boot-starter-webflux1.6.1 傳統(tǒng)方法 VS. 響應(yīng)方法在傳統(tǒng)方法中,執(zhí)行將被阻塞,并將一直等到您的服務(wù)執(zhí)行完成為止。在下面的代碼中,在第一個(gè) print 語句之后,程序執(zhí)行將被阻塞并等待服務(wù)執(zhí)行完成。在服務(wù)執(zhí)行完成后,將恢復(fù)程序執(zhí)行,并執(zhí)行第二個(gè) print 語句。GetMapping(/traditional)publicListgetAllProducts()System.out.println(Traditionalwaystarted);Listproducts=prodService.getProducts(traditional);System.out.println(Traditionalwaycompleted);returnproducts;在響應(yīng)方法中,程序執(zhí)行將繼續(xù),而不用等待服務(wù)執(zhí)行的完成。在下面的代碼中,在第一個(gè) print 語句之后,第二個(gè) print 語句將以非阻塞的方式執(zhí)行,而無需等待服務(wù)執(zhí)行的完成。Flux stream 將隨著產(chǎn)品數(shù)據(jù)的可用性而被填充。GetMapping(value=/reactive,.TEXT_EVENT_STREAM_VALUE)publicFluxgetAll()System.out.println(ReactivewayusingFluxstarted);FluxfluxProducts=prodService.getProductsStream(Flux);System.out.println(ReactivewayusingFluxcompleted);returnfluxProducts;1.6.2 Reactive Web Client除了現(xiàn)有的 RestTemplate 之外,Spring 5 還引入了 Reactive WebClient。ClientHttpRequest 和 ClientHttpResponse 抽象將請(qǐng)求和響應(yīng)主體使用 Flux 公開,并在讀和寫端提供完全背壓支持。來自 Spring Core 的編碼器和解碼器抽象也用在客戶端,用于將字節(jié)序的 Flus 序列化或發(fā)序列化成類型對(duì)象。下面是一個(gè) Reactive WebClient 的示例,它調(diào)用終端并接收及處理 Reactive Stream Flux 對(duì)象。GetMapping(/accounts/id/alerts)publicFluxgetAccountAlerts(PathVariableLongid)WebClientwebClient=newWebClient(newReactorClientHttpConnector();returnthis.repository.getAccount(id).flatMap(account-webClient.perform(get(/alerts/key,account.getKey().extract(bodyStream(Alert.class);1.7 Spring 5
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)形象策劃服務(wù)合同
- 專業(yè)分包施工合同協(xié)議書
- 舊機(jī)動(dòng)車買賣居間服務(wù)合同
- 石灰土底基層施工勞務(wù)承包合同
- 廣州華立學(xué)院《區(qū)域數(shù)字經(jīng)濟(jì)調(diào)查》2023-2024學(xué)年第二學(xué)期期末試卷
- 大興安嶺職業(yè)學(xué)院《財(cái)務(wù)報(bào)表編制與分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 下壓式接力跑 教學(xué)設(shè)計(jì)-2023-2024學(xué)年高一上學(xué)期體育與健康人教版必修第一冊(cè)
- 江南影視藝術(shù)職業(yè)學(xué)院《信息與內(nèi)容安全》2023-2024學(xué)年第二學(xué)期期末試卷
- 綿陽飛行職業(yè)學(xué)院《馬克思主義經(jīng)典著作選讀(一)》2023-2024學(xué)年第二學(xué)期期末試卷
- 長江大學(xué)文理學(xué)院《家具史》2023-2024學(xué)年第二學(xué)期期末試卷
- 診所申請(qǐng)醫(yī)保定點(diǎn)資料模板(一套)
- 2023年英語專業(yè)四級(jí)時(shí)態(tài)測試題及答案
- 《社區(qū)康復(fù)》課件-第十一章 其他疾病的社區(qū)康復(fù)實(shí)踐
- 2023年國網(wǎng)陜西省電力有限公司高校畢業(yè)生招聘考試真題及答案
- 項(xiàng)目團(tuán)隊(duì)的激勵(lì)和激勵(lì)理論
- 廣東省社會(huì)培訓(xùn)評(píng)價(jià)組織備案申請(qǐng)材料清單說明(2024年)
- 我國校本課程開發(fā)現(xiàn)狀調(diào)研報(bào)告
- 行為危險(xiǎn)因素干預(yù)健康教育干預(yù)課件
- 下肢動(dòng)脈硬化閉塞癥的護(hù)理查房
- 八年級(jí)物理課程綱要(八下)
- 湖北省首屆體育社會(huì)組織益啟體育項(xiàng)目大賽福壽康寧系列賽事活動(dòng)體育品牌賽事活動(dòng)
評(píng)論
0/150
提交評(píng)論