Quarkus框架入门之一:Quarkus框架介绍及简单示例


开篇

最近几年,Spring全家桶横扫其它Java框架,已然成为事实标准,单体应用使用Spring Framework+Spring Boot,服务治理Spring Cloud,生态完善,各种组件层出不穷。曾经还玩过JFinal和Nutz等国内的开发框架,但是仅仅是私下玩玩,实际工作过程中,还是Spring的天下,很少会选择其它小众的框架(谁知道会不会有填不完的大坑)。
最近在社区闲逛的时候,发现一个Red Hat开源的Java框架Quarkus,定位为GraalVM和OpenJDK HotSpot量身定制的一个Kurbernetes Native Java框架。虽然开源时间较短,但是生态方面也已经达到可用的状态,自身包含扩展框架,已经支持像Netty、Undertow、Hibernate、JWT等框架,足以用于开发企业级应用,用户也可以基于扩展框架自行扩展。

术语简介

  • Cloud Native Application:即云原生应用,是由 Pivotal 的Matt Stine在2013年提出的,个人认为所谓云原生应用也是SAAS服务的一种,针对近年来云计算平台的发展,SAAS服务进一步发展的产物。
  • Graalvm:Oracle在2018年开源的一个通用型虚拟机,可以用来构建多语言应用,也可以简单地用来编译和构建Java应用,甚至可以将Java应用构建成Native Image,以提高应用的启动速度以及降低应用的内存占用,目前还是一个实验性产品。
  • 12-Factor::全称为“The Twelve-Factor App”,可以认为是SAAS服务的参考标准,对SAAS服务开发的各个方面都提出了明确的参考标准,但是就像Restful API一样,这是一个建议标准,每个开发人员理解都可能有偏差。

构建一个Quarkus应用

创建项目

  • 开发环境
    除了一般的Java开发环境外,你还需要额外安装Graalvm,用于构建Native应用。
    Graalvm安装参考:Install GraalVM

  • 创建项目
    你可以使用Maven命令快速创建一个Quarkus应用,也可以自行搭建。
    方式一:快速创建命令如下(来源于官网):

<?xml version="1.0" encoding="UTF-8"?>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    >4.0.0>
    >cn.centychen>
    >quarkus-simple-example>
    >1.0-SNAPSHOT>
    >
        >3.0.0-M3>
        >0.14.0>
    >
    >
        >
            
            >
                >io.quarkus>
                >quarkus-bom>
                >${quarkus.version}>
                >pom>
                >import>
            >
        >
    >
    >
        
        >
            >io.quarkus>
            >quarkus-resteasy>
        >

        
        >
            >io.quarkus>
            >quarkus-junit5>
            >test>
        >

        
        >
            >io.rest-assured>
            >rest-assured>
            >test>
        >

    >
    >
        >
            >
                >maven-compiler-plugin>
                >3.8.0>
                >
                    >1.8>
                    >1.8>
                >
            >
            
            >
                >io.quarkus>
                >quarkus-maven-plugin>
                >${quarkus.version}>
                >
                    >
                        >
                            >build>
                        >
                    >
                >
            >
            
            >
                >maven-surefire-plugin>
                >${surefire-plugin.version}>
                >
                    >
                        >org.jboss.logmanager.LogManager>
                    >
                >
            >
        >
    >
>

编写Resource

编写Resource类,实际就是Restful接口,按照Restful思想,接口即资源,所以叫Resource挺贴切的。该类中实现一个/hello/{name}接口,参考如下:

mvn compile quarkus:dev

访问http://localhost:8080/hello/cent,返回如下:

  image.png

至此,一个简单的基于Quarkus框架的Restful服务已经搭建好了,好像跟Spring Boot比较,除了启动方式,其它没太大差别哦?下面才是差异的地方。

构建Native Image

Quarkus定位是一个Native Java的框架,那么怎样将项目构建成Native应用呢?只需要两个步骤:

  • pom.xml中增加构建profile配置,如下:
./quarkus-simple-example-1.0-SNAPSHOT-runner 
2019-05-15 12:02:31,199 INFO  [io.quarkus] (main) Quarkus 0.14.0 started in 0.012s. Listening on: http://[::]:8080
2019-05-15 12:02:31,201 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy]

总结

上面仅仅是Quarkus的一个简单示例,搭建一个Restful服务并构建成Native Image。完成这一步之后,你还可以将Native Image构建成Docker镜像并使用Kubernetes进行部署,后面的步骤与Spring Boot应用构建和发布没太大差异,在本文就不说了。
Quarkus目前还是一个很轻量级的框架,使用简单且启动超快,希望后续版本演进能够保持足够的轻量,如果变得像Spring全家桶那么庞大,估计启动也快不了了~

示例源码

  • 码云:centychen/quarkus-simple-example

参考文章及网站

  • The Twelve-Factor App
  • Graalvm
  • Quarkus
    转自:https://www.jianshu.com/p/e490043cc3eb