javascript
java 长轮询_java – Spring中的长轮询
我們有一個獨特的案例,我們需要與外部API接口,這需要我們長時間輪詢他們的端點以獲得他們所謂的實時事件.
問題是我們可能有多達80,000人/設備在任何給定時間點擊此端點,監聽事件,每個設備/人1個連接.
當客戶端從我們的Spring服務發出請求以對事件進行長輪詢時,我們的服務隨后會對外部API進行異步調用以對事件進行長輪詢.外部API已定義最小長輪詢超時可設置為180秒.
所以在這里我們遇到一個帶隊列的線程池不能工作的情況,因為如果我們有一個類似于(5分鐘,10個最大值,10個隊列)的線程池,那么10個線程可能會成為焦點,并且隊列中的10個將無法獲得機會,直到當前10個中的一個完成.
我們需要服務它或者失敗它(我們將把負載平衡器等放在它后面),但是我們不希望在沒有實際輪詢的情況下讓客戶端掛起.
我們一直在研究如何使用DeferredResult,并從控制器返回.
一些調整的東西
@RequestMapping(value = "test/deferredResult",method = RequestMethod.GET)
DeferredResultCompletableFuture.supplyAsync(() -> testService.test()).whenCompleteAsync((result,throwable) -> deferredResult.setResult(result));
return deferredResult;
}
我在質疑我是否在正確的道路上,并且我是否應該為CompletableFuture.supplyAsync()方法提供執行程序和什么樣的執行程序(和配置)以最好地完成我們的任務.
我已經閱讀了各種文章,帖子等,我想知道是否有人知道可能有助于我們的具體情況.
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java 长轮询_java – Spring中的长轮询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ldap seach java_从LDA
- 下一篇: java中IOUtil.readLong