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

来源:https://www.cnblogs.com/larrydpk/archive/2023/01/30/17077541.html
-Advertisement-
Play Games

簡介 Quarkus是類似於Spring Boot的框架,可以方便大家進行Java開發。利用GraalVM的魔力,能更好的適應雲原生的場景,極快的啟動速度。 創建項目 在IDEA就直接有創建Quarkus項目的初始化工具,直接根據自己需要填好即可,非常方便: 選擇自己需要的一些組件和依賴,我這裡只選 ...


簡介

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • state 有狀態state的組件稱作複雜組件,沒有狀態的組件稱為簡單組件 狀態里存儲數據,數據的改變驅動頁面的展示 <script type="text/babel"> // 創建組件 class Weather extends React.Component { // 構造器調用1次 const ...
  • 1、模塊化的發展過程 var moduleObj = { userName: 'zhangsan', fn: function () { console.log('hello world') } } 使用方式 <html> <head> </head> <body> <script src="a.j ...
  • 一篇文章帶你瞭解設計模式——創建者模式 在之前的文章中我們已經學習了設計模式的基本原則和基本分類 下麵我們來介紹第一種設計模式,創建型模式的主要關註點是怎樣創建對象,它的主要特點是“將對象的創建與使用分離”。 下麵我們將從下麵四個方面講述五種創建者模式: 單例模式 工廠模式 原型模式 建造者模式 單 ...
  • 後端應用分層是什麼,例如:你用Spring MVC開發web程式、項目用三層架構分包,這些都用了分層思想。 MVC模式包含了三部分: 視圖(view):負責界面顯示、處理用戶交互。如:前端應用 控制器(controller):協調視圖層與模型層之間的相互工作。控制器接收視圖層發來的請求,決定用那些模 ...
  • 設計原則 23種設計模式滿足並實現了設計原則中的一個或者多個,從而達到了代碼復用、增加可維護性的目的。 開閉原則(Open+Closed+Principle,OCP) 里氏代換原則(Liskov+Substitution+Principle,LSP) 依賴倒轉原則(Dependency+Invers ...
  • CQRS只是一種非常簡單的模式(pattern),CQRS本身並不是一種架構風格,和最終一致性/消息/讀寫分離/事件溯源/DDD等沒有必然的聯繫,它最大優勢是給我們帶來更多的架構屬性選擇 ...
  • 什麼是RabbitMQ? RabbitMQ是一款開源的,Erlang編寫的,基於AMQP協議的消息中間件 為什麼使用MQ?MQ的優點 非同步處理 - 相比於傳統的串列、並行方式,提高了系統的吞吐量。 應用解耦 - 系統間通過消息通信,不用關心其他系統的處理。 流量削鋒 - 可以通過消息隊列長度控制請求 ...
  • 洛谷oj題單【入門1】順序結構-入門難度(Java) 來源:https://www.luogu.com.cn/training/100#problems B2002 Hello,World! public class Main { public static void main(String[] a ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...