支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

歡迎訪問我的GitHub

這里分類和匯總了欣宸的全部原創(含配套源碼):https://github.com/zq2599/blog_demos
本篇概覽
  • 本篇是《支持JDK19虛擬線程的web框架》系列的第二篇,前文咱們體驗了有虛擬線程支持的web服務 , 經過測試,發現性能上它與其他兩種常見web架構并無明顯區別,既然如此,還有必要研究和學習嗎?
  • 當然有必要,而且還要通過實戰更深入了解虛擬線程與常規線程的區別,在各大框架和庫廣泛支持虛擬線程之前 , 打好理論和實踐基礎,這才是本系列的目標
  • 為了接下來的深入了解 , 咱們先在本篇打好基?。合晗桿得髑拔牡膚eb功能是如何開發出來的
  • 為了突出重點,這里先提前劇透,從編碼的角度說清楚如何開啟虛擬線程支持,其實非常簡單 , 如下圖,左側是quarkus框架下的一個普通web服務,每收到一個web請求 , 是由線程池中的線程負責響應的,右側的web服務多了個@RunOnVirtualThread注解,就變成了由新建的虛擬線程去處理web請求 , 沒錯,在quarkus框架下使用虛擬線程就是這么簡單

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 在前文中,我們通過返回值也看到了上述兩個web服務中,負責web響應的線程的不同,如下所示,從線程名稱上很容易看出線程池和虛擬線程的區別

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 看到這里,您可能會說:就這?一個注解就搞定的事情 , 你還要寫一篇文章?這不是在浪費作者你自己和各位讀者的時間嗎?
  • 確實,開啟虛擬線程,編碼只要一行,然而就目前而言,虛擬線程是JDK19專屬 , 而且還只是預覽功能,要想在實際運行的時候真正開啟并不容易 , 需要從JDK、maven、IDE等方方面面都要做相關設置,而且如果要做成前文那樣的docker鏡像,一行docker run命令就能開啟虛擬線程,還要在Dockerfile上做點事情(quarkus提供的基礎鏡像中沒有JDK19版本,另外啟動命令也要調整)
  • 上述這些都是本文的重點,欣宸已經將這些梳理清楚了,接下來咱們一起實戰吧,讓前文體驗過的web從無到有,再到順利運行,達到預期
  • 整個開發過程如下圖所示 , 一共十步,接下來開始動手

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
開發環境
  • 開發電腦:MacBook Pro M1,macOS Monterey 12.6
  • IDE:IntelliJ IDEA 2022.3 EAP (Ultimate Edition) (即未發布前的早期預覽版)
  • 另外,M1芯片的電腦上開發和運行JDK19應用,與普通的X86相比感受不到任何變化,只有一點要注意:上傳docker鏡像到hub.docker.com時,鏡像的系統架構是ARM的,這樣的鏡像在X86電腦上下載下來后不能運行
下載JDK19
  • 下載jdk19,由于電腦是M1芯片,我選擇的jdk是azul版本 , 地址是:https://www.azul.com/downloads/?package=jdk#download-openjdk
  • 使用azul的jdk和之前的oracle版本并無區別,至少在開發環境感受不到 , 來看下azul官方的說法

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 實際上,azul的jdk很全面,x86芯片的各平臺版本安裝包都提供了,您可以根據自己電腦環境選擇下載 , 下面是我選擇的適合M1芯片的版本

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 下載完成后雙擊安裝即可
修改maven的配置
  • 我這里使用的是本地maven,其對應的JDK也要改成19 , 修改方法是調整環境變量JAVA_HOME,令其指向JDK19目錄(在我的電腦上,環境變量是在~/.zshrc里面)

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 修改后令環境變量生效,然后執行一下命令確認已經使用了JDK19
?~ mvn -versionApache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)Maven home: /Users/zhaoqin/software/apache-maven-3.8.5Java version: 19, vendor: Azul Systems, Inc., runtime: /Library/Java/JavaVirtualMachines/zulu-19.jdk/Contents/HomeDefault locale: zh_CN_#Hans, platform encoding: UTF-8OS name: "mac os x", version: "12.6", arch: "aarch64", family: "mac"創建Quarkus項目
  • 打開IDEA,新建項目,選擇Quarkus項目

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖