Quarkus 是啥
夸克,超光速,亚原子的 Java
。
为云原生而生,为消息驱动的微服务而生。
人话:大幅提高启动速度,大幅减少内存占用,内置了很多优选组件/扩展。
环境准备
既然是一个 java
应用,那应该是无需什么准备的,jdk
,maven
这些都有了。
但 jdk
和 maven
请用最新版(jdk≥1.8 && maven≥3.6.2)。
开始coding
按照官网的指导,使用 mvn 命令新建一个应用。
代码语言:javascript复制mvn io.quarkus:quarkus-maven-plugin:1.4.2.Final:create
-DprojectGroupId=com.tencent
-DprojectArtifactId=fastest-quarkus
用 ide 打开,新增一个类 com.tencent.fastestquarkus.HelloResource。
代码语言:javascript复制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;
}
}
运行它:
代码语言:javascript复制mvn compile quarkus:dev
打开 http://localhost:8080/
就有了页面了。这是模板自动生产的页面。
打开 http://localhost:8080/hello/name/wellxie
这个则显示了 "你好 wellxie"。
通过命令行启动的 Quarkus 是热更新的!!!
编写 JSON restful 应用
继续增加一个方法:输出一个 json
代码语言:javascript复制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,会报错。
代码语言:javascript复制Could not find MessageBodyWriter for response object of type: com.tencent.fastestquarkus.HelloResource$1 of media type: application/json
增加 json 序列化依赖。
先查看一下有哪些内置插件:
代码语言:javascript复制mvn quarkus:list-extensions
哇:好多。内置插件基本满足需求,Quarkus 号称精选了最优类库。
添加我们需要的扩展:
代码语言:javascript复制mvn quarkus:add-extension -Dextensions=resteasy-jsonb
安装完成,发现只是增加了依赖而已。但这个也比去 mvn 中央库去找要方便些。
刷一下,有结果了
代码语言:javascript复制{
"age": 23,
"gender": false,
"name": "Bear"
}
云原生
其实,实现了 restful
,再部署到 istio
,微服务便完成大半了。
但要体现 Quarkus
的能力,得用 GraalVM
这个。
使用 GraalVM
打包 native
应用
mvn clean package -Pnative
这里会报错,需要安装一下 GraalVM
环境,下载 GraalVM
并安装 native-image
搞定。
打包后,直接运行:
代码语言:javascript复制target/fastest-quarkus-1.0-SNAPSHOT-runner
Dockerfile
中,把这个文件打包进去并执行就好了。
下一篇会继续探讨更多 Qarkus 的云原生和微服务的细节。