Micronaut 简介
概念:Micronaut 是一个新一代基于 JVM 的全栈微服务框架,用于构建模块化的、易于测试的微服务应用程序和无服务器应用程序。同时,Micronaut 使用 Netty,并且对响应式编程提供一流的支持。对于 JVM 领域的全栈框架来说,Micronaut 是一个非常有前途的新成员。
特性:
- 快速启动时间-低内存消耗:基于反射的IoC框架为代码中的每个字段,方法和构造函数加载和缓存反射数据,而使用Micronaut,应用程序的启动时间和内存消耗不受代码库大小的限制。
- 适用于GRAALVM的MICRONAUT:使用GraalVM(GraalVM 是Oracle提供的一种新的通用虚拟机,它支持多语言运行时环境,并且能够将Java应用程序编译为本地机器代码),Micronaut应用程序可以在数十毫秒内启动!Micronaut具有不使用反射的依赖注入和面向方面的编程运行时。这使Micronaut应用程序更容易 在GraalVM上运行。
- 声明式,反应式,编译时HTTP客户端:以声明方式构建反应式HTTP客户端,该客户端在编译时实现,从而减少了内存消耗。
- 基于NETTY的非阻塞HTTP服务器:通过轻松的学习曲线,Micronaut的HTTP服务器使公开HTTP客户端可以使用的API变得尽可能容易。
- 快速简便的测试:在单元测试中轻松启动服务器和客户端,并立即运行它们。
- 高效的编译时依赖注入和AOP:Micronaut提供了一个不使用反射的简单的面向编译时面向方面的编程API。
- 构建完全反应和无阻塞的应用程序:Micronaut支持任何实现反应式流的框架,包括RxJava和Reactor。
- 原生云原生:内置了Micronaut的Cloud支持,包括对常见发现服务,分布式跟踪工具和云运行时的支持。
- 准备开发无服务器应用程序:Micronaut的低开销编译时DI和AOP使其非常适合为无服务器环境(如AWS Lambda)编写功能 。
- 专为构建弹性微服务而设计:分布式环境需要计划故障。Micronaut对重试,断路器和故障预置的内置支持可帮助您进行计划。
- 快速数据访问配置:Micronaut 提供了合理的默认值,这些默认值会自动配置您喜欢的数据访问工具包和API,从而使编写自己的集成变得容易。
Micronaut 历史及由来
Micronaut 的灵感来自于这些年作者使用 Spring、Spring Boot 和 Grails 构建从大型应用到服务应用的经历。Micronaut 旨在提供构建微服务所需要的一切工具,包含:
- 依赖注入(DI)和控制翻转(IoC)。
- 合理的默认值和自动配置。
- 配置及配置共享。
- 服务发现。
- HTTP 路由。
- 具有负载均衡的 HTTP 客户端。
同时,Micronaut 也致力于避免像 Spring、Spring Boot 和 Grails 中的弊端,通过:
- 快速启动。
- 减少内存占用。
- 极少的反射使用。
- 极少的代理使用。
- 简单的单元测试。
在以前,像 Spring 和 Grails 这些框架并不是被设计来在 server-less、安卓 Apps 或低内存占用的场景中运行。相反,Micronaut 则是为此而生。Micronaut 通过使用 Java 的 annotation processor 来实现以上功能,annotation processor 可以在任何支持其的 JVM 上使用,包括在使用 Netty 构建的 HTTP Server 和 Client 上。为了提供和 Spring 以及 Grails 相似的编程模型,这些 annotation processor 预编译了必要的元数据(Metadata)来进行依赖注入、定义 AOP 代理以及配置你的应用程序,使其能够在微服务环境中运行。
Micronaut 最新版说明
Micronaut 2.0.0 已经发布。此版本主要变化包括:
核心功能上现在支持 JDK 14,支持用 Groovy 3 编写的应用程序;改进了启动性能,新应用程序的启动时间快了约 20%;改进了 Bean 自我检查(Bean introspection)功能,以支持静态创建者方法、接口和枚举,这意味着可以在具有私有实现的接口上定义 bean introspection,例如:
import io.micronaut.core.annotation.Creator; @io.micronaut.core.annotation.Introspected interface Example { String getName(); @Creator static Example create(String name) { return () -> name; } }
支持 bean 急切初始化;依赖注入实现已得到改进,现在可以向任何 @Factory 方法接收 InjectionPoint 实例,这样可以在注入 bean 时基于注释元数据自定义 bean 的创建方式。
CLI 功能上,Micronaut 的mnCLI 命令已经用 Micronaut 本身重写,现在已编译成 Linux、macOS 和 Windows 上可用的本机镜像;使用 curl 命令 curl https://launch.micronaut.io/demo.zip -o demo.zip 可创建 Micronaut 2.0 应用而不需安装 CLI。
其它更新包括mn feature-diff --features=[FEATURE NAME]从另一个 Micronaut 项目的根开始扫描,启用更改差异分析。
$ mn feature-diff --features=azure-function --- micronaut-cli.yml +++ micronaut-cli.yml @@ -3,4 +3,4 @@ testFramework: junit sourceLanguage: java buildTool: gradle -features: [app-name, application, gradle, http-client, java, junit, logback, netty-server, shade, yaml] +features: [app-name, application, azure-function, azure-function-http, gradle, java, junit, logback, yaml] --- host.json +++ host.json @@ -1,0 +1,7 @@ +{ + "version": "2.0", + "extensionBundle": { + "id": "Microsoft.Azure.Functions.ExtensionBundle", + "version": "[1.*, 2.0.0)" + } +}
Micronaut 2 对 GraalVM 本机镜像的支持已脱离实验状态;不再需要为本机镜像构建配置静态资源;不再需要提供其它与 GraalVM 相关的配置来通过 JDBC 或 Hibernate/JPA 连接到数据库,Micronaut 通过 GraalVM 本机镜像自动支持以下驱动程序:Oracle、MariaDB、Postgres、MS SQL、H2 与 MySQL。
同时 Micronaut 基于 Netty 的 HTTP 客户端和服务器已更新为支持 HTTP/2;Micronaut 2.0 EventLoopGroup对服务器工作线程和客户端请求线程使用新的共享默认 Netty,这减少了上下文切换并提高了资源利用率,从 Micronaut 2.0 开始,默认情况下,所有操作都执行EventLoop。
此外还有一系列变化,包括通过扩展支持 Kotlin、添加代理请求 API、Serverless 相关改进、缓存已移至一个单独的模块中,并且已移出micronaut-runtime以及各种模块更新等。详情查看:https://docs.micronaut.io/2.0.0/guide/index.html