Micronaut-Overview
概述
Micronaut是一个为创建模块化,易于测试,微服务,无服务器应用程序基于JVM,先进的全栈框架。
多语言框架
POLYGLOT FRAMEWORK
- Java
- Groovy
- Kotlin
快速启动 - 低内存消耗
FAST STARTUP TIME — LOW MEMORY CONSUMPTION
基于反射的IoC框架为代码中的每个字段,方法和构造函数加载和缓存反射数据,而使用Micronaut,应用程序启动时间和内存消耗不受代码库大小的限制。
GraalVM
GraalVM是Oracle的一种新型通用虚拟机,支持多语言运行时环境,并能够将Java应用程序编译为本机机器代码。
使用GraalVM,Micronaut应用程序启动数十毫秒!Micronaut具有依赖注入和面向方面编程运行时,不使用反射。这使Micronaut应用程序更容易 在GraalVM上运行。
声明性反应性编译时客户端
DECLARATIVE, REACTIVE, COMPILE-TIME HTTP CLIENT
Micronaut提供了一个简单的编译时面向方面的编程API,它不使用反射,所以大大减少内存使用。
import io.micronaut.http.annotation.Get;
import io.micronaut.http.client.Client;
import io.reactivex.Single;
@Client("/hello")
public interface HelloClient {
@Get("/")
Single hello();
}
基于Netty构建的非阻塞服务端
NON-BLOCKING HTTP SERVER BUILT ON NETTY
通过平滑的学习曲线,Micronaut的服务端可以尽可能轻松地暴露给客户端可以使用。
import io.micronaut.http.annotation.*;
@Controller("/hello")
public class HelloController {
@Get("/")
public String index() {
return "Hello World";
}
}
快速简便的测试
在单元测试中轻松启动服务器和客户端,并立即运行它们。
Spock
import io.micronaut.runtime.server.EmbeddedServer
import spock.lang.*
class HelloClientSpec extends Specification {
@Shared
@AutoCleanup
EmbeddedServer embeddedServer =
ApplicationContext.run(EmbeddedServer)
@Shared
HelloClient client = embeddedServer
.applicationContext
.getBean(HelloClient)
void "test hello world response"() {
expect:
client.hello().blockingGet() == "Hello World"
}
}
或者
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
public class HelloControllerTest {
@Inject
HelloClient helloClient;
@Test
public void testHello() {
assertEquals(
"Hello Fred!",
helloClient.hello("Fred").blockingGet());
}
}
高效编译时依赖注入和切面
Micronaut提供了一个不使用反射而是使用简单的编译时注入切面代码的编程机制。
@Scheduled(fixedRate = "5m")
@Retry(attempts='5')
void everyFiveMinutes() {
messageService.sendMessage("Hello World");
}
完全反应和非阻塞程序
Micronaut支持任何实现Reactive Streams的框架,包括RxJava和Reactor。
@Client( id = "person-service" )
public interface PersonClient {
public Single<Person>
save(@Body Single<Person>person)
}
本地原生云应用
NATIVELY CLOUD NATIVE
Micronaut的云支持是内置的,包括对常见发现服务,分布式跟踪工具和云运行时的支持。
快速数据访问配置
Micronaut提供合理的默认设置,可自动配置您喜欢的数据访问工具包和API,以便轻松编写自己的集成。