回覆列表
  • 1 # 使用者7311047188514

    先確定你的Servlet容器是否支援servlet 3.0的非同步請求,spring MVC版本大於等於3.2。

    可以在controller裡返回DeferredResult或者Callable使得請求變成servlet 3.0的非同步請求。容器會等待你處理完成後的回撥通知,不會佔用容器處理請求的執行緒池。

    然後controller裡面請求B伺服器的邏輯要使用Spring WebFlux提供的響應式非阻塞WebClient來發起請求,等B服務請求回來後在回撥裡面去通知容器把處理結果返回給客戶端。

    不需要自己去維護一個執行緒池來處理這些請求,把非同步的管理託管給容器和框架的WebClient去處理,這樣再透過最佳化容器配置和WebClient配置來提高併發會更加簡單。

    參考:

    Spring官方文件 spring-mvc 的1.5節Asynchronous Requests

    Asynchronous Requests

    Spring 官方文件 spring webflux 第2節WebClient

    Web on Reactive Stack

  • 中秋節和大豐收的關聯?
  • 45天的寶寶鼻孔有鼻屎,怎麼處理呢?