欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Quarkus中RESTEasy?Reactive集成合并master分支

 更新時間:2022年02月21日 15:53:07   作者:kl  
這篇文章主要為大家介紹了Quarkus中RESTEasy?Reactive集成合并master分支的詳細作用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

前言

Quarkus和RESTEasy團隊非常高興地宣布了Quarkus中的RESTEasy Reactive集成已進入master分支,并將成為下一個Quarkus 1.11發(fā)行版的一部分。我們期待每個人對其進行測試。并為我們提供盡可能多的反饋。以典型的Quarkus方式,該項目可作為一組新的擴展使用。這是一個非常令人興奮的消息,所以博主用自己蹩腳的英語+google翻譯翻譯了官方的公告,迫不及待的想要和大家分享。

它是什么?

正如您可能從名稱中猜到的那樣,該工作是從頭開始編寫的新JAX-RS實現(xiàn),可在我們的通用Vert.x層上工作,因此具有完全的反應性,同時還與Quarkus緊密集成,因此移動了很多特定于框架的工作(例如注釋掃描和元模型生成)以建立時間。

為什么非常重要?

最簡單的答案是,您可以繼續(xù)利用廣泛使用且功能強大的JAX-RS API為應用程序公開REST層,同時顯著提高應用程序可以實現(xiàn)的最大吞吐量。該應用程序還應該稍微加快啟動速度,并占用更少的內(nèi)存。

我們的基準測試表明,此新擴展的可測量性能幾乎與我們使用Quarkus的Reactive Routes API(它本身是一個非常有趣的API,但通常級別較低)所達到的性能相同,更不用說這是開發(fā)人員需要學習的新API)。

此外,將我們的結(jié)果與提供基于注釋的REST層的其他競爭企業(yè)Java框架進行比較時,根據(jù)基準,Quarkus提供的吞吐量是原來的兩倍。

還有什么其他好處?

好像熟悉的API和新擴展的改進的運行時特性還不夠,我們添加了一些真正令人興奮且方便的新功能(這些功能不是JAX-RS規(guī)范的一部分),這些功能是社區(qū)所要求的,或者我們覺得可以改善開發(fā)人員的體驗,并減輕某些規(guī)范的毛病。這些新功能是:

  • 默認不阻塞:現(xiàn)在,默認情況下,所有端點都在IO線程上運行。您可以@Blocking用來更改它。
  • 計分系統(tǒng):在開發(fā)人員模式啟動時,該應用程序?qū)槟@示端點列表,以及性能得分,告訴您為什么端點比最佳版本慢。這有助于弄清楚如何提高REST性能。

新的請求/響應過濾器設計

JAX-RS過濾器需要實現(xiàn)一個接口并將上下文對象作為字段注入,這既昂貴又不靈活?;谖覀冊赒uarkus構(gòu)建系統(tǒng)中的成功,現(xiàn)在過濾器只是帶有注釋的方法,并且會自動注入任何參數(shù):

public class CustomContainerRequestFilter {
   @ServerRequestFilter
   public void whatever(UriInfo uriInfo, HttpHeaders httpHeaders, ContainerRequestContext requestContext) {
       String customHeaderValue = uriInfo.getPath() + "-" + httpHeaders.getHeaderString("some-input");
       requestContext.getHeaders().putSingle("custom-header", customHeaderValue);
   }
}

此外,如果過濾器需要執(zhí)行阻止操作,則它們可以返回Uni并且RESTEasy Reactive在執(zhí)行過濾器時不會阻止事件循環(huán)線程。
最后,盡管我們還沒有完成,但是可以很容易地將此方法擴展到其他類型的JAX-RS Provider,從而完全不需要@Context在其代碼中使用。

新*Param注解

這些注釋意味著要用來代替JAX-RS @PathParam,@QueryParam等注釋,而不必需要指定一個名稱。我們選擇不重用相同的批注名稱的原因是為了避免與JAX-RS或其他EE規(guī)范沖突:

@POST
@Path("params/{p}")
public String params(@RestPath String p,
                    @RestQuery String q,
                    @RestHeader int h,
                    @RestForm String f,
                    @RestMatrix String m,
                    @RestCookie String c) {
   return "params: p: " + p + ", q: " + q + ", h: " + h + ", f: " + f + ", m: " + m + ", c: " + c;
}

更簡單的參數(shù)和上下文注入

使用RESTEasy Reactive,您甚至不需要使用,@PathParam或者@RestPath您的參數(shù)與path參數(shù)具有相同的名稱,并且類似地,您可以跳過@Context所有已知的上下文類型,這使它更加簡單:

@POST
@Path("params/{p}")
public String params(String p, UriInfo info) {
   return "params: p: " + p + ", info: " + info;
}

新的最佳消息正文閱讀器/編寫器

如果在為端點提供服務時未調(diào)用任何篩選器和攔截器,則可以使用更高效的消息正文編寫器,這些編寫器直接寫入vert.x,并且不需要反射和注釋:

@Provider
public class ServerVertxBufferMessageBodyWriter extends VertxBufferMessageBodyWriter
       implements ServerMessageBodyWriter{
   @Override
   public boolean isWriteable(Class type, ResteasyReactiveResourceInfo target, MediaType mediaType) {
       return true;
   }
   @Override
   public void writeResponse(Buffer buffer, ServerRequestContext context) {
       context.serverResponse().end(buffer.getBytes());
   }
}

默認內(nèi)容類型

返回String的端點默認為產(chǎn)生文本/純文本。我們計劃對JSON和其他類型執(zhí)行相同的操作。

CDI整合

通過JAX-RS的@Context進行的所有注入都委托給Arc。這為用戶提供了Arc帶給Quarkus所有其他部分的構(gòu)建時間注入的好處。

每類異常映射器

在JAX-RS規(guī)范中,無法對特定的JAX-RS資源類以不同的方式處理異常-所有異常映射都是以全局方式完成的。但是在RESTEasy Reactive中,您可以簡單地執(zhí)行以下操作:

@Path("first")
public class FirstResource {
   @GET
   @Produces("text/plain")
   public String throwsVariousExceptions(@RestQuery String name) {
       if (name.startsWith("IllegalArgument")) {
           throw new IllegalArgumentException();
       } else if (name.startsWith("IllegalState")) {
           throw new IllegalStateException("IllegalState");
       } else if (name.startsWith("My")) {
           throw new MyException();
       }
       throw new RuntimeException();
   }
   @ServerExceptionMapper({ IllegalStateException.class, IllegalArgumentException.class })
   public Response handleIllegal() {
       return Response.status(409).build();
   }
   @ServerExceptionMapper(MyException.class)
   public Response handleMy(SimpleResourceInfo simplifiedResourceInfo, MyException myException,
           ContainerRequestContext containerRequestContext, UriInfo uriInfo, HttpHeaders httpHeaders, Request request) {
       return Response.status(410).entity(uriInfo.getPath() + "->" + simplifiedResourceInfo.getMethodName()).build();
   }
}

為了自定義某些資源類的異常處理。還要注意,@ServerExceptionMapper可以像JAX-RS使用那樣以全局方式處理異常ExceptionMapper。為此,只需使用注釋不屬于Resource類的方法@ServerExceptionMapper。

其他擴展程序也可以使用嗎?

絕對!與現(xiàn)有quarkus-resteasy擴展集成的擴展也與quarkus-resteasy-active擴展集成。因此,您可以繼續(xù)使用CDI,Security,Metrics,JSON,Qute,Bean Validation,OpenAPI, 并享受開箱即用和完善的開發(fā)經(jīng)驗。

該如何嘗試?

該項目已降落在Quarkus主分支,所以,如果你渴望嘗試一下,你就必須按照從源代碼編譯Quarkus這和使用遵循正確BOM和版本此??捎玫腞ESTEasy Reactive擴展為:

quarkus-resteasy-reactive

quarkus-resteasy-reactive-jackson

quarkus-resteasy-reactive-jsonb

quarkus-resteasy-reactive-qute

些擴展等效于現(xiàn)有的quarkus-resteasy *擴展,因此只需在應用程序中從quarkus-resteasy-jackson切換到quarkus-resteasy-reactive-jackson,即可讓您嘗試通過Jackson集成進行RESTEasy Reactive。
此外,如果需要使用JAX-RS客戶端,則可以使用quarkus-jaxrs-client擴展(這不是聲明性的MicroProfile REST客戶端,而是JAX-RS規(guī)范指定的程序化客戶端)。

應該注意什么?

首先要注意的是,目前暫時將這組擴展視為實驗性的。盡管該項目幾乎通過了JAX-RS TCK的全部,但它只是第一個發(fā)行版,因此請記住,它可能比典型的經(jīng)過戰(zhàn)斗的庫具有更多的錯誤,而某些新的API和SPI可能會損壞。盡管這是第一個發(fā)行版,但我們確實預想這項工作將在不久的將來成為Quarkus的默認REST層。

如新功能部分所述,默認情況下,請求是在事件循環(huán)線程上處理的。這樣可以確保最大的吞吐量,但是也意味著不應在這些線程上執(zhí)行任何阻塞工作。如果您使用Blocking IO(例如,通過使用Hibernate Panache訪問數(shù)據(jù)庫),請確保@Blocking在方法或類上使用注釋。這將確保該請求將在工作線程上得到服務。不用說,我們也非常有興趣聽到您對此默認設置的反饋。

尚無文檔。文檔將在1.11正式版之前添加,并將逐步增強。該電子郵件應包含您入門所需的所有信息,但是如果您遇到任何麻煩,我們可以在任何常用渠道(Zulip聊天,郵件列表,GitHub問題,StackOverflow)上為您提供幫助。

缺少哪些JAX-RS功能?

我們決定專注于現(xiàn)代REST層上大多數(shù)用戶的需求,而不是實現(xiàn)JAX-RS TCK所需的每個功能。因此,就這一點而言,RESTEasy Reactive中不提供XML支持,同時也不支持該規(guī)范的各種奧秘功能

例如:

javax.activation.DataSource

javax.annotation.ManagedBean

javax.ws.rs.core.StreamingOutput

此外,值得注意的是,第一個發(fā)行版將不包含基于新的JAX-RS客戶端(具有專用擴展)的MicroProfile REST客戶端的實現(xiàn)。這很可能在不久的將來改變。

下一步計劃是什么?

盡管新的擴展將隨常規(guī)的1.11版本一起提供,但我們正在考慮1.11.0.Alpha1發(fā)布一個版本,以使您盡可能容易地嘗試新的擴展并提供早期反饋。我們非常期待聽到您在Quarkus中使用RESTEasy Reactive的想法和經(jīng)驗,并計劃充分利用它來進一步改進該項目。

以上就是Quarkus中RESTEasy Reactive集成合并master分支的詳細內(nèi)容,更多關(guān)于RESTEasy Reactive集成合并master的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Java程序啟動時-D指定參數(shù)是什么

    詳解Java程序啟動時-D指定參數(shù)是什么

    java服務啟動的時候,都會指定一些參數(shù),下面這篇文章主要給大家介紹了關(guān)于Java程序啟動時-D指定參數(shù)是什么的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • Spring Boot Admin 快速入門詳解

    Spring Boot Admin 快速入門詳解

    這篇文章主要介紹了SpringBoot Admin 使用指南(推薦),Spring Boot Admin 是一個管理和監(jiān)控你的 Spring Boot 應用程序的應用程序,非常具有實用價值,需要的朋友可以參考下
    2021-11-11
  • 淺談Java list.remove( )方法需要注意的兩個坑

    淺談Java list.remove( )方法需要注意的兩個坑

    這篇文章主要介紹了淺談Java list.remove( )方法需要注意的兩個坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java ScheduledExecutorService定時任務案例講解

    Java ScheduledExecutorService定時任務案例講解

    這篇文章主要介紹了Java ScheduledExecutorService定時任務案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Spring 使用 feign時設置header信息的操作

    Spring 使用 feign時設置header信息的操作

    這篇文章主要介紹了Spring 使用 feign時設置header信息的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Springboot使用thymeleaf動態(tài)模板實現(xiàn)刷新

    Springboot使用thymeleaf動態(tài)模板實現(xiàn)刷新

    這篇文章主要介紹了Springboot使用thymeleaf動態(tài)模板實現(xiàn)刷新,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 解決idea中debug工具欄消失后如何顯示的問題

    解決idea中debug工具欄消失后如何顯示的問題

    這篇文章主要介紹了解決idea中debug工具欄消失后如何顯示的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java中的自增問題介紹

    java中的自增問題介紹

    下面小編就為大家?guī)硪黄猨ava中的自增問題介紹。小編覺得挺不錯的,現(xiàn)在分享給大家。給大家一個參考。
    2016-03-03
  • 一文帶你搞懂Spring響應式編程

    一文帶你搞懂Spring響應式編程

    相信響應式編程經(jīng)常會在各種地方被提到。本篇就為大家從函數(shù)式編程一直到Spring?WeFlux做一次簡單的講解,并給出一些示例,希望大家可以更好的理解響應式編程
    2022-07-07
  • 如何使用SpringBootCondition更自由地定義條件化配置

    如何使用SpringBootCondition更自由地定義條件化配置

    這篇文章主要介紹了如何使用SpringBootCondition更自由地定義條件化配置,幫助大家更好的理解和學習使用springboot框架,感興趣的朋友可以了解下
    2021-04-04

最新評論