簡體   English   中英

Vertx WebClient 在多個 Verticle 之間共享還是單一?

[英]Vertx WebClient shared vs single across multiple verticles?

我使用 vert.x 作為 api 網關來將調用路由到下游服務。

截至目前,我正在使用單個 web 客戶端實例,該實例在多個頂點之間共享(通過 guice 注入)

每個verticle都有自己的webclient有意義嗎? 對提高性能有幫助嗎? (我的每個網關實例運行 64 個 Vericles,每秒處理大約 1000 個請求)

每種方法的優缺點是什么?

有人可以幫助找出相同的理想策略嗎?

謝謝

Vert.x 針對每個 Verticle 使用單個WebClient進行了優化。 正如 Vert.x 的首席開發人員 Julien Viet 所述,在線程之間共享單個WebClient實例可能有效,但它會對性能產生負面影響,並可能導致一些代碼在“錯誤”的事件循環線程上運行:

因此,如果您在 Verticle 之間共享 web 客戶端,那么您的 Verticle 可能會重用之前打開的連接(因為池化),並且您將在事件循環中獲得意想不到的回調。 此外,web 客戶端中的同步功能在從不同線程集中使用時可能會變得滿足。

此外, HttpClient的 Vert.x 文檔WebClient使用的底層 object ,明確聲明不要在 Vert.x 上下文之間共享它(每個 Verticle 都有自己的上下文):

HttpClient 可以在 Verticle 中使用或嵌入。

在 Verticle 中使用時,Verticle 應該使用自己的客戶端實例。

更一般地說,客戶端不應在不同的 Vert.x 上下文之間共享,因為它可能導致意外行為。

例如,保持活動連接將在打開連接的請求的上下文中調用客戶端處理程序,后續請求將使用相同的上下文。

Vert.X 4.2.2 發布后最好的方法是什么,我們可以在同一頂點的多個實例之間共享 http 客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM