设为首页 加入收藏

TOP

支持JDK19虚拟线程的web框架,之一:体验(一)
2023-07-25 21:27:00 】 浏览:103
Tags:支持 JDK19 程的 web 框架 之一 体验

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

关于虚拟线程

  • 随着JDK19 GA版本的发布,虚拟线程(来自Project Loom)这一特性也闪亮登场,虚拟线程是 JDK 而并非OS 实现的轻量级线程(Lightweight Process,LWP),许多虚拟线程共享同一操作系统线程,虚拟线程的数量可以远大于操作系统线程的数量(可以参考golang的协程)
  • 虚拟线程方面的文章,如今已经有很多优秀博主写得非常详细深入,欣宸就不在这方面献丑了,而是将重点放在虚拟线程的实用性方面,用实战与大家一同学习:如何让虚拟线程在web服务中发挥作用,效果究竟如何?

关于支持虚拟线程的框架

  • Quarkus的web模块已经支持JDK19的虚拟线程了,收到web请求后,可以交给虚拟线程去处理,本身开发的工作量也不大,文章标题《支持JDK19虚拟线程的web框架》指的就是Quarkus框架,也是整个系列所用到的框架
  • 关于Quarkus,这是个强大的java框架,介绍Quarkus并非本文重点,有兴趣的读者可以关注欣宸的《quarkus实战》系列原创

本篇概览

  • Quarkus框架已支持使用虚拟线程处理web请求,欣宸原创的《支持JDK19虚拟线程的web框架》系列会陪伴大家,全程以实战动手为主,从快速体验,再到实际编码,以及部署构建都有详细说明,确保读者们既有成就感,又能学点小技能,在虚拟线程最火爆的时候抢先一步尝鲜,窥探未来技术的一角
  • 整个系列一共五篇文章,分别是《极速体验》、《细说开发》、《深入了解》(两篇)、《大话畅谈》,本篇是系列的开篇,主要内容是:不写代码,通过复制粘贴轻松完成最初的体验,把编码和设置这些繁重的工作留在后面的文章
  • 接下来说说本篇的主要内容:
  1. 整个体验环境,由quarkus应用和数据库组成,当我们向quarkus应用发起请求的时候,应用会去查询数据再将数据返回给前端
  2. quarkus应用提供了两个接口,第一个名为/vt/persons,使用虚拟线程来处理web请求,第二个名为/pool/persons,使用传统线程池来处理web请求,整体上如下图所示
image-20221016123754303
  1. 由于quarkus对于响应式编程的支持比较完善,因此,quarkus应用中的web处理为响应式,并且数据库驱动也是响应式
  2. 上述基本功能调通后,我们就用压测工具来模拟并发访问,看看使用了虚拟线程的web服务性能究竟如何
  3. 再部署一个同样功能的SpringBoot应用,也做同样的压测,提供参考数据用于对比
  4. 最后画个图说明接下来具体要做的事
image-20221016182919235

环境信息

  • 以下是本次实战的具体环境信息,给您作为参考
  1. 运行环境:一共用到了三台电脑,信息分别如下

image-20221016183707688

  1. 上述三台电脑都用到了docker,按照官方文档部署最新版即可,我这里是20.10.19版本
  2. postgresql是用docker部署的,版本是15
  3. quarkus版本为2.13.2.Final,使用的JDK是19
  4. springboot版本为2.7.4,用到的JDK是11
  5. 压测工具k6为docker版,版本号v0.40.0
  • 省吃俭用攒了这么多电脑来搞事情,主要是想得到的压测结果尽量客观独立,不受太多干扰
  • 接下来,开始动手吧

部署数据库

  • 首先是安装数据库,确保宿主机上的docker已经部署好
  • 部署数据库很简单,一行命令即可,如下所示,除了服务,还新建了数据库,并且设置了账号和密码
sudo docker run \
--name postgres \
-p 5432:5432 \
-e POSTGRES_DB=quarkus_test \
-e POSTGRES_USER=quarkus \
-e POSTGRES_PASSWORD=123456 \
-d \
postgres:15

建表,添加数据

  • 用数据库工具连接数据库(我这里用的是IDEA的数据库工具),执行以下命令,会新建一个表,并导入6条记录
create table person (
  id serial primary key,
  name varchar(255),
  gender varchar(255),
  age int,
  external_id int
);
insert into person(name, age, gender, external_id) values('John Smith', 25, 'MALE', 10);
insert into person(name, age, gender, external_id) values('Paul Walker', 65, 'MALE', 20);
insert into person(name, age, gender, external_id) values('Lewis Hamilton', 35, 'MALE', 30);
insert into person(name, age, gender, external_id) values('Veronica Jones', 20, 'FEMALE', 40);
insert into person(name, age, gender, external_id) values('Anne Brown', 60, 'FEMALE', 50);
insert into person(name, age, gender, external_id) values('Felicia Scott', 45, 'FEMALE', 60);

部署quarkus应用

  • 登录用于部署quarkus应用的服务器,确保服务器上已经成功部署了docker
  • 新建名为application.properties的配置文件,内容是数据库相关的参数,如下所示
quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=quarkus
quarkus.datasource.password=123456
quarkus.datasource.reactive.url=postgresql://192.168.0.99:5432/quarkus_test
  • 我这里,application.properties的路径是:/home/lighthouse/config/quarkus/application.properties

  • 检查application.properties文件的可读性,执行以下命令设置

sudo chmod a+r application.properties
  • 执行以下命令即可部署和启动quarkus应用,注意application.properties文件的位置要换成您自己的配置文件路径
docker run -idt \
--name quarkus \
-p 8080:8080 \
-v /home/lighthouse/config/quarkus/application.properties:/application/config/application.properties \
bolingcavalry/quarkus-virual-threads-demo:x64-0.0.3
  • 上述命令中,quarkus

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Git 配置与使用及从 0 到 1 下一篇高并发场景下的 HttpClient 优化..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目