Micronaut
是一个现代化的
、基于JVM的
、全栈的
微服务框架,旨在构建模块化
、易于测试
的微服务应用程序。
Micronaut
是由Grails
框架的创建者开发的,并从多年来的使用Spring
、SpringBoot
和Grails
经验教训中吸取了灵感。构建出了一套从Monolith
到微服务
的现代化的应用程序。
Micronaut
旨在提供构建功能齐全的微服务应用程序所需的所有工具,包括:
依赖注入和控制反转(IoC)
合理的默认值和自动配置
配置和配置共享
服务发现
HTTP路由
具有客户端负载均衡的http客户端
同时,Micronaut
旨在通过提供以下功能来避免Spring
、SpringBoot
和Grails
等框架的缺点:
提高启动时间
减少内存占用
最少使用反射
最少使用代理
简化单元测试
从历史上看,Spring
和Grails
等框架并非设计用于不依赖应用服务器的应用程序
,Android 应用程序
、内存占用少的
微服务等场景。 相比之下,Micronaut
适用于所有这些场景。
这个目标是通过使用Java的注解处理器来实现的,这些处理器可以在支持它们的任何JVM语言
上使用,也可以在Netty
上构建HTTP Server
和Client
。 为了向Spring
和Grails
提供类似的编程模型,这些注解处理器预编译必要的元数据,以便执行DI,定义AOP代理并将应用程序配置为在微服务环境中运行。
Micronaut
中的许多API都受到Spring
和Grails
的启发。 这是设计有助于提高开发人员的速度,帮助开发者容易的转移到Micronaut
的开发上来。
学习任何技术,官网最为重要。
以下部分将引导您快速了解如何使用Micronaut
开发一个简单的Hello World
应用程序。
在开发之前,大家需要准备开发环境。要求安装Java 8
或更高的jdk版本建议使用适当的开发IDE,如 IntelliJ IDEA
。
要想快速入门,还建议您安装Micronaut CLI
。
Micronaut CLI
的安装提供了linux
、macos
、windows
的安装方式,这里我们以windows为例。
从Micronaut网站下载最新的二进制文件。
这里wos
将二进制文件解压缩到适当的位置(例如:E:\tools\micronaut-1.2.1)
创建一个环境变量MICRONAUT_HOME
,它指向安装目录,即 E:\tools\micronaut-1.2.1
更新PATH
环境变量,追加%MICRONAUT_HOME%\bin
。
现在我们可以从命令提示符运行MicronautCLI,如下所示
我们可以使用上面安装的MicronautCLI
快速创建一个新的服务端应用。
使用CLI,可以在Groovy
,Java
或Kotlin
中创建新的Micronaut
应用程序(默认为Java
)。
以下命令使用Gradle
构建在Java中创建一个新的“Hello World”服务器应用程序:
mn create-app hello-world
如果您希望创建基于Maven的构建,则可以提供--build maven
我们还是以maven为例
创建命令如下
mn create-app hello-world --build maven
这样,Hello World的示例工程就创建创建成功
mn> mn create-app hello-world --build maven
| Generating Java project...
| Application created at D:\micronaut\hello-world
| Initializing application. Please wait...
mn>
并且我们将其导入到idea中,目录结构如下所示:
我是使用idea 是直接运行Application的main方法,
默认情况下,Micronaut
HTTP服务器配置为在端口8080
上运行。见本节在特定端口上运行服务器在用户指南中获得更多选项。
为了创建一个服务,来返回“Hello World”,首先需要一个控制器。 以下是控制器的示例:
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
@Controller("/hello")
public class HelloController {
@Get(produces = MediaType.TEXT_PLAIN)
public String index() {
return "Hello World";
}
}
@Controller
注解映射到路径/hello
。@Get
注解用于将index()
方法映射到使用HTTP GET
请求"Hello World"
这时候,我是使用idea 是直接运行Application的main方法,启动成功。
我们是curl
发送 http://localhost:8080/hello
返回了Hello World
如前所述,Micronaut
包括HTTP服务器
和HTTP客户端
。 (https://docs.micronaut.io/latest/guide/index.html#lowLevelHttpClient),我们可以使用开箱即用的[低级HTTP客户端
]来测试3.2中创建的HelloController
。
import io.micronaut.context.annotation.Property;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.client.HttpClient;
import io.micronaut.http.client.annotation.Client;
import io.micronaut.runtime.server.EmbeddedServer;
import io.micronaut.test.annotation.MicronautTest;
import org.junit.jupiter.api.Test;
import javax.inject.Inject;
import static org.junit.jupiter.api.Assertions.assertEquals;
@MicronautTest
class HelloControllerSpec {
@Inject
EmbeddedServer server;
@Inject
@Client("/")
HttpClient client;
@Test
void testHelloWorldResponse() {
String response = client.toBlocking()
.retrieve(HttpRequest.GET("/hello"));
assertEquals("Hello World", response); //)
}
}
到这里一个简单的Micronaut
的Hello World
程序就运行起来了。
代码已经上传Github