Micronaut教程:如何使用基于JVM的框架構建微服務

\

本文要點

\\
  • 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客戶端實現它們之間的通信。\

下圖說明了你將要構建的應用程序:

\\

55bac748126b36400c01ab49093e72d3.png

\\

微服務#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\

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450417.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450417.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450417.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言extern關鍵詞—最會帶帽子的關鍵字

extern,外面的、外來的意思。那它有什么作用呢?舉個例子:假設你在大街上看到一個黑皮膚綠眼睛紅頭發的美女(外星人?)或者帥哥。你的第一反應就是這人不是國產的。extern 就相當于他們的這些區別于中國人的特…

解決Coldfusion連接MySQL數據庫的問題

在連接MySQL時,出現了如下錯誤: Connections to MySQL Community Server are not supported. Please contact MySQL to obtain a MySQL Enterprise or Commercial version. 解決方案: step 1: download the JDBC driver JDBC Driver for MySQ…

范式知識點

Mysql數據庫 ?前關系數據庫有六種范式: 第?范式(1NF)、第?范式(2NF)、第三范式(3NF)、巴斯-科德范式 (BCNF)、第四范式(4NF)和第五范式(5NF&a…

Tensorflow入門----占位符、常量和Session

安裝好TensorFlow之后,開一個python環境,就可以開始運行和使用TensorFlow了。 先給一個實例, #先導入TensorFlowimport tensorflow as tf # Create TensorFlow object called hello_constanthello_constant tf.constant(Hello World!) with …

C語言union關鍵字

union 關鍵字的用法與struct 的用法非常類似。union 維護足夠的空間來置放多個數據成員中的“一種”,而不是為每一個數據成員配置空間,在union 中所有的數據成員共用一個空間,同一時間只能儲存其中一個數據成員,所有的數據成員具有…

js 深拷貝 和 淺拷貝

1、 ...運算符 (淺拷貝) let obj {a:1,b:2}; let obj2 {...obj}; obj.a3 obj //{a: 3, b: 2} obj2 //{a: 1, b: 2}a {a:[{b:1}]}; b a ;b.a[0].b 2; //b {a:[{b:2}]}a // a {a:[{b:2}]} 2、 JSON.parse(JSON.stringify(參數))…

軟考如何備考

軟考上半年 報名時間 3月 考試時間 5月 備考持續時間:一個半月,每天至少兩個小時。 第一輪 基礎知識輪, 15天 在這一輪中如果碰到無法理解的知識點一定不要過于糾結,往后學,一般后面的學著學著之前的內容就…

Python學習第一天-第2節

*本節課內容參見:https://www.cnblogs.com/jin-xin/articles/7459977.html運行第一個Python程序 print(hello world) 將文本文件保存為以.py結尾的文件,如hello_world.py ,在終端中,運行命令:Python hello_world.py&am…

SpringMVC之組合注解@GetMapping

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Spring4.3中引進了{GetMapping、PostMapping、PutMapping、DeleteMapping、PatchMapping},來幫助簡化…

資源下載地址

1、nginx http://nginx.org/en/download.html 2、nodejs http://nodejs.cn/download/ 3、vscode https://code.visualstudio.com/ 4、canal https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz 5、jenkins https://jenkins.io/i…

C語言volatile關鍵字—最易變的關鍵字

volatile 是易變的、不穩定的意思。很多人根本就沒見過這個關鍵字,不知道它的存在。也有很多程序員知道它的存在,但從來沒用過它。我對它有種“楊家有女初長成,養在深閨人未識” 的感覺。volatile 關鍵字和const 一樣是一種類型修飾符,用它修…

mysql 備份腳本

#!/bin/bash INNOBACKUPEXFULL"/usr/bin/innobackupex" MYSQL_CMD --socket/ssd/mysql/3346/tmp/mysql.sock --userroot --passwordmysqlpassword --port3346 MYSQL_UP --userroot --passwordmysqlpassword --port3346 #mysqladmin的用戶名和密碼 TMPLOG"/dat…

爆棧的處理方法

爆棧指遞歸中,存儲的信息量大于系統棧的內存。 信息量包括元素編號,每一層中開的變量。 和遞歸的層數正相關。 (雖然noip一般開棧) 1.手寫棧 while(top){ int xsta[top]; for(each son) if(has son){ //blablabla sta[top]son; h…

項目面試題

項目面試題 1.描述最熟悉的或者(最近)的一個項目 ? 目的:檢測技術和項目的熟悉程度工作職責 回答:項目名稱,項目的甲方,背景,實現的目的和意義,該項目主要是為了解決什…

MySQL定時備份(全量備份+增量備份)

MySQL 定時備份 參考 zone7_ 的 實戰-MySQL定時備份系列文章 參考 zmcyu 的 mysql數據庫的完整備份、差異備份、增量備份 更多binlog的學習參考馬丁傳奇的 MySQL的binlog日志,這篇文章寫得認真詳細,如果看的認真的話,肯定能學的很好的。 如果…

java 接口可以多繼承

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 接口是常量值和方法定義的集合。接口是一種特殊的抽象類。 java類是單繼承的。classB Extends classA java接口可以多繼承。Interface…

C語言struct關鍵字詳解—結構體

struct 是個神奇的關鍵字,它將一些相關聯的數據打包成一個整體,方便使用。在網絡協議、通信控制、嵌入式系統、驅動開發等地方,我們經常要傳送的不是簡單的字節流(char 型數組),而是多種數據組合起來的一個…

JDK1.8使用Dubbo時需注意

2019獨角獸企業重金招聘Python工程師標準>>> Dubbo自帶的很多包都比較舊了,其中的javassist在JDK1.8上運行會報錯 而且錯誤通常比較詭異,javassist是編輯和創建Java字節碼的類庫,常見的錯誤會從spring中報出 解決辦法:…

Java 11 已發布,String 還能這樣玩!

在文章《Java 11 正式發布,這 8 個逆天新特性教你寫出更牛逼的代碼》中,我有介紹到 Java 11 的八個新特性,其中關于 String 加強部分,我覺得有點意思,這里單獨再拉出來講。 Java 11 增加了一系列的字符串處理方法&…

Redis1 晨考題

Redis1 晨考題 1.Redis 是什么 ? redis 是一個開源的使用 ANSI C 語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value 的內存數據庫,并提供多種語言的 API。 2.NOSQL 是什么 ?出現的目的和意義是什么 ? NoSQL 泛指…