Red Hat發布了Quarkus,這是一個為GraalVM和OpenJDK HotSpot量身定制的Kubernetes原生Java框架。Quarkus的目標是使Java成為Kubernetes和無服務器環境中的領先平臺,為開發人員提供統一的反應式和命令式編程模型。
Quarkus利用Java開發人員使用的一系列庫,如Eclipse MicroProfile和Vert.x,帶來了一個全棧框架。Quarkus依賴注入基于CDI,允許開發人員使用JPA/Hibernate、JAX-RS/RESTEasy等。此外,Quarkus還包含一個擴展框架,第三方框架作者可以利用該框架對其進行擴展;這個擴展框架同時還編譯成了一個GraalVM原生二進制文件。
RedHat表示,Quarkus提供了可觀的運行時效率,比如快速啟動,支持在容器和Kubernetes上自動伸縮微服務,而低內存利用率有助于優化微服務體系結構部署中的容器密度。同時,它還提供了更小的應用程序和容器鏡像空間占用。
按照設計,Quarkus完美地引入了命令式和反應式模型,旨在讓熟悉命令式模型但不想學習新范式的Java開發人員以及采用云原生/反應式模型方法的開發人員快速采用。
命令式風格:
@InjectSayService say;@GET@Produces(MediaType.TEXT_PLAIN)public String hello() { return say.hello();}
反應式風格:
@Inject @Stream(\u0026quot;kafka\u0026quot;)Publisher reactiveSay;@GET@Produces(MediaType.SERVER_SENT_EVENTS)public Publisher stream() { return reactiveSay;}
也可以使用Quarkus實現在無服務器環境中使用的函數,比如,下面是一個AWS Lambda的例子:
public class HelloLambda implements RequestHandler { @Inject HelloGreeter greeter; @Override public String handleRequest(HelloRequest request, Context context) { return greeter.greet(request.firstName, request.lastName); }}
Quarkus被設計成少配置或無配置,其工作方式很直觀。為此,開發人員可以用以下工具構建一個新項目:
mvn io.quarkus:quarkus-maven-plugin:0.12.0:create \\ -DprojectGroupId=my-groupId \\ -DprojectArtifactId=my-artifactId \\ -DprojectVersion=my-version \\ -DclassName=\u0026quot;org.my.group.MyResource\u0026quot;
Quarkus還提供了“在線編碼(Live Coding)”功能,使開發人員避免了編寫代碼→編譯→部署→刷新瀏覽器→重復的枯燥過程。運行mvn compile quarkus:dev,Quarkus將在開發模式下啟動。當它接收到HTTP請求時,它將保存該請求并檢查是否更改了任何應用程序源文件。如果有,它將透明地編譯更改的文件,重新部署應用程序,然后將HTTP請求發送給重新部署的應用程序。
Quarkus似乎至少是云時代一個有趣的替代方案。在這個時代,容器、Kubernetes、微服務、函數即服務(FaaS)和云原生應用程序正在提供更高級別的生產力和效率。
要了解關于Quarkus的更多細節,請訪問 quarkus.io。想要開始使用Quarkus的開發人員可以查看入門指南或其他可用的指南。
查看英文原文:Quarkus, a Kubernetes Native Java Framework