网站公司排行榜前十名,wordpress 插件模板,凡科网让经营更简单,重庆网站排名Java云原生框架Quarkus初探 Quarkus 介绍
Quarkus 是一个云原生#xff0c;容器优先的Java应用框架#xff0c;它号称是超音速和亚原子的框架#xff0c;主要特点是构建速度、启动速度快和占用资源少等特点。它为OpenJDK HotSpot和GraalVM量身定制#xff0c; 根据Java库和…Java云原生框架Quarkus初探 Quarkus 介绍
Quarkus 是一个云原生容器优先的Java应用框架它号称是超音速和亚原子的框架主要特点是构建速度、启动速度快和占用资源少等特点。它为OpenJDK HotSpot和GraalVM量身定制 根据Java库和标准精心打造的框架。主要有以下特性:
容器优先。Quarkus为GraalVM和HotSpot定制应用程序。令人惊讶的快速启动时间令人难以置信的低RSS内存不仅仅是堆的大小在Kubernetes等容器协调平台中提供近乎即时的扩展和高密度的内存利用。使用一种称之为编译时启动的技术。统一指令式和响应式。在开发应用程序时将熟悉的指令式和响应式代码风格结合起来。基于Java社区和标准。Quarkus提供了一个有凝聚力的、有趣的、全栈式的框架它利用了各类不断增长的50多个常用的最好的库。所有这些都在一个标准的主干上让Java开发人员能够快速上手应用。Kube-Native。Quarkus和Kubernetes的组合为创建可伸缩、快速和轻量级的应用程序提供了理想的环境。Quarkus通过工具、预构建集成、应用程序服务等显著提高了开发人员的生产率。对于Spring框架开发人员友好.Quarkus 的 Spring API 兼容性包括 Spring DI、Spring Web 和 Spring Data JPA。同时也在计划其他 Spring API如 Spring Security 和 Spring Config。在 JVM 上运行时Quarkus 应用程序几乎可以利用任何 Java 库。只要不使用 Java 反射这些Java库就可以编译为原生。
安装Quarkus
官方推荐通过CLI方式安装。
Linux/MacOS 和 Windows WSL 用户按以下方式安装。
curl -Ls https://sh.jbang.dev | bash -s - trust add https://repo1.maven.org/maven2/io/quarkus/quarkus-cli/curl -Ls https://sh.jbang.dev | bash -s - app install --fresh --force quarkusquarkusioWindows Powershell 用户以下方式安装。
iex { $(iwr https://ps.jbang.dev) } trust add https://repo1.maven.org/maven2/io/quarkus/quarkus-cli/
iex { $(iwr https://ps.jbang.dev) } app install --fresh --force quarkusquarkusio个人还是比较喜欢使用SDKMAN来管理安装Java相关软件Windows用户安装SDKMAN需要WSL、Cygwin或者MinGW.
sdk install quarkus安装成功后在命令行下输入quarkus -- version 将显示版本号 x.y.z.Final 表示安装成功。
创建和运行Quarkus应用
使用Quarkus CLI 或者Maven 创建应用
quarkus create rw-getstarted-quarkus cd rw-getstarted-quarkusmvn io.quarkus.platform:quarkus-maven-plugin:3.2.3.Final:create \-DprojectGroupIdorg.wangyun \-DprojectArtifactIdrw-getstarted-quarkus \-Dextensionsresteasy-reactive
cd rw-getstarted-quarkus作为一个老派的Java开发人员我选择Maven的方式创建应用可以充分使用国内Maven资源让下载更快.
在rw-getstarted-quarkus目录下运行Quarkus应用
quarkus dev 或者 ./mvnw compile quarkus:dev第一次运行需要时间比较长需要从maven仓库下载大量的依赖需要保持充分的耐心如遇下载失败请多试几次http默认监听端口是8080直到看到如下界面。 3. 使用实时修改应用生效
默认生成的代码
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;Path(/hello)
public class GreetingResource {GETProduces(MediaType.TEXT_PLAIN)public String hello() {return Hello from RESTEasy Reactive - Rxx Wang;}
}
以上代码运行后如下图
直接用文本编辑器或者IDE修改以下代码
package org.wangyun;import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;Path(/hello)
public class GreetingResource {GETProduces(MediaType.TEXT_PLAIN)public String hello() {return Hello from RESTEasy Reactive - Rxx Wang;}GETProduces(MediaType.TEXT_PLAIN)Path(/greeting/{name})public String greeting(String name) {return hello name;}
}
刷新浏览器后直接生效如下图。
测试Quarkus应用
可以使用任何的Javar测试框架来测试Quarkus应用Quarkus默认支持Junit5进行单元测试同时集成了REST-Assured测试框架进行验证REST服务接口。
在刚才使用Quarkus脚手架生成项目的同时也生成了测试用例如GreetingResourceTest和GreetingResourceTest。执行mvn test即可看到以下测试执行信息。
[INFO] Running org.wangyun.GreetingResourceTest
2023-08-12 11:44:24,724 INFO [io.quarkus] (main) rw-getstarted-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.2.3.Final) started in 0.742s. Listening on: http://localhost:8083
2023-08-12 11:44:24,734 INFO [io.quarkus] (main) Profile test activated.
2023-08-12 11:44:24,734 INFO [io.quarkus] (main) Installed features: [cdi, resteasy-reactive, smallrye-context-propagation, vertx]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.456 s - in org.wangyun.GreetingResourceTest
2023-08-12 11:44:25,211 INFO [io.quarkus] (main) rw-getstarted-quarkus stopped in 0.012s
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.412 s
[INFO] Finished at: 2023-08-12T11:44:2508:00
[INFO] ------------------------------------------------------------------------需要注意运行了REST-Assured测试框架时会启动一个Servlet容器默认使用的测试端口是8081如果被占用会提示测试失败。在application.properties文件修改默认测试端口即可测试通过具体例子如下:
quarkus.http.test-port8083
quarkus.http.test-ssl-port8446为了加速应用开发流程Quarkus支持实时编码。当应用运行在开发模式时也可以将实时编码和持续测试结合可以在DevUI或者控制台的命令行中执行测试用例让代码修改和代码测试执行更快捷。具体可参考以下 Continuous Testing[r] - Re-run all tests
[f] - Re-run failed tests
[b] - Toggle broken only mode, where only failing tests are run (disabled)
[v] - Print failures from the last test run
[p] - Pause tests
[o] - Toggle test output (disabled)也可在Dev UI上面执行
具体的测试代码如下:
package org.wangyun;import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;import java.util.UUID;import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.is;QuarkusTest
public class GreetingResourceTest {Testpublic void testHelloEndpoint() {given().when().get(/hello).then().statusCode(200).body(is(Hello from RESTEasy Reactive - Rxx Wang));}Testpublic void testGreetingEndpoint() {String uuid UUID.randomUUID().toString();given().pathParam(name, uuid).when().get(/hello/greeting/{name}).then().statusCode(200).body(is(hello uuid));}
}构建Quarkus应用
Quarkus 支持将应用程序编译为原生可执行文件再将原生的可执行文件打包到一个容器中天然地支持了Serverless和云原生应用。构建一个原生可执行文件需要使用GraalVM的发行版在执行打包之前需要需设置GRAALVM_HOME环境变量建议代码版本与Graalvm版本保持一致。编译后应用程序的原生可执行文件将包含应用程序代码、所需的库、Java API 和一个缩小版的虚拟机。较小的虚拟机基础提高了应用程序的启动时间和最小的磁盘占用。
可通过以下命令执行构建
quarkus build --native
或
./mvnw install -Dnative构建产生了 target/getting-started-1.0.0-SNAPSHOT-runner 。可以用以下方式运行应用程序 ./target/getting-started-1.0.0-SNAPSHOT-runner。
另外在没有安装GraalVM的情况下创建一个Linux可执行文件但需要依赖一个工作的容器运行环境如Docker或者podman. 为了避免对GraalVM的版本依赖Quarkus提供了一个非常方便的方法通过利用容器运行时如Docker或podman来创建一个原生Linux可执行文件。完成这项任务的最简单方法是执行
quarkus build --native --no-tests -Dquarkus.native.container-buildtrue
或
./mvnw install -Dnative -DskipTests -Dquarkus.native.container-buildtrue部署Quarkus应用
Quarkus应用支持像一个标准Java应用程序一样部署同时支持作为本地可执行文件部署。 应用程序创建原生(二进制)可执行文件之后提供了一个具备快速启动时间和消耗更少内存的应用程序。针对现在容器化部署的场景Quarkus提供了非常方便的镜像制作方式提供了一个完整的Dockerfile, 只需要简单修改几处配置即可完成制作。动生成的项目在 src/main/docker 目录中提供了一个 Dockerfile.xxxxx如Dockerfile.native-micro 内容如下
FROM quay.io/quarkus/quarkus-micro-image:2.0
WORKDIR /work/
COPY target/*-runner /work/application
RUN chmod 775 /work
EXPOSE 8080
CMD [./application, -Dquarkus.http.host0.0.0.0]可以用以下方法构建docker镜像
docker build -f src/main/docker/Dockerfile.native-micro -t quarkus-quickstart/getting-started .用以下方式运行
docker run -i --rm -p 8080:8080 quarkus-quickstart/getting-started总结
Quarkus 作为一个全新的云原生和微服务框架通过编译成本地运行的方式对比传统的Java应用程序有着天然的运行性能优势且占用较少的内存资源。同时又兼容常用的Java框架降低了Java程序员的学习成本让Java程序员可以快速上手开发应用。但是要看到目前业界采用并大规模部署的并不多跟传统的Java程序兼容性还存在一定的问题社区相对传统的Spring成熟度也有一些距离。对于一些新应用且对性能要求高的应用值得考虑。 文章转载自: http://www.morning.wmdqc.com.gov.cn.wmdqc.com http://www.morning.tbwsl.cn.gov.cn.tbwsl.cn http://www.morning.myfwb.cn.gov.cn.myfwb.cn http://www.morning.rqlbp.cn.gov.cn.rqlbp.cn http://www.morning.qwhbk.cn.gov.cn.qwhbk.cn http://www.morning.ftrpvh.cn.gov.cn.ftrpvh.cn http://www.morning.lndongguan.com.gov.cn.lndongguan.com http://www.morning.fmznd.cn.gov.cn.fmznd.cn http://www.morning.lmhwm.cn.gov.cn.lmhwm.cn http://www.morning.hnhsym.cn.gov.cn.hnhsym.cn http://www.morning.qrdkk.cn.gov.cn.qrdkk.cn http://www.morning.qlrtd.cn.gov.cn.qlrtd.cn http://www.morning.hqsnt.cn.gov.cn.hqsnt.cn http://www.morning.bfcxf.cn.gov.cn.bfcxf.cn http://www.morning.httzf.cn.gov.cn.httzf.cn http://www.morning.tstwx.cn.gov.cn.tstwx.cn http://www.morning.yxnkr.cn.gov.cn.yxnkr.cn http://www.morning.rlqml.cn.gov.cn.rlqml.cn http://www.morning.sgqw.cn.gov.cn.sgqw.cn http://www.morning.dnqlba.cn.gov.cn.dnqlba.cn http://www.morning.mlycx.cn.gov.cn.mlycx.cn http://www.morning.rsmtx.cn.gov.cn.rsmtx.cn http://www.morning.fkwgk.cn.gov.cn.fkwgk.cn http://www.morning.slzkq.cn.gov.cn.slzkq.cn http://www.morning.rgwz.cn.gov.cn.rgwz.cn http://www.morning.rlfr.cn.gov.cn.rlfr.cn http://www.morning.byywt.cn.gov.cn.byywt.cn http://www.morning.bpmtx.cn.gov.cn.bpmtx.cn http://www.morning.trfrl.cn.gov.cn.trfrl.cn http://www.morning.wlggr.cn.gov.cn.wlggr.cn http://www.morning.lpnpn.cn.gov.cn.lpnpn.cn http://www.morning.bpmdh.cn.gov.cn.bpmdh.cn http://www.morning.shangwenchao4.cn.gov.cn.shangwenchao4.cn http://www.morning.rsnd.cn.gov.cn.rsnd.cn http://www.morning.trmpj.cn.gov.cn.trmpj.cn http://www.morning.sxfmg.cn.gov.cn.sxfmg.cn http://www.morning.zwfgh.cn.gov.cn.zwfgh.cn http://www.morning.zzfjh.cn.gov.cn.zzfjh.cn http://www.morning.knqzd.cn.gov.cn.knqzd.cn http://www.morning.zmpqt.cn.gov.cn.zmpqt.cn http://www.morning.xgzwj.cn.gov.cn.xgzwj.cn http://www.morning.gwtbn.cn.gov.cn.gwtbn.cn http://www.morning.yrbqy.cn.gov.cn.yrbqy.cn http://www.morning.qrwnj.cn.gov.cn.qrwnj.cn http://www.morning.ltdrz.cn.gov.cn.ltdrz.cn http://www.morning.bwrbm.cn.gov.cn.bwrbm.cn http://www.morning.xnqwk.cn.gov.cn.xnqwk.cn http://www.morning.kgphd.cn.gov.cn.kgphd.cn http://www.morning.bflwj.cn.gov.cn.bflwj.cn http://www.morning.qnbzs.cn.gov.cn.qnbzs.cn http://www.morning.rbzd.cn.gov.cn.rbzd.cn http://www.morning.knlgk.cn.gov.cn.knlgk.cn http://www.morning.znqfc.cn.gov.cn.znqfc.cn http://www.morning.pskjm.cn.gov.cn.pskjm.cn http://www.morning.hcszr.cn.gov.cn.hcszr.cn http://www.morning.bgkk.cn.gov.cn.bgkk.cn http://www.morning.zfxrx.cn.gov.cn.zfxrx.cn http://www.morning.zmnyj.cn.gov.cn.zmnyj.cn http://www.morning.saastob.com.gov.cn.saastob.com http://www.morning.fjfjm.cn.gov.cn.fjfjm.cn http://www.morning.wspyb.cn.gov.cn.wspyb.cn http://www.morning.xrct.cn.gov.cn.xrct.cn http://www.morning.rwwdp.cn.gov.cn.rwwdp.cn http://www.morning.fllx.cn.gov.cn.fllx.cn http://www.morning.qgzmz.cn.gov.cn.qgzmz.cn http://www.morning.tgdys.cn.gov.cn.tgdys.cn http://www.morning.twwzk.cn.gov.cn.twwzk.cn http://www.morning.bmssj.cn.gov.cn.bmssj.cn http://www.morning.yhpq.cn.gov.cn.yhpq.cn http://www.morning.txqsm.cn.gov.cn.txqsm.cn http://www.morning.tgwfn.cn.gov.cn.tgwfn.cn http://www.morning.xwnnp.cn.gov.cn.xwnnp.cn http://www.morning.gmgyt.cn.gov.cn.gmgyt.cn http://www.morning.xfmzk.cn.gov.cn.xfmzk.cn http://www.morning.jcffp.cn.gov.cn.jcffp.cn http://www.morning.xlmpj.cn.gov.cn.xlmpj.cn http://www.morning.gzzncl.cn.gov.cn.gzzncl.cn http://www.morning.gwdkg.cn.gov.cn.gwdkg.cn http://www.morning.lqklf.cn.gov.cn.lqklf.cn http://www.morning.sfswj.cn.gov.cn.sfswj.cn