QUARKUS初体验(19岁初体验数月)

1.什么是QUARKUS?

Quarkus是 Red Hat为GraalVM 和 HotSpot 量身定制用程序。特点是启动超快,内存极低,并且在容器编排平台(如Kubernetes)中提供了近乎即时的向上扩展和高密度的内存利用率。并且基于GraalVM,为我们提供了编译成native程序的能力。如果你觉得SpringBoot的启动速度太慢了内存占用率太高了,那么可以在日常开发中尝试一下Quarkus,也许会给你不一样的体验。我将通过一系列的教程,来介绍如何使用Quarkus。

2.QUARKUS VS Spring Boot

Metrics

Spring Boot JVM

Quarkus JVM

Spring Boot Native

Quarkus Native

Startup time (sec)

5.395

4.075

0.082

0.142

Build artifact time (sec)

1.759

5.243

113

91

Artifact size (MB)

30.0

31.8

94.7

80.5

Loaded classes

8861

8496

21615

16040

CPU usage max (%)

100

100

100

100

CPU usage average (%)

82

73

94

92

Heap size startup (MB)

1048.57

1056.96

Used heap size startup (MB)

193.31

157.066

84.574

60.41

Used heap max (MB)

604.1

567.854

144.984

519.526

Used heap average (MB)

434.155

362.46

114.779

289.968

RSS memory startup (MB)

197.7

159.1

90.5

57.1

Max Threads

77

47

73

42

Requests per Second

319

240

395

236

通过这个实验结果,

  • 我们可以观察到 Quarkus 在 JVM 和原生版本的启动时间方面都 Spring Boot 快
  • Artifact(工件)的大小出现了同样的情况,Quarkus 生成了更小的包而再次领先。
  • 平均响应时间Quarkus 优于Spring Boot
  • Quarkus 最大线程数比Spring Boot 少

3.代码工程

实验目的

快速体验quarkus项目

生成代码

https://code.quarkus.io/

下载ZIP,导入到 ideal中去,这边已经有一个现成的工程模块,可以参考

代码仓库

  • https://github.com/Harries/springboot-demo(quarkus)

4.测试

编译打包

(注意JDK版本,最低要求11)

./mvnw compile quarkus:dev

查看控制台日志

[INFO] --- quarkus:3.12.3:dev (default-cli) @ Quarkus ---
[INFO] Invoking resources:3.3.1:testResources (default-testResources) @ Quarkus
[INFO] skip non existing resourceDirectory D:\IdeaProjects\ETFramework\Quarkus\src\test\resources
[INFO] Invoking quarkus:3.12.3:generate-code-tests (default) @ Quarkus
[INFO] Invoking compiler:3.13.0:testCompile (default-testCompile) @ Quarkus
__ ____ __ _____ ___ __ ____ ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
2024-07-29 16:24:21,193 INFO [io.quarkus] (Quarkus Main Thread) Quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.12.3) started in 2.018s. Listening on: http://localhost:8080

2024-07-29 16:24:21,197 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
2024-07-29 16:24:21,198 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, rest, rest-jackson, smallrye-context-propagation, vertx]

--
Tests paused
Press [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>

访问http://localhost:8080/

DEV UI

访问
http://localhost:8080/hello

Hello from Quarkus REST

编译native Code

前面我们说过了Quarkus的一个优势是借助GraalVM可以将我们的代码打包成native code 所以我们来打包一下。

./mvnw package -Pnative

等待编译,这个编译的时间会比较久一点。编译成功后我们进入target文件夹中可以看到编译后的可执行的文件(*-runner),直接运行它就可以了。

打包成docker.jvm/ docker.native

$ mvn clean package -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=docker

5.引用

  • https://code.quarkus.io/
  • https://quarkus.io/
原文链接:,转发请注明来源!