全栈JVM框架Micronaut通向1.0版本之路

栏目: Java · 发布时间: 5年前

内容简介:经过一年的发展,随着在今年早些时候的三个候选版本包括以下新特性:

经过一年的发展,随着 Object Computing (OCI)发布候选版本 RC1RC2RC3Micronaut 1.0 在过去三周内加速了。Micronaut是一个基于JVM的全栈框架,用于创建可以用 Java 、Groovy和Kotlin编写的基于微服务的应用程序。

在今年早些时候的 Greach大会 上,OCI首席软件工程师 Graeme Rocher 和Grails&Micronaut产品主管 介绍 了Microaut。随后,在5月底,Micronaut 开放了源代码。

三个候选版本包括以下新特性: GraalVM 本地镜像支持、 Swagger (OpenAPI)编译时支持、编译时验证以及编译时映射注解。Micronaut的测试框架 Micronaut Test 1.0 RC1 也是在RC3中发布的。

Micronaut使用了依赖注入和预编译(AOT)。以下是来自其 网站 的介绍:

基于反射的IoC框架为代码中的每个字段、方法和构造函数加载和缓存反射数据,而使用Micronaut,应用程序的启动时间和内存消耗将不受代码库大小的限制。

Netty 为基础,Micronaut提供了他们自己的非阻塞Web服务器。为了减少内存消耗,Micronaut反应式客户端可以用声明的方式构建,并在编译时实现。

“配置文件(Profiles)”

Micronaut内置了几个 配置文件 ,用于生成可以运行的应用程序框架,作为开发Web或命令行应用程序的构建块。每个配置文件由一个模板和特定于该配置文件的附加命令组成。例如, create-app 启动服务的配置文件,其中包含用于构建控制器( create-controller )和客户端( create-client )类的附加命令,这些命令在其他配置文件中可能不可用。

入门

下载并安装Micronaut 之后,可以通过 命令行或Microaut shell 创建应用程序。受到 Grails 中人们熟知的命令行接口的启发,Micronaut遵循了同样的应用程序创建概念。考虑以下命令:

$ mn create-app org.redlich.demo

如下所示,这将创建一个Java应用程序和Gradle项目,根文件夹为 demo ,包名为 org.redlich



注意,其中包含了测试目录结构、Dockerfile和YAML配置文件。文件 micronaut-cli.yml 提供了关于项目的具体信息:

profile: service
defaultPackage: org.redlich
---
testFramework: junit
sourceLanguage: java

生成的Java源代码文件 Application.java 启动了一个Micronaut服务器:

package org.redlich;
import io.micronaut.runtime.Micronaut;
public class Application {
public static void main(String[] args) {
Micronaut.run(Application.class);
}
}

构建并运行这个初步应用:

$ ./gradlew run



向上面的项目中添加一个控制器:

$ mn create-controller HelloController

如下所示,文件 HelloController.javaHelloControllerTest.java 被添加到项目。



在生成的 HelloController.java 文件中,注意下 @Controller 注解中的端点如何根据 HelloController 控制器的名称命名为“ /hello ”:

package org.redlich;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.HttpStatus;
@Controller("/hello")
public class HelloController {
@Get("/")
public HttpStatus index() {
return HttpStatus.OK;
}
}

Java和Gradle是默认的语言和构建工具。要生成Groovy和Kotlin应用程序,请执行下面的命令:

$ mn create-app org.redlich.demo --lang groovy
$ mn create-app org.redlich.demo --lang kotlin

也支持生成Maven项目:

$ mn create-app org.redlich.service --build maven
$ ./mvnw compile exec:exec

在Micronaut教程第一部分中,OCI软件工程师 Sergio del Amo Caballero 演示了如何使用Java、Groovy和Kotlin三种语言创建三个微服务。Rocher向InfoQ介绍了这个最新版本。

InfoQ:是什么促使OCI开发了这个新的微服务框架?

Graeme Rocher: 在过去的几年里,技术领域发生了巨大的变化,特别地,如果你看看类似 Docker 、Kubernetes这样的系统以及无服务器运动,你会发现,它们实际上都针对低内存微服务和低开销应用程序而进行了优化。其结果是,像 Go 和Node这样的语言在这些平台上体现出了比Java更显著的吸引力,因为它们具有出色的冷启动性能和内存消耗。有一个非常好的问题,可以问下自己,如果Docker和Kubernetes团队有各种技术选项,为什么要选择Go而不是Java来实现这些平台?在我看来,答案很简单:如果他们用Java编写了那些技术栈,并且有了今天这些技术选项,那么我们就都需要一台超级计算机才能让笔记本电脑在本地运行它们。

原因是多种多样的。一方面是语言层面的限制。JVM是一项惊人的技术成果,但对于短时间运行的操作(如无服务器函数),它提供的优化往往就不存在了,但是,你仍然需要拖着整个JVM来运行你的应用程序。像GraalVM这样的项目有可能通过将Java应用程序编译成本地镜像来解决这些限制,但是,坦率地说,框架设计人员在提高Java应用程序的效率方面有很大的作用。

在框架层,传统的JVM框架(如Spring和Java/Jakarta EE)已经有超过10年的历史了,那时,每个人都在部署单体应用程序,它们主要是围绕着反射和注解的运行时分析来构建。这种方法的问题在于,由于各种各样的问题,从类型擦除,到有限的注解API,再到反射逻辑的相对缓慢,所以,几乎不可能构建一个Java框架,启动速度超快,而内存消耗超低。框架运行时的负担是巨大的。如果你观察一下Spring在运行时所做的工作,就会发现这有些不可思议,从用ASM解析字节代码来生成注解元数据,到积极缓存反射信息以避免不可避免的重复读取减慢速度。在缓存所有这些运行时生成的信息与实现快速启动和低内存消耗的目标之间存在着不可调和的冲突。

我们相信,Micronaut是面向未来的框架的基础,通过消除所有反射的使用,以及在编译时通过一组注解处理器和执行预编译(AOT)的AST转换,生成所有注解元数据、代理和框架基础设施,消除这种矛盾。这使得Micronaut能够实现极快的启动速度、低内存消耗,并且实现与GraalVM本地镜像兼容性的重大改进。

当然,Java生态系统有大量的项目是基于Java的,像Spring、Kafka、Cassandra、Hadoop、Grails等,它还有一个丰富的语言生态系统,包括Groovy、Scala、Kotlin、Java、Clojure等。因此,这也不全是和低内存占用的微服务与无服务器应用程序有关,有许许多多的工作负载仍然受益于JVM和JIT。然而,即使对于这些工作负载,我们也相信,通过在启动时间和内存消耗方面比其他框架更高效,Micronaut可以提供很多东西。

InfoQ:你们有计划在Micronaut中支持JVM语言Scala和/或Clojure吗?

Rocher::我们在构建Micronaut时已经考虑了多种语言,实际上,我们现在已经通过为每种语言创建一个公共的AST来支持Java、Kotlin和Groovy。我们计划在某个时候通过Scala编译器插件(参见 这里 )添加Scala支持,不过,如果Scala社区有人希望帮助我们加速这个过程,我们很乐意听取他们的建议。Clojure很有趣,关于如何实现Clojure支持,我们当然需要Clojure社区的输入。

InfoQ:既然GraalVM支持非JVM语言,是不是有一天可以使用GraalVM支持的语言构建Micronaut应用程序?

Rocher:我想可以肯定,它将促成“挎斗模式(sidecars)”,并且更容易与其他语言一起集成到一个Micronaut应用程序中。

InfoQ:您预计Micronaut正式版会在何时发布?

Rocher:Micronaut 1.0正式版将于10月23日发布。

InfoQ:Micronaut的路线图是什么样子,尤其是在正式版本发布之后?

Rocher:Micronaut 1.0就是要建立一个稳定的基线。由于Micronaut使用AOT编译,所以预编译元数据格式需要一个稳定的1.0版本。一旦1.0发布,我们计划与更多的技术(如RabbitMQ、Kubernetes、GRPC、GraphQL等)进行集成。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

设计原本

设计原本

Frederick P. Brooks, Jr. / InfoQ中文站、王海鹏、高博 / 机械工业出版社 / 2011-1-1 / 55.00元

无论是软件开发、工程还是建筑,有效的设计都是工作的核心。《设计原本:计算机科学巨匠Frederick P. Brooks的思考》将对设计过程进行深入分析,揭示进行有效和优雅设计的方法。 本书包含了多个行业设计者的特别领悟。Frederick P. Brooks, Jr.精确发现了所有设计项目中内在的不变因素,揭示 了进行优秀设计的过程和模式。通过与几十位优秀设计者的对话,以及他自己在几个设计......一起来看看 《设计原本》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具