[英]Calling blocking endpoint on non-blocking asynchronous service
如果我的反應式端點需要調用一個外部的、非反應式的端點來阻塞東西,我的反應式端點是否仍然是反應式的?
我有 2 個服務正在運行,它們利用 Spring Boot MVC 和 Spring Webflux。
服務 A Spring Webflux
服務 B Spring MVC
現在我的服務 A 響應調用阻塞的服務 B 端點。 我的服務 A 會受到影響並且沒有反應嗎?
如果是? 如何解決這種情況,使我的反應端點保持反應狀態?
如果服務 A 使用 webflux 編寫為響應式服務,則無論它調用誰,它都將始終保持響應式。
我假設我們現在正在使用例如webclient
談論 http/https 。
關於響應式的事情是,如果服務 B 響應非常慢,您的服務 A 將不會讓調用線程等待響應,而是服務 A 的線程將 go 並在等待服務 b 的響應時做其他事情,當響應返回時,任何線程都可以獲取響應並繼續。
如果僅調用其他響應式服務,則響應式服務不是響應式的。 它總是被動的。 因為它對事件做出反應。
有一些警告。 例如,如果您正在與數據庫通信,這里的數據庫驅動程序需要是遵循 R2DBC 規范的特定驅動程序。
您會看到關於如何編寫數據庫驅動程序的傳統 JDBC 規范被設計為固有阻塞。 如果您遵循規范並編寫了驅動程序,則驅動程序將自動必須阻塞。 你別無選擇。
因此 spring 創建了一個新規范 (R2DBC),它本身並不是阻塞的,因此您需要一個符合該規范的驅動程序。 否則你的服務會受到阻塞行為的影響。
但你的問題的答案是。
不,如果我們在談論 http 從一項服務到另一項服務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.