\\\本文要點
\\
- Micronaut是一種基于jvm的現代化全棧框架,用于構建模塊化且易于測試的微服務應用程序。\\t
- Micronaut提供完全的編譯時、反射無關的依賴注入和AOP。\\t
- 該框架的開發團隊和Grails框架的開發團隊是同一個。\\t
- Micronaut框架集成了云技術,服務發現、分布式跟蹤、斷路器等微服務模式也內置到了框架中。\\t
- 在本教程中,你將使用不同的語言創建三個微服務:Java、Kotlin和Groovy。你還將了解使用Micronaut HTTP客戶端消費其他微服務是多么容易,以及如何創建快速執行的功能測試。\
與使用傳統JVM框架構建的應用程序不同,Micronaut提供100%的編譯時、反射無關的依賴注入和AOP。因此,Micronaut應用程序很小,內存占用也很低。使用Micronaut,你可以開發一個很大的單體應用或一個可以部署到AWS Lambda的小函數。框架不會限制你。
\\Micronaut框架還集成了云技術,服務發現、分布式跟蹤、斷路器等微服務模式也內置到了框架中。
\\Micronaut在2018年5月作為開源軟件發布,計劃在2018年底之前發布1.0.0版本。現在你可以試用Micronaut,因為里程碑版本和發行候選版本已經可用。
\\Micronaut框架的開發團隊和Grails框架的開發團隊是同一個。Grails最近迎來了它的10周年紀念,它繼續用許多生產力促進器幫助開發人員來編寫Web應用程序。Grails 3構建在Spring Boot之上。你很快就會發現,對于使用Grails和Spring Boot這兩個框架的開發人員來說,Micronaut有一個簡單的學習曲線。
\\教程簡介
\\在本系列文章中,我們將使用幾個微服務創建一個應用程序:
\\- 一個books微服務,使用Groovy編寫;\\t
- 一個inventory微服務,使用Kotlin編寫;\\t
- 一個gateway微服務,使用Java編寫。\
你將完成以下工作:
\\- 編寫端點,使用編譯時依賴注入;\\t
- 編寫功能測試;\\t
- 配置那些Micronaut應用程序,注冊到Consul;\\t
- 使用Micronaut聲明式HTTP客戶端實現它們之間的通信。\
下圖說明了你將要構建的應用程序:
\\微服務#1 Groovy微服務
\\創建Micronaut應用的最簡單方法是使用其命令行接口(Micronaut CLI),使用SDKMan可以輕松安裝。
\\Micronaut應用程序可以使用Java、Kotlin和Groovy編寫。首先,讓我們創建一個Groovy Micronaut應用:
\\\mn create-app example.micronaut.books --lang groovy .\\
上面的命令創建一個名為books的應用,默認包為example.micronaut。
\\Micronaut是測試框架無關的。它根據你使用的語言選擇一個默認測試框架。在默認情況下,Java使用JUnit。如果你選擇了Groovy,在默認情況下,將使用Spock。你可以搭配使用不同的語言和測試框架。例如,用Spock測試一個Java Micronaut應用程序。
\\而且,Micronaut是構建工具無關的。你可以使用Maven或Gradle。默認使用Gradle。
\\生成的應用中包含一個基于Netty的非阻塞HTTP服務器。
\\創建一個控制器暴露你的第一個Micronaut端點:
\\\\books/src/main/groovy/example/micronaut/BooksController.groovy\\package example.micronaut\\import groovy.transform.CompileStatic\import io.micronaut.http.annotation.Controller\import io.micronaut.http.annotation.Get\\@CompileStatic\@Controller(\"/api\")\class BooksController {\\ private final BooksRepository booksRepository\\ BooksController(BooksRepository booksRepository) {\ this.booksRepository = booksRepository\ }\\ @Get(\"/books\")\ List\u0026lt;Book\u0026gt; list() {\ booksRepository.findAll()\ }\}
\\在上面的代碼中,有幾個地方值得一提:
\\- 控制器暴露一個route/api/books端點,可以使用GET請求調用;\\t
- 注解@Get和@Controller的值是一個RFC-6570 URI模板;\\t
- 通過構造函數注入,Micronaut提供了一個協作類:BooksRepository;\\t
- Micronaut控制器默認消費和生成JSON。\
上述控制器使用了一個接口和一個POGO:
\\\books/src/main/groovy/example/micronaut/BooksRepository.groovy\\package example.micronaut\interface BooksRepository {\ List\u0026lt;Book\u0026gt; findAll()\}\\books/src/main/groovy/example/micronaut/Book.groovy\\package example.micronaut\\import groovy.transform.CompileStatic\import groovy.transform.TupleConstructor\\@CompileStatic\@TupleConstructor\class Book {\ String isbn\ String name\}
\\Micronaut在編譯時把一個實現了BooksRepository接口的bean連接起來。
\\對于這個應用,我們創建了一個單例,我們是使用javax.inject.Singleton注解定義的。
\\\books/src/main/groovy/example/micronaut/BooksRepositoryImpl.groovy\\package example.micronaut\\import groovy.transform.CompileStatic\import javax.inject.Singleton\\@CompileStatic\@Singleton\class BooksRepositoryImpl implements BooksRepository {\\ @Override\ List\u0026lt;Book\u0026gt; findAll() {\ [\ new Book(\"1491950358\