Quarkus入門體驗,22ms啟動一個Web服務

2023-01-31 06:00:33

簡介

Quarkus是類似於Spring Boot的框架,可以方便大家進行Java開發。利用GraalVM的魔力,能更好的適應雲原生的場景,極快的啟動速度。

建立專案

在IDEA就直接有建立Quarkus專案的初始化工具,直接根據自己需要填好即可,非常方便:

選擇自己需要的一些元件和依賴,我這裡只選擇Web Reactive。這跟Spring Boot挺像的。

生成的Java程式碼就一個檔案,很簡單小巧:

編譯執行

建立成功後,把編譯目標改為11,因為我用的是JDK11。通過mvn clean package嘗試打包,下載依賴包。編譯成功後,IDEA支援直接跑Quarkus程式,如下:

啟動成功如下:

Quarkus在首頁提供了一些開發資訊和工具,如下:

存取服務如下:

直接修改Java程式碼:

@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
  return "Hello from pkslow.com";
}

不用重啟就可以生效:

在Docker上執行

打包成Native的Docker映象,命令如下:

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

第一次可能比較長時間,需要下載映象。但這種打映象的方法是把檔案放在映象外面。通過-v的方式來執行。

所以我們再通過下面命令來生成映象:


$ docker build -f src/main/docker/Dockerfile.native -t pkslow/quarkus-quickstart .
Sending build context to Docker daemon  55.41MB
Step 1/7 : FROM registry.access.redhat.com/ubi8/ubi-minimal:8.6
8.6: Pulling from ubi8/ubi-minimal
a6577091999b: Pull complete 
Digest: sha256:33931dce809712888d1a8061bfa676963f517daca993984afed3251bc1fb5987
Status: Downloaded newer image for registry.access.redhat.com/ubi8/ubi-minimal:8.6
 ---> abb1ba1bceab
Step 2/7 : WORKDIR /work/
 ---> Running in b1f6c5c33919
Removing intermediate container b1f6c5c33919
 ---> 44961ddcb521
Step 3/7 : RUN chown 1001 /work     && chmod "g+rwX" /work     && chown 1001:root /work
 ---> Running in e1c1a83e964f
Removing intermediate container e1c1a83e964f
 ---> 225868ceda2c
Step 4/7 : COPY --chown=1001:root target/*-runner /work/application
 ---> 55b2bba61da1
Step 5/7 : EXPOSE 8080
 ---> Running in 9b90514423eb
Removing intermediate container 9b90514423eb
 ---> 00f981b47b0e
Step 6/7 : USER 1001
 ---> Running in bd5d1b723784
Removing intermediate container bd5d1b723784
 ---> 14d55159d2d9
Step 7/7 : CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
 ---> Running in c60a96727644
Removing intermediate container c60a96727644
 ---> 77fdda464a6a
Successfully built 77fdda464a6a
Successfully tagged pkslow/quarkus-quickstart:latest

通過Docker來啟動:

$ docker run -i --rm -p 8080:8080 pkslow/quarkus-quickstart
__  ____  __  _____   ___  __ ____  ______ 
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
2022-11-01 07:36:38,557 INFO  [io.quarkus] (main) quarkus-quickstart 1.0-SNAPSHOT native (powered by Quarkus 2.13.3.Final) started in 0.022s. Listening on: http://0.0.0.0:8080
2022-11-01 07:36:38,558 INFO  [io.quarkus] (main) Profile prod activated. 
2022-11-01 07:36:38,558 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy-reactive, smallrye-context-propagation, vertx]

可以看出啟動相當快,才用了22ms。存取對應的網頁和介面也是正常的。

程式碼

程式碼請看GitHub: https://github.com/LarryDpk/pkslow-samples


References:

CREATING YOUR FIRST APPLICATION

BUILDING A NATIVE EXECUTABLE