2020年非常熱門的 10 個(gè) Java 微服務(wù)框架
1、Spring Boot
Java 構(gòu)建 Spring 應(yīng)用程序已經(jīng)有很長(zhǎng)一段時(shí)間了,Spring Boot 是 Spring 的一個(gè)特定版本,它通過對(duì)配置細(xì)節(jié)的處理,使微服務(wù)構(gòu)建更加簡(jiǎn)便。創(chuàng)建 Spring Boot 旨在自啟動(dòng)任何類型的 Spring 項(xiàng)目,而不僅僅是微服務(wù)。應(yīng)用程序完成后,Spring Boot 將在 web 服務(wù)器中混合,并輸出一個(gè) JAR 文件,JVM 除外。你可以將其視為原始 Docker 容器。這也是許多負(fù)責(zé)構(gòu)建微服務(wù)的開發(fā)者都非常喜歡 Spring Boot 的原因。
使用 Spring 開發(fā)微服務(wù)遵循與 Web 應(yīng)用相同的 MVC 理念。該框架享有多年 Java 開發(fā)中建立的所有深度連接,包括所有主要和次要數(shù)據(jù)存儲(chǔ)、LDAP 服務(wù)器和 Apache Kafka 等消息傳遞工具的集成。還有許多用于維護(hù)運(yùn)行服務(wù)器集合的小特性,比如 Spring Vault,這是一種用于維護(hù)生產(chǎn)環(huán)境中服務(wù)器所需的密碼的工具。所有這些優(yōu)點(diǎn)都說明了為什么 Java 程序員多年來一直喜歡 Spring Boot 的原因。
2、Eclipse MicroProfile
2016 年,Java Enterprise 社區(qū)決定清理 Java Enterprise Edition 中的內(nèi)容,以便人們可以使用經(jīng)典部件構(gòu)建簡(jiǎn)單的微服務(wù)。他們?nèi)コ舜罅康膸欤A袅颂幚?REST 請(qǐng)求,解析 JSON 和管理依賴注入的功能代碼,最終被稱為 Eclipse MicroProfile,其特性為快速而簡(jiǎn)單。
從那以后,MicroProfile 社區(qū)制定了一個(gè)協(xié)議,每季度發(fā)布一個(gè)新版本,同時(shí)添加新代碼以保持微服務(wù)平穩(wěn)安全地運(yùn)行。任何 Java EE 開發(fā)者都會(huì)非常熟悉開發(fā)過程和代碼結(jié)構(gòu),而且還吧配置麻煩給省去了。
3、Dropwizard
當(dāng) Dropwizard 在 2011 年出現(xiàn)時(shí),Dropwizard 框架為開發(fā)者提供了一個(gè)非常簡(jiǎn)單的模型,里面包含了許多重要的模塊,你可以根據(jù)需求添加一些業(yè)務(wù)邏輯,或者配置其他內(nèi)容,最后你會(huì)發(fā)現(xiàn) JAR 文件非常小,并且能夠快速啟動(dòng)。
Dropwizard 最大的限制可能是缺乏依賴注入。如果你希望使用依賴項(xiàng)注入來保持代碼的整潔和松散耦合,則需要自己添加庫,這點(diǎn)和 Spring 不同,但是現(xiàn)在 Dropwizard 也支持大多數(shù)功能,包括日志記錄、健康檢查和提供彈性代碼。
4、WildFly Thorntail
Red Hat 的工作人員使用一個(gè)靈活的配置工具構(gòu)建了他們自己的 MicroProfile 版本。該框架最初被稱為 WildFly Swarm,但后來被重新命名為 WildFly Thorntail,Thorntail 通過指定所需的特性來幫助您創(chuàng)建自己的 Maven 構(gòu)建文件,然后 Maven 負(fù)責(zé)組裝所有東西。
Thorntail 還將通過掃描代碼來檢測(cè)組件,也可以使用 BOM(材料清單) 文件覆蓋。當(dāng)它全部運(yùn)行時(shí),Thorntail 將刪除 Java Enterprise Edition 中不使用的部分,并創(chuàng)建一個(gè)很小的 JAR 文件,可以使用一個(gè)命令進(jìn)行部署——這是一個(gè)非常巧妙的特性,允許 Thorntail 項(xiàng)目將其稱為 Uber-JAR。這是遵循 Java Enterprise Edition 的另一種傳統(tǒng)方法,它不會(huì)保留所有沉重的負(fù)擔(dān)。
5、Helidon
Helidon 去除了 Java Enterprise Edition,保留輕量級(jí)的、基于 servlet 的核心,并吸引了大量的粉絲。在 Helidon 的,開發(fā)人員從 Netty,并添加代碼進(jìn)行路由和錯(cuò)誤處理。它采用了代碼的兩個(gè)基本模型,即所謂的 SE 和 MP 版本。
Node 開發(fā)者可能更熟悉 Helidon SE,因?yàn)槠渚哂杏删潼c(diǎn)連接的函數(shù)調(diào)用。使用 JAX-RS 的 Java 程序員則更熟悉 Helidon MP。此外,Helidon 還集成了一些備受好評(píng)的工具,這些都是它能夠吸引大量開發(fā)者的原因。
6、Cricket
另外一個(gè)用于快速 API 開發(fā)框架的是 Cricket。Cricket 很小,盡管它包括許多額外的功能,如鍵值數(shù)據(jù)存儲(chǔ),以避免連接數(shù)據(jù)庫和調(diào)度程序來控制后臺(tái)重復(fù)處理。沒有添加復(fù)雜性或其他依賴項(xiàng),因此很容易將代碼添加到 Cricket 并啟動(dòng)獨(dú)立的微服務(wù)。
7、Jersey
開發(fā) web 服務(wù)的標(biāo)準(zhǔn)方法之一是 RESTful web 服務(wù)的 Java API(又名 JAX-RS),這是 Jersey 框架中實(shí)現(xiàn)的通用規(guī)范。這種方法主要依賴于使用注釋來指定路徑映射和返回細(xì)節(jié)。從參數(shù)解析到 JSON 打包的所有其他內(nèi)容都由 Jersey 處理。
Jersey 的主要優(yōu)點(diǎn)是它實(shí)現(xiàn)了 JAX-RS 標(biāo)準(zhǔn),這個(gè)特性非常受歡迎,一些開發(fā)人員習(xí)慣將 Jersey 與 Spring Boot 結(jié)合在一起使用。
8、Play
體驗(yàn) JVM 跨語言能力的最佳方式之一是使用 Play 框架,這是可以與 Java 或任何其他 JVM 語言兼容的。它的基礎(chǔ)非常現(xiàn)代,具有異步、無狀態(tài)的模型,不會(huì)讓試圖跟蹤用戶及其會(huì)話數(shù)據(jù)的線程使服務(wù)器過載。還有許多額外的特性可以用來充實(shí)網(wǎng)站,比如 OpenID、驗(yàn)證和文件上傳支持。
Play 代碼庫已經(jīng)發(fā)展了十多年,因此你還會(huì)發(fā)現(xiàn)類似于對(duì) XML 的支持的這種古老的功能。play 既成熟又輕盈,這種組合還是比較有特色的。
9、Swagger
構(gòu)建一個(gè) API 看起來就像編寫一個(gè)監(jiān)聽端口的代碼一樣簡(jiǎn)單,但是 Swagger 的開發(fā)人員不這么認(rèn)為。他們已經(jīng)創(chuàng)建了一個(gè)完整的 API 規(guī)范語言 OpenAPI,你可以使用它來說明你的 API。這似乎是一個(gè)額外的步驟,但是 Swagger 團(tuán)隊(duì)還提供了將該規(guī)范轉(zhuǎn)換為自動(dòng)化測(cè)試、文檔等的代碼。
Swagger 配置文件中的 API 很簡(jiǎn)單,用于實(shí)現(xiàn)接口、記錄接口的,并提供一組工具來測(cè)試構(gòu)建在其下的代碼,甚至還有一種 API 治理機(jī)制。
Swagger 是一個(gè) api 生態(tài)系統(tǒng),它不局限于 Java。如果你的團(tuán)隊(duì)遷移到 Node.js 或其他幾十種語言中的任何一種,都有一個(gè) Swagger Codegen 模塊將 OpenAPI 規(guī)范轉(zhuǎn)換成該語言的實(shí)現(xiàn)。
10、Restlet
不同框架之間最大的區(qū)別之一是和其他服務(wù)或庫的連接數(shù)量。Restlet 項(xiàng)目提供了更大的特性和連接集合,它已經(jīng)與 JavaMail 之類的庫集成,避免微服務(wù)需要對(duì)某些郵件服務(wù)器使用 POP、IMAP 或 SMTP;為防構(gòu)建大量文本索引和元數(shù)據(jù),還集成了 Lucene 和 Solr。
Restlet 中還有很多特性在持續(xù)開發(fā)。例如,你不需要使用 JSON,因?yàn)樗梢灾苯犹幚?XML、CSV、YAML 和其他一些文件格式,此外,它還允許用戶從 Chrome 瀏覽器測(cè)試 api。