支持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应用

文章插图