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

\\

在今年早些时候的Greach大会上,OCI首席软件工程师Graeme Rocher和Grails\u0026amp;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等)进行集成。

\

\\

相关资源

\\

  • Object Computing的新框架将在构建微服务和无服务器应用方面成为Spring Boot的竞争对手(商业资讯,2018年9月30日)\
  • Micronaut 1.0 RC1以及预编译的威力(OCI,2018年9月30日)\
  • Micronaut 1.0 RC2以及预编译的威力(OCI,2018年10月8日)\
  • Micronaut教程:如何使用JVM框架构建微服务(InfoQ,2018年10月5日)\
  • Micronaut 1.0 RC3及Micronaut Test 1.0 RC 1发布(2018年10月16日)\

查看英文原文:The Road to Micronaut 1.0 - A JVM-Based Full-Stack Framework

全栈JVM框架Micronaut通向1.0版本之路相关推荐

  1. 【python自动化测试】以pytest为底层的全栈自动化测试框架开发

    以实用为导向,把Pytest 自动化测试框架,用到极致! 所有内容,以视频方式进行持续输出和优化, 更多,更精彩的内容,请点击视频链接: 视频链接 有喜欢和想要学习自动化测试的朋友,或者正在公司正在抓 ...

  2. 腾讯开源框架Angel推出3.0版本:全栈机器学习平台

    36氪获悉,腾讯首个AI开源项目Angel正式发布3.0版本.Angel 3.0尝试打造一个全栈的机器学习平台,功能特性涵盖了机器学习的各个阶段:特征工程,模型训练,超参数调节和模型服务.从1.0到3 ...

  3. wireshark使用全解笔记【2.4.5.0版本】

    前言 西普教育的铁三训练营的课程有很详细的关于wireshark视频教程,正好对wireshark这款神器也不是太熟悉,一边学习补漏,一边做一个学习笔记与大家分享 页面功能简介 主界面中,波动的线代表 ...

  4. 活久见!月薪30k的小程序全栈开发到底有多难?

    10年前,公司的标配是门户网站,造就了一批网站工作室.随着移动互联网大潮兴起,App又成了企业标配,IOS和Android开发赚的盆满钵满.然而App导致的手机内存告急,无止尽的信息推送,让微信小程序 ...

  5. 华为全栈云如沐春风 AI成点睛之笔

    更多精彩,请点击上方蓝字关注我们! 华为发布了全栈私有云解决方案FusionCloud 6.5和Atlas智能计算平台,并宣布了新一代关键业务云存储FusionStorage的重大升级. 无论是从客户 ...

  6. 想客户之所想 华为全栈云加速行业云化创新

    如今,行业用户从"想上云"到"真正将业务和数据迁移到云上",这中间一直存在一条鸿沟.无论是运营商.金融行业,还是政府.大中型企业,他们都拥有一套比较成熟的IT体 ...

  7. 悟空CRM(9.0版本)V9.0_20190407 更新日志

    百度智能云 云生态狂欢季 热门云产品1折起>>>   悟空CRM9.0 主要技术栈 后端框架:ThinkPHP 5.0.2 前端MVVM框架:Vue.JS 2.5.x 路由:Vue- ...

  8. 腾讯AI开源框架Angel 3.0重磅发布:超50万行代码,支持3种算法,打造全栈机器学习平台...

    出品 | AI科技大本营(ID:rgznai100) [导语]2019年8月22日,腾讯首个AI开源项目Angel正式发布3.0版本.Angel 3.0尝试打造一个全栈的机器学习平台,功能特性涵盖了机 ...

  9. 从 0 到 1 设计、编码、搭建个人知识付费应用(Remix 全栈框架、集成支付和用户、React、TailwindCSS、Prisma)

    感兴趣或者喜欢的请点赞关注我,本文超过 100 个赞正式动工. 变更记录 2022-07-30 初稿,设想提出 2022-07-31 添加需求草稿 系统概述 类似于个人博客系统,可以发布文章.页面及代 ...

最新文章

  1. iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处
  2. nginx出现404和403错误
  3. python中random是什么意思_Python代码中的“importrandom”是什么意思?
  4. hadoop学习5 搭建storm集群
  5. arcgis adf数据_使用ADF列表视图的主从数据
  6. liunx基本命令(文件系统的使用和查找命令)
  7. 浅说深度学习(1):核心概念
  8. Spring : BeanDefinition
  9. ipad如何与计算机连接网络连接不上,平板电脑网络连接不上怎么办
  10. HTML5响应式手机模板:h5手机抽奖游戏活动页面集合模板 HTML+CSS+JavaScript
  11. 苹果sf字体_字体基础知识
  12. 2022道路运输企业安全生产管理人员考试练习题及在线模拟考试
  13. decoct() 函数
  14. Invalid byte tag in constant pool 19
  15. 常见元素 – img元素
  16. Linux基础篇之权限的设定
  17. Excel在线常用工具
  18. UI设计 AndroidIOS开发推荐用色
  19. 解决电脑“自动修复 电脑未正确启动/无法修复你的电脑”
  20. 3ds Max: Advanced Materials 3DS Max 教程之高级材质 Lynda课程中文字幕

热门文章

  1. 这个小学生毕业典礼被全世界围观:疫情之下开脑洞,《我的世界》还能这样玩!中国网友:作业写不完的我感到嫉妒...
  2. 2D图片3秒变立体,变换视角流畅自然:Adobe实习生的智能景深算法,登上顶级期刊...
  3. fiddler展示serverIP方法
  4. rabbitmq3.5.1 原理和集群安装
  5. 课后作业:字符串加密
  6. iOS:MBProgressHUD的基本使用
  7. URAL 1993 This cheeseburger you don't need 模拟题
  8. Eclipse工程标准目录层次结构
  9. ubuntu 12.04.1升级至ubuntu 12.10出现gcc-4.7依赖库错误的解决办法
  10. linux的passwd命令的作用,Linux passwd 命令的使用