前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Quarkus 云原生java开发框架1: hello world

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

原创
作者头像
谢正伟
发布2020-05-22 16:07:49
1.4K0
发布2020-05-22 16:07:49
举报
文章被收录于专栏:云原生研究云原生研究

Quarkus 是啥

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

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

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

环境准备

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

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

开始coding

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

代码语言:txt
复制
mvn io.quarkus:quarkus-maven-plugin:1.4.2.Final:create \
    -DprojectGroupId=com.tencent \
    -DprojectArtifactId=fastest-quarkus

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

代码语言:txt
复制
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;
    }
}

运行它:

代码语言:txt
复制
mvn compile quarkus:dev

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

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

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

编写 JSON restful 应用

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

代码语言:txt
复制
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,会报错。

代码语言:txt
复制
Could not find MessageBodyWriter for response object of type: com.tencent.fastestquarkus.HelloResource$1 of media type: application/json

增加 json 序列化依赖。

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

代码语言:txt
复制
mvn quarkus:list-extensions

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

添加我们需要的扩展:

代码语言:txt
复制
mvn quarkus:add-extension -Dextensions=resteasy-jsonb

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

刷一下,有结果了

代码语言:txt
复制
{
  "age": 23,
  "gender": false,
  "name": "Bear"
}

云原生

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

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

使用 GraalVM 打包 native 应用

代码语言:txt
复制
mvn clean package -Pnative

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

打包后,直接运行:

代码语言:txt
复制
target/fastest-quarkus-1.0-SNAPSHOT-runner

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Quarkus 是啥
  • 环境准备
  • 开始coding
  • 编写 JSON restful 应用
  • 云原生
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档