体验 micronaut 微服务框架
- 谁在使用 MICRONAUT
 - 主要特点
 - 代码示例展示几点特性
 - 原生云原生
 - 安装 Micronaut 命令行工具
 - 创建一个 MICRONAUT 应用程序
 
MICRONAUT是基于 JVM 的现代全栈框架,用于构建模块化、易于测试的微服务和无服务器应用程序。
谁在使用 MICRONAUT

主要特点
- 多语言框架,与Java,Groovy和Kotlin兼容,路线图上有Scala。
 - 原生云原生,内置云支持,包括发现服务、分布式跟踪和云运行时
 - 快速数据访问配置,快速配置你喜欢的数据访问层和 API 以编写你自己的数据访问层
 - 平滑的学习曲线,以您习惯的方式使用熟悉的注解,快速实现收益
 - 快速、简单的单元测试,在单元测试中轻松启动服务器和客户端并即时运行它们
 - 面向切面的 API,提供不使用反射的简单、编译时、面向方面的编程 API
 - 无缝的 API 可见性,通过对OpenAPI和Swagger的支持,你的消费者将拥有与你的服务集成所需的一切。
 - AOP 编译,通过前期完成繁重的工作,保持较低的启动时间和内存占用
 
代码示例展示几点特性
- 基于NETTY的非阻塞HTTP服务器

 - 声明式、反应式、编译时 HTTP 客户端

 - 快速简便的测试

 
原生云原生
Micronaut框架的云支持是内置的,包括对常见发现服务,分布式跟踪工具和云运行时的支持。
 
安装 Micronaut 命令行工具
为了在macOS,Linux或Windows上快速轻松地启动,你可以使用SDKMAN!(软件开发工具包管理器)下载并配置你选择的任何Micronaut版本。
- 下载和安装sdkman,
 
curl -s https://get.sdkman.io | bash
 
- 使用sdkman安装micronaut
 
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install micronaut
 
- 查看micronaut命令行工具的版本
 
mn --version
 
创建一个 MICRONAUT 应用程序
- 使用 Micronaut 命令行工具或 Micronaut Launch 界面创建应用程序。
 
mn create-app com.oracle.micronaut.micronautguide --build=maven --lang=java
 
注意:如果你未指定参数--build,系统会将 Gradle 用作构建工具。如果未指定参数--build--lang,则使用 Java 作为开发语言。
 上一个命令在名为 micronautguide 的目录中使用默认包 com.oracle.micronaut 创建一个 Micronaut 应用程序。
- 启用注解处理
如果你使用 Java 或 Kotlin 和 IntelliJ IDEA,请确保启用注解处理。

 - Application.java 主类
Application.java在通过 Gradle 或部署运行应用程序时使用。如果配置正确,还可以直接在 IDE 中运行主类。 
package com.oracle.micronaut;
import io.micronaut.runtime.Micronaut;
public class Application {
    public static void main(String[] args) {
        Micronaut.run(Application.class, args);
    }
}
 
- MainController.java 控制器类
为了创建响应“Hello World!”的微服务,首先需要一个控制器。 
package com.oracle.micronaut.controller;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.annotation.Produces;
// 该类被定义为控制器,其中@Controller注映射到路径"/"。
@Controller("/")
public class MainController {
    // @Get注解将sayHello方法映射到"/"上的 HTTP GET 请求。
    // 默认情况下,Micronaut 响应使用 application/json。
    // 我们返回一个字符串,而不是一个 JSON 对象,因此我们将其 Content-Type 设置为 text/plain。
    @Get
    @Produces(MediaType.TEXT_PLAIN)
    public String sayHello() {
        // 返回字符串"Hello World!"作为结果
        return "Hello World!";
    }
}
 
- MainControllerTest.java 测试类
创建一个测试以验证当你向 “/” 发出 GET 请求时,会获得"Hello World!"作为响应。 
package com.oracle.micronaut;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.client.HttpClient;
import io.micronaut.http.client.annotation.Client;
import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
import jakarta.inject.Inject;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
// 通过@MicronautTest注解类,以便Micronaut框架初始化应用程序上下文和嵌入式服务器。
@MicronautTest
public class MainControllerTest {
    // 注入 HttpClient Bean 并将其指向嵌入式服务器。
    @Inject
    @Client("/")
    HttpClient client;
    @Test
    public void testMain() {
        // 创建HTTP请求很容易,这要归功于Micronaut框架API。
        HttpRequest<String> request = HttpRequest.GET("/");
        String body = client.toBlocking().retrieve(request);
        assertNotNull(body);
        assertEquals("Hello World!", body);
    }
}
 
- 测试
 
./mvnw test
 

- 运行应用程序
 
./mvnw mn:run
 
- 构建原生镜像
 
./mvnw package -Dpackaging=native-image
 
- 运行原生镜像
 
./target/micronautguide
 
- 通过curl访问
 
curl localhost:8080; echo
 

 完结!



















