響應式編程:Vert.x官網學習

来源:https://www.cnblogs.com/waynaqua/archive/2023/07/11/17544585.html
-Advertisement-
Play Games

本文基於 Vert.x 官網 https://vertx.io/ 內容,帶領大家學習響應式編程里比較有名的工具包 Vert.x 。文章內容取自官網由博主簡化總結,希望幫助大家理解響應式編程。 - Vert.x 簡介 - Vert.x 特性 - 響應式模式概述 > 推薦博主開源的 H5 商城項目**w ...


本文基於 Vert.x 官網 https://vertx.io/ 內容,帶領大家學習響應式編程里比較有名的工具包 Vert.x 。文章內容取自官網由博主簡化總結,希望幫助大家理解響應式編程。

  • Vert.x 簡介
  • Vert.x 特性
  • 響應式模式概述

推薦博主開源的 H5 商城項目waynboot-mall,這是一套全部開源的微商城項目,包含三個項目:運營後臺、H5 商城前臺和服務端介面。實現了商城所需的首頁展示、商品分類、商品詳情、商品 sku、分詞搜索、購物車、結算下單、支付寶/微信支付、收單評論以及完善的後臺管理等一系列功能。 技術上基於最新得 Springboot3.0、jdk17,整合了 MySql、Redis、RabbitMQ、ElasticSearch 等常用中間件。分模塊設計、簡潔易維護,歡迎大家點個 star、關註博主。

github 地址:https://github.com/wayn111/waynboot-mall

Vert.x簡介

官網首頁

先瞭解 Vert.x 是什麼,官網首頁介紹文字可以看出 Vert.x 是由 Eclipse 開發的一個在 JVM 上 Reactive(響應式) 應用程式。

Reactive(響應式)編程是什麼?

響應式編程是一種面向數據流和變化傳播的編程範式。這意味著可以在編程語言中很方便地表達靜態或動態的數據流,而相關的計算模型會自動將變化的值通過數據流進行傳播。

例如在命令式編程設置中,a = b + c 意味著在計算表達式時 a 被分配為 b + c 的結果,之後 b 和 c 的值進行修改也不會影響 a 值。但是在響應式編程中,只要 b 或 c 的值發生變化,a 的值就會自動更新,而程式無需顯式地重新執行語句 a = b + c 來確定當前分配的 a 值。

官網定義

官網對於 Vert.x 的定義是:一個用於在 JVM 上構建響應式應用程式的工具包

註意 Vert.x 是一個工具包,不是框架。

響應式應用程式既可以隨著工作負載的增長而擴展,也可以在出現故障時具有彈性響應式應用程式具有響應能力,因為它通過有效利用系統資源並保護自身免受錯誤的影響來控制延遲。

響應式編程不僅僅是體現在編碼 a = b + c 上,更體現在由其開發出的程式的高性能和擴展性上。

Microservices

Vert.x 還有一個大型響應式模塊生態系統(即由 Eclipse 主導的 Vert.x 社區)來提供支持,其中包含編寫現代服務時所需的任何內容:全面的 Web 技術棧、響應式資料庫驅動程式、消息傳遞、事件流、集群、指標、分散式跟蹤等。

Vert.x特性

官網對 Vert.x 的五個特性進行了闡述。

特性

Resource-efficient(資源利用)

與基於阻塞 I/O 的傳統技術和框架相比,可以用更少的資源處理更多的請求。 Vert.x 非常適合各種執行環境,包括虛擬機和容器等受限環境。

劃重點:不浪費資源,提高部署密度,省錢!

Concurrent and asynchronous(併發和非同步)

通常其他人告訴你非同步編程很難,但我們努力使 Vert.x 編程變得很簡單,適合大多數人,同時不犧牲正確性和性能。

你可以選擇最適合當前任務的模型:callback、Promise、Future、響應式擴展和 (Kotlin) 協程。

Flexible(使用靈活)

Vert.x 是一個工具包,而不是一個框架,因此它自然具有很強的可組合性和可嵌入性。Vert.x 對你的應用程式結構應該沒有要求。

選擇你需要的模塊和客戶端,併在構建應用程式時組合它們。 Vert.x 將始終根據你的需求進行調整和擴展。

Vert.x is fun(編碼有趣)

忘記複雜性和昂貴的抽象。使用 Vert.x,編寫的內容實際上就是要執行的內容!回歸簡單的設計,忘記一些既定的“最佳實踐”,並享受編寫易於理解的代碼是不會讓你失望的。

我們還有一個友好的社區,因此你可以向在各種環境中使用過 Vert.x 的人們學習。

Ecosystem(生態系統)

Web API、資料庫、消息傳遞、事件流、雲、註冊表、安全性等應有盡有。 Vert.x 提供了適用於現代應用程式的全面的端到端響應式客戶端技術棧。

如果你找不到想要的東西,那麼很有可能其他人已經在更廣泛的 Vert.x 開源生態系統中找到了它。 Vert.x 對於你的技術棧來說是一項很安全的投資。

響應式模式概述

最開始是線程

併發的經典方法是使用線程。多個線程可以存在於單個進程中,執行併發工作並共用相同的記憶體空間。

線程

大多數應用程式和服務開發框架都基於多線程。從錶面上看每個連接都有 1 個線程的模型令人放心,因為開發人員可以依賴傳統的命令式代碼。

多線程“簡單”但有限

當工作負載超出中等工作負載時會發生什麼? (參見 C10k 問題)

C10K 問題就是如何一臺物理機上同時服務 10000 個用戶?C 代表併發,10K 就是 10000

發生:正在進行的請求會創建大量線程,因而需要進行大量上下文切換工作,導致機器資源利用效率偏低。

阻塞I/O

請求執行時,有些線程因為在等待 I/O 操作完成會被阻塞,有些線程準備處理 I/O 結果,有些線程正在執行 CPU 密集型任務。

現代內核有非常好的調度程式,但你不能指望它們能夠像處理 5 000 個線程那樣輕鬆地處理 50 000 個線程。而且線程並不便宜,創建一個線程需要幾毫秒,而一個新線程則需要大約 1MB 記憶體。

非同步編程:可擴展性和資源效率

使用非同步 I/O 時,可以使用更少的線程處理更多併發連接。當 I/O 操作發生時,我們不會阻塞線程,而是繼續執行另一個已準備好進行的任務,併在準備就緒後恢復初始任務。

Vert.x 使用事件迴圈來實現併發工作負載。

事件迴圈

在事件迴圈上運行的代碼不應執行阻塞 I/O 或冗長的處理。但如果你有這樣的代碼,請不要擔心,Vert.x 有工作線程和 API 來處理事件迴圈中的事件。

選擇最佳的非同步編程模型

我們知道非同步編程需要付出更多的努力。在 Vert.x 的核心,我們支持 callbacksPromise/Futures,後者是用於鏈接非同步操作的簡單而優雅的模型。

RxJava 雖然可以實現高級響應式編程,但如果你更喜歡更接近傳統命令式編程的方式,那麼我們很高興為你提供 Kotlin 協程的一流支持。

非同步編程

不要讓失敗破壞響應能力

失敗總是會發生。資料庫將出現故障,網路將出現故障,或者依賴的某些服務將變得無響應。

失敗發生

Vert.x 提供了控制延遲的工具,包括簡單高效的斷路器。

豐富的生態系統

Vert.x 生態包含用於構建現代端到端響應式服務的模塊。從高效的響應式資料庫客戶端到事件流、消息傳遞和 Web 技術棧,Vert.x的各個模塊可以分為以下幾類:

生態系統

  • 核心模塊:vertx-core,提供了基礎的TCP、HTTP、文件系統、事件匯流排等功能,是其他模塊的基礎。
  • Web模塊:vertx-web,提供了路由器、模板引擎、身份驗證、Web客戶端等功能,可以方便地開發Web應用。
  • 數據訪問模塊:vertx-jdbc-client,vertx-mongo-client,vertx-redis-client,vertx-mysql-client等,提供了對各種資料庫的非同步訪問支持。
  • 消息模塊:vertx-rabbitmq-client,vertx-kafka-client,vertx-amqp-client等,提供了對各種消息中間件的非同步訪問支持。
  • 各語言模塊:Vert.x 支持多種編程語言,如Java、JavaScript、Ruby、Python、Groovy、Scala等,並提供了友好的API介面。
  • 微服務模塊:vertx-service-discovery,vertx-circuit-breaker,vertx-config等,提供了服務發現、熔斷器、配置管理等功能,可以幫助開發微服務應用。
  • 其他模塊:還有一些其他的模塊,如vertx-mail-client,vertx-auth-common,vertx-dropwizard-metrics等,提供了郵件客戶端、認證、監控等功能。

總結

Vert.x 是一個基於 JVM 的輕量級、高性能響應式工具包,適用於最新的服務端後臺、互聯網、企業應用架構。Vert.x 基於全非同步的事件驅動和非阻塞的 IO 模型,可以使用很少的線程資源處理大量併發請求。Vert.x 還提供了分散式系統、微服務、資料庫、消息傳輸、web開發支持等特性,使得開發者可以輕鬆編寫響應式應用程式,具有很好的擴展性和可靠性。

本文講解到此結束,希望對你瞭解 Vert.x 有所幫助。

關註公眾號【waynblog】每周分享技術乾貨、開源項目、實戰經驗、高效開發工具等,您的關註將是我的更新動力!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一. 介紹 值傳遞:值傳遞(Pass-by-Value)當我們向方法傳遞參數時,實際上是將該參數的值進行拷貝,並將拷貝後的值傳遞給方法內部。在方法內部對參數進行修改不會影響原始變數的值。 引用傳遞:引用傳遞(Pass by reference)是指方法調用時實參(即傳入方法的參數)是一個對象的引用, ...
  • # 2022藍橋杯b組 ## A題 ![img](https://img-blog.csdnimg.cn/4ac63a09fe784d7a94b710fc0cc48d09.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50, ...
  • 紅包分配問題 給你一個整數表示紅包的總額,和另一個整數表示紅包的個數 表示我們要把總金額,隨機分成N個紅包。 要求1:每個紅包的金額都是隨機的 要求2:每個人至少1分錢 示例代碼: 1 public class Test2 { 2 public static void main(String[] a ...
  • 瞭解驅動Docker的核心技術將讓您更深入地瞭解Docker的工作原理,並有助於您更有效地使用該平臺。 ### **Linux容器(LXC)** Linux容器(LXC)是Docker的基礎。 LXC是一種輕量級的虛擬化解決方案,允許多個隔離的Linux系統在單個主機上運行,無需全功能的虛擬化。 L ...
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 本篇概覽 - 經歷了前面兩篇的入門和編譯源碼之後,從本 ...
  • # 一、使用JDBC批量添加 ## ​ 知識點複習: ​1、JDBC的六大步驟 (導入jar包, 載入驅動類,獲取連接對象, 獲取sql執行器、執行sql與並返回結果, 關閉資料庫連接) 2、​封裝了一個DBUtil 類, 通過讀取屬性文件的方式獲取 基礎連接信息。 3、​批量添加: 一次性可執行多 ...
  • 哈嘍兄弟們 我們平常需要下載文檔的時候,是不是發現,要麼不能下載,要麼不能複製,就能難受。 常見的文檔網站很多,但是這裡就不一一說名字了,emmm 那麼我們今天來分享一下,如何用Python將這些不給下載的文檔給批量下載下來。 你需要準備 開發環境 python 3.8 pycharm 模塊使用 兩 ...
  • 一. 介紹 1. 介面 Interface 介面可以稱之為一種規範,在Java中被用來定義一組方法,而不提供具體的實現細節,它規定了一個類應該要實現哪些方法;其他類可以通過實現介面來達到代碼重用和多態性的目的,幫助我們構建可擴展、靈活和可復用的代碼。 介面使用步驟: - 定義介面:使用關鍵字inte ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...