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