体验 micronaut 微服务框架

  • 谁在使用 MICRONAUT
  • 主要特点
  • 代码示例展示几点特性
  • 原生云原生
  • 安装 Micronaut 命令行工具
  • 创建一个 MICRONAUT 应用程序

MICRONAUT是基于 JVM 的现代全栈框架,用于构建模块化、易于测试的微服务和无服务器应用程序。

谁在使用 MICRONAUT

主要特点

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

代码示例展示几点特性

  1. 基于NETTY的非阻塞HTTP服务器
  2. 声明式、反应式、编译时 HTTP 客户端
  3. 快速简便的测试

原生云原生

Micronaut框架的云支持是内置的,包括对常见发现服务,分布式跟踪工具和云运行时的支持。

安装 Micronaut 命令行工具

为了在macOS,Linux或Windows上快速轻松地启动,你可以使用SDKMAN!(软件开发工具包管理器)下载并配置你选择的任何Micronaut版本。

  1. 下载和安装sdkman,
curl -s https://get.sdkman.io | bash
  1. 使用sdkman安装micronaut
source "$HOME/.sdkman/bin/sdkman-init.sh"sdk install micronaut
  1. 查看micronaut命令行工具的版本
mn --version

创建一个 MICRONAUT 应用程序

  1. 使用 Micronaut 命令行工具或 Micronaut Launch 界面创建应用程序。
mn create-app com.oracle.micronaut.micronautguide --build=maven --lang=java

注意:如果你未指定参数--build,系统会将 Gradle 用作构建工具。如果未指定参数--build--lang,则使用 Java 作为开发语言。
上一个命令在名为 micronautguide 的目录中使用默认包 com.oracle.micronaut 创建一个 Micronaut 应用程序。

  1. 启用注解处理
    如果你使用 Java 或 Kotlin 和 IntelliJ IDEA,请确保启用注解处理。
  2. 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);}}
  1. 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!";}}
  1. 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框架初始化应用程序上下文和嵌入式服务器。@MicronautTestpublic class MainControllerTest {// 注入 HttpClient Bean 并将其指向嵌入式服务器。@Inject@Client("/")HttpClient client;@Testpublic void testMain() {// 创建HTTP请求很容易,这要归功于Micronaut框架API。HttpRequest request = HttpRequest.GET("/");String body = client.toBlocking().retrieve(request);assertNotNull(body);assertEquals("Hello World!", body);}}
  1. 测试
./mvnw test

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


完结!