[英]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.