什么?你居然还不知道Quarkus?

1,613 阅读4分钟

小知识,大挑战!本文正在参与「程序员必备小知识」创作活动。

前言

随着微服务和容器技术的不断升级,对应用程序的要求也越来越高,除了最基础的“能快速高效响应请求”外,也要能够快速开发迭代,同时最好能在容器等环境中运行,应用的体积和内存占用也是越小越好。面对这些需求时,Java以及Java主流的开发框架被认为不如其他语言(比如Go)。

Quarkus的出现也许将会扭转这种局面,它采用容器优先的原则,是面向云原生时代的产物,但也能够很好的支持JVM虚拟机。如果你苦于Spring全家桶启动速度慢、内存占用高等问题,那么尝试过Quarkus之后想必会爱上它。尤其是开发阶段的热重载简直是福音,再也不用依赖插件或者点根烟等着重启应用了。

当然这里没有踩一捧一的意思,每个框架都有自己的局限性,不同的时代诞生不同的产品,根据业务需求选择合适自己的框架最重要,任何脱离业务讨论的技术都是耍流氓~

创建应用

废话不多说,牛逼吹出去了,那么直接掏出键盘,我们来一梭子代码。

006ARE9vgy1ft26xsct4yj30ec0go0ti.jpg

依赖环境

  • 一个IDE(Intellij IDEA永远的神)
  • JDK 11+
  • Apache Maven 3.8.1+(或者Gradle)

创建项目

目前有很多种方式创建项目,比如直接用IDEA创建,也可以在官网的Start Coding处生成(类似Spring的Spring Initializr),还可以使用git克隆quickstart项目,更可以通过mvn进行创建,这里我们介绍更常用的两种方法。

使用IDEA

这是最推荐的做法,无论是创建还是运行开发,都提供了极大的便利性。

如果你使用的是新版IDEA,那么在File-New Project中可以直接创建Quarkus应用,Example code可以勾选也可以不勾。

image.png

选择RESTEasy JAX-RS,用来实现REST请求。

image.png

点击Finish后,就会自动下载代码模板,稍等片刻后打开项目。

image.png

Maven(Gradle)依赖下载完毕后,可以看到这样的项目结构,下面我们就开始进行开发了。

image.png

使用官网START CODING

打开code.quarkus.io

image.png

点击下载压缩包

image.png

下载完成后解压缩,再通过IDE打开,等待Maven(Gradle)自动下载依赖文件,下载完成后我们看到如下的项目结构

image.png

可以看到项目结构与IDEA创建的基本一致,那么我们开始表演。

REST请求

在上文创建的项目中,查看src/main/java/com/demo/GreetingResource.java(或ExampleResource.java)文件,其内容如下:

package com.demo;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class GreetingResource {

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

这样就完成了最简单的REST请求,当访问/hello时,返回Hello RESTEasy文本。

可以看到Quarkus的开发过程甚至各种注解与SpringBoot相似,可见Spring开发人员能够相对轻松的转向Quarkus。

简单解释一下各个注解的意思:

  • @Path 相当于Spring的@Controller + @RequestMapping
  • @GET 相当于Spring的@GetMapping
  • @Produces 相当于Spring@RequestMappingproduces属性

运行程序

使用Quarkus的话,不需要单独创建Application启动程序,可以有,但没必要。

005PeXV6gy1gri5o6icn9j30pt0sqwi4.jpg

使用IDEA启动

如果是IDEA创建的项目,那么可以直接运行

image.png

image.png

image.png

点击OK

image.png

点击DEBUG按钮启动程序

image.png

启动后,可以看到控制台输出的日志,当出现如下日志时,说明启动成功

image.png

使用./mvn启动

打开终端,进入项目目录,运行命令./mvnw compile quarkus:dev

image.png

启动成功~

ceeb653ejw1fajn3tbhocj20b40b4q3j.jpg

测试请求

启动成功后,通过curl请求接口

$ curl -w "\n" http://localhost:8080/hello
Hello RESTEasy

返回了Hello RESTEasy

这时候我们来修改一下程序,给ExampleResource添加一个新的请求/2,看看Quarkus的热重载有多爽。

package com.example;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class ExampleResource {
    
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Hello RESTEasy";
    }
    
    @GET
    @Path("2")
    @Produces(MediaType.TEXT_PLAIN)
    public String hello2() {
        return "Hello 2";
    }
}

代码写完之后,请求新增的/hello/2接口:

$ curl -w "\n" http://localhost:8080/hello/2
Hello 2

结果直接就出来了,这样的开发体验,不可谓不爽。

006ARE9vgy1g0pmarhyzsg306a06atof.gif

收尾

到这里我们就完成了一个基础的Quarkus应用,但离实际的项目开发仍然有一定距离,这里就要提一手私货。在之前的业余时间中,我开发了Quarkus的快速开发脚手架Quarkus-Vue-Admin,目前已经实现了基础的权限管理、代码生成等功能,拿来即用。利用这个脚手架,可以更容易上手Quarkus开发实际项目,基本可以拿来即用。

目前这个脚手架还存在不少问题,业务时间有限,也希望有想法的朋友们能一起进行开发。

未来我将利用Quarkus-Vue-Admin开发真实项目案例,在开发的过程中对脚手架进行版本迭代,为Quarkus的发展与传播贡献一份力量。

除了Quarkus-Vue-Admin以外,群里的大佬正在规划Quarkus的微服务方案,有兴趣的小伙伴可以加群探讨:871808563