如果我的反應式端點需要呼叫一個外部的、非反應式的端點來阻塞東西,我的反應式端點是否仍然是反應式的?
我有 2 個服務運行利用 Spring Boot MVC 和 Spring Webflux。
服務一個 Spring Webflux
服務 B Spring MVC
現在我的服務 A 回應呼叫阻塞的服務 B 端點。我的服務 A 會受到影響并且沒有反應嗎?
如果是?如何解決這種情況,使我的反應端點保持反應狀態?
uj5u.com熱心網友回復:
如果服務 A 使用 webflux 撰寫為回應式服務,則無論它呼叫誰,它都將始終保持回應式。
我假設我們現在正在談論 http/https,例如webclient。
關于回應式的事情是,如果服務 B 回應非常慢,您的服務 A 將不會讓呼叫執行緒等待回應,而是服務 A 的執行緒會在等待服務 b 的回應時去做其他事情,當回應回傳時,任何執行緒都可以獲取回應并繼續。
如果僅呼叫其他回應式服務,則回應式服務不是回應式的。它總是被動的。因為它對事件做出反應。
有一些警告。例如,如果您正在與資料庫通信,這里的資料庫驅動程式需要是遵循 R2DBC 規范的特定驅動程式。
您會看到關于如何撰寫資料庫驅動程式的傳統 JDBC 規范被設計為天生是阻塞的。如果您遵循規范并撰寫了驅動程式,則驅動程式將自動必須阻塞。你別無選擇。
所以 spring 創建了一個新的規范(R2DBC),它本質上不是阻塞的,所以你需要一個符合該規范的驅動程式。否則你的服務會受到阻塞行為的影響。
但你的問題的答案是。
不,如果我們正在談論從一項服務到另一項服務的 http。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/419992.html
標籤:
上一篇:在Websphere8.5.5中部署spring-boot2.5.x應用程式時出錯拋出java.lang.NoClassDefFoundError:javax.servlet.http.HttpSes
