हमारे पास कुछ अनोखा मामला है जहां हमें बाहरी एपीआई के साथ इंटरफ़ेस करने की आवश्यकता है जिसके लिए हमें वास्तविक समय ईवेंट के लिए अपने एंडपॉइंट को लंबे समय तक मतदान करने की आवश्यकता होती है।वसंत में लंबे मतदान
बात यह है कि हमारे पास किसी भी समय इस अंतराल को मारने वाले 80,000 लोग/डिवाइस हो सकते हैं, घटनाओं को सुन सकते हैं, डिवाइस/व्यक्ति प्रति कनेक्शन 1 कनेक्शन।
जब कोई ग्राहक हमारी स्प्रिंग सेवा से घटनाओं के लिए लंबे मतदान तक अनुरोध करता है, तो हमारी सेवा बदले में बाहरी एपीआई को घटनाओं के लिए लंबे मतदान के लिए एसिंक कॉल बनाती है। बाहरी एपीआई ने को न्यूनतम परिभाषित किया है, लंबे मतदान समय सीमा 180 सेकंड पर सेट की जा सकती है।
तो यहां हमारे पास ऐसी स्थिति है जहां एक कतार वाला धागा पूल काम नहीं करेगा, क्योंकि अगर हमारे पास कुछ थ्रेड पूल (5 मिनट, 10 अधिकतम, 10 कतार) है तो 10 धागे पर काम हो रहा है स्पॉटलाइट और 10 कतार में एक मौका नहीं मिलेगा जब तक कि मौजूदा 10 में से कोई एक नहीं किया जाता है।
हमें इसकी सेवा करने या इसे विफल करने की आवश्यकता है (हम इसके पीछे लोड बैलेंसर्स इत्यादि रखेंगे), लेकिन हम वास्तविक मतदान के बिना क्लाइंट फांसी छोड़ना नहीं चाहते हैं।
हम इसके लिए DeferredResult का उपयोग करने और नियंत्रक से लौटने में देख रहे हैं।
@RequestMapping(value = "test/deferredResult", method = RequestMethod.GET)
DeferredResult<ResponseEntity> testDeferredResult() {
final DeferredResult<ResponseEntity> deferredResult = new DeferredResult<ResponseEntity>();
CompletableFuture.supplyAsync(() -> testService.test()).whenCompleteAsync((result, throwable) -> deferredResult.setResult(result));
return deferredResult;
}
मैं अगर मैं सही रास्ते पर हूँ CompletableFuture.supplyAsync()
विधि से पूछताछ कर रहा हूँ, और यह भी मैं एक प्रबंधक और प्रबंधक (और विन्यास) किस तरह का सबसे अच्छा प्रदान करना चाहिए पूरा करने के लिए की धुन के लिए कुछ हमारा काम
मैंने विभिन्न लेख, पोस्ट और इस तरह पढ़ा है और मैं यह देखना चाहता हूं कि किसी के पास कोई ज्ञान है जो हमारी विशिष्ट स्थिति में मदद कर सकता है।
शायद आप vert'x करने का मौका दे सकते हैं? यह बहुत अच्छा async समर्थन – nowszy94