Quarkus 云原生java开发框架 1: hello world

邱秋 • 2020年05月22日 • 阅读:910 • java

Quarkus 是啥

夸克,超光速,亚原子的 Java

为云原生而生,为消息驱动的微服务而生。

人话:大幅提高启动速度,大幅减少内存占用,内置了很多优选组件/扩展。

环境准备

既然是一个 java 应用,那应该是无需什么准备的,jdkmaven 这些都有了。

jdkmaven 请用最新版(jdk≥1.8 && maven≥3.6.2)。

开始coding

按照官网的指导,使用 mvn 命令新建一个应用。

mvn io.quarkus:quarkus-maven-plugin:1.4.2.Final:create \
    -DprojectGroupId=com.tencent \
    -DprojectArtifactId=fastest-quarkus

用 ide 打开,新增一个类 com.tencent.fastestquarkus.HelloResource。

package com.tencent.fastestquarkus;

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

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

    @GET
    @Path("/name/{name}")
    @Produces(MediaType.TEXT_PLAIN)
    public String sayHello(@PathParam("name") String name){
        return "你好 " + name;
    }
}

运行它:

mvn compile quarkus:dev

打开 http://localhost:8080/ 就有了页面了。这是模板自动生产的页面。

打开 http://localhost:8080/hello/name/wellxie 这个则显示了 "你好 wellxie"。

通过命令行启动的 Quarkus 是热更新的!!!

编写 JSON restful 应用

继续增加一个方法:输出一个 json

package com.tencent.fastestquarkus;

import com.tencent.fastestquarkus.model.Person;

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

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

    //...

    @GET
    @Path("/person")
    @Produces(MediaType.APPLICATION_JSON)
    public Response person(){
        return Response.ok(new Person(){
            {
                setAge(23);
                setGender(false);
                setName("Bear");
            }
        }).build();
    }
}

运行这个url,会报错。

Could not find MessageBodyWriter for response object of type: com.tencent.fastestquarkus.HelloResource$1 of media type: application/json

增加 json 序列化依赖。

先查看一下有哪些内置插件:

mvn quarkus:list-extensions

哇:好多。内置插件基本满足需求,Quarkus 号称精选了最优类库。

添加我们需要的扩展:

mvn quarkus:add-extension -Dextensions=resteasy-jsonb

安装完成,发现只是增加了依赖而已。但这个也比去 mvn 中央库去找要方便些。

刷一下,有结果了

{
  "age": 23,
  "gender": false,
  "name": "Bear"
}

云原生

其实,实现了 restful,再部署到 istio,微服务便完成大半了。

但要体现 Quarkus 的能力,得用 GraalVM 这个。

使用 GraalVM 打包 native 应用

mvn clean package -Pnative

这里会报错,需要安装一下 GraalVM 环境,下载 GraalVM 并安装 native-image 搞定。

打包后,直接运行:

target/fastest-quarkus-1.0-SNAPSHOT-runner

Dockerfile 中,把这个文件打包进去并执行就好了。

下一篇会继续探讨更多 Qarkus 的云原生和微服务的细节。

我,秦始皇,打钱!