支持JDK19虚拟线程的web框架,之二:完整开发一个支持虚拟线程的quarkus应用( 五 )


mvn clean package -U -DskipTests -Dquarkus.package.type=uber-jar

  • 构建docker镜像
docker build -f src/main/docker/Dockerfile.19 -t bolingcavalry/quarkus-virual-threads-demo:0.0.2 .
  • 镜像制作成功,控制台输出如下图

支持JDK19虚拟线程的web框架,之二:完整开发一个支持虚拟线程的quarkus应用

文章插图
  • 如果您有hub.docker.com的账号,也可以像我一样推送到公共仓库,方便大家使用
异常测试(没有enable-preview参数会怎么样?)
  • 回顾Dockerfile中启动应用的命令,由于虚拟线程是JDK19的预览功能,因此必须添加下图红色箭头所指的--enable-preview参数才能让虚拟线程功能生效

支持JDK19虚拟线程的web框架,之二:完整开发一个支持虚拟线程的quarkus应用

文章插图
  • 于是我就在想:不加这个参数会咋样?也就是不开启虚拟线程,但是代码中却要用它,那么真正运行的时候会如何呢?
  • 瞎猜是没用的,还是试试吧,在启动参数中删除--enable-preview,如下图,再重新构建镜像

支持JDK19虚拟线程的web框架,之二:完整开发一个支持虚拟线程的quarkus应用

文章插图
  • 像前文那样运行容器(再次提醒,确保数据库是正常的),再在浏览器访问http://localhost:8080/vt/persons/1,页面正常显示了,看来功能是不受影响的

支持JDK19虚拟线程的web框架,之二:完整开发一个支持虚拟线程的quarkus应用

文章插图
  • 再用docker logs命令查看后台日志,如下图箭头所示,quarkus给出了WARN级别的提示:由于当前虚拟机不支持虚拟线程,改为使用默认的阻塞来执行业务逻辑

支持JDK19虚拟线程的web框架,之二:完整开发一个支持虚拟线程的quarkus应用

文章插图
  • 小结:在不支持虚拟线程的环境强行使用虚拟线程,quarkus会选择兼容的方式继续完成任务
小结和展望
  • 至此,一个完整的quarkus应用已开发完成,该应用使用虚拟线程来响应web请求,而且在quarkus官方还没有提供方案的前提下,咱们依旧完成了docker镜像的制作,最后,因为好奇,还关闭重要参数尝试了一下,一系列操作下来,相信您已经对基础开发了如指掌了
  • 最后,还剩下两个遗留问题,相信您也会有类似困惑
    1. 虚拟线程和常规子线程的区别,究竟能不能看出来?前文已经验证了性能上区别不大,那还有别的方式来观察和区分吗?
    2. 能不能稍微深入一点,仅凭一个@RunOnVirtualThread注解就强行写了两篇博客,实在是太忽悠人了
  • 以上问题会在接下来的《支持JDK19虚拟线程的web框架,终篇》得到解决,还是那句熟悉的广告词:欣宸原创,不辜负您的期待
欢迎关注博客园:程序员欣宸
学习路上,你不孤单,欣宸原创一路相伴...
【支持JDK19虚拟线程的web框架,之二:完整开发一个支持虚拟线程的quarkus应用】

经验总结扩展阅读