ग्राहक समय-समय पर एक एसिंक विधि (लंबी मतदान) कहता है, जो इसे स्टॉक प्रतीक का मान पास करता है, जो सर्वर डेटाबेस से पूछताछ करने के लिए उपयोग करता है और ऑब्जेक्ट को क्लाइंट पर वापस लौटाता है।वसंत के DeferredResult के साथ लंबे मतदान मतदान
मैं वसंत के DeferredResult कक्षा का उपयोग कर रहा हूं, हालांकि मैं इस बात से परिचित नहीं हूं कि यह कैसे काम करता है। ध्यान दें कि मैं नए डेटा के लिए डेटाबेस से पूछने के लिए प्रतीक संपत्ति (क्लाइंट से भेजा गया) का उपयोग कैसे कर रहा हूं (नीचे देखें)।
शायद वसंत के साथ लंबे मतदान के लिए एक बेहतर दृष्टिकोण है?
मैं विधि deferredResult()
से processQueues()
पर प्रतीक संपत्ति कैसे पास करूं?
private final Queue<DeferredResult<String>> responseBodyQueue = new ConcurrentLinkedQueue<>();
@RequestMapping("/poll/{symbol}")
public @ResponseBody DeferredResult<String> deferredResult(@PathVariable("symbol") String symbol) {
DeferredResult<String> result = new DeferredResult<String>();
this.responseBodyQueue.add(result);
return result;
}
@Scheduled(fixedRate=2000)
public void processQueues() {
for (DeferredResult<String> result : this.responseBodyQueue) {
Quote quote = jpaStockQuoteRepository.findStock(symbol);
result.setResult(quote);
this.responseBodyQueue.remove(result);
}
}
क्या आप परिणाम के लिए प्रतीक्षा करना चाहते हैं और इसे ग्राहक को वापस कर सकते हैं? यदि नहीं, तो बस शून्य वापस आओ। यदि हां, तो आप शायद भविष्य का बेहतर उपयोग कर सकते हैं क्योंकि आप बाद में जमा करने वाले थ्रेड से परिणाम निकाल सकते हैं। – Jan