先確定你的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
Spring 官方文件 spring webflux 第2節WebClient
先確定你的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 RequestsSpring 官方文件 spring webflux 第2節WebClient
Web on Reactive Stack