2017-09-14 10 views
5

मैं Spring Boot to build a RESTful web service का उपयोग कर रहा हूं। मेरा आईडीई एक्लिप्स ऑक्सीजन है।स्प्रिंग-बूट: एकाधिक अनुरोधों को एक साथ संभालते हैं

मैं क्रोमके माध्यम से हर 2 सेकंड में कई HTTP GET अनुरोध भेजने, लेकिन वे एक द्वारा एक ट्रिगर कर रहे हैं। प्रत्येक अनुरोध पिछले अनुरोध को समाप्त करने की प्रतीक्षा करेगा।

@RestController 
@RequestMapping("/dummy") 
public class DummyController { 
    @RequestMapping(method = RequestMethod.GET) 
    public ResponseEntity<Map<String, String>> dummytsp(@RequestParam(value="msg", defaultValue="Hello") String msg) { 
     System.out.println("" + new Date() + ": ThreadId " + Thread.currentThread().getId()); 

     try { 
      Thread.sleep(5000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     Map<String, String> response = new HashMap<>(); 
     response.put("message", msg); 
     return new ResponseEntity<>(response, HttpStatus.OK); 
    } 
} 

मेरे कंसोल बाहर डाल है:

Thu Sep 14 11:31:15 EDT 2017: ThreadId 25 
Thu Sep 14 11:31:20 EDT 2017: ThreadId 26 
Thu Sep 14 11:31:25 EDT 2017: ThreadId 28 
Thu Sep 14 11:31:30 EDT 2017: ThreadId 30 

सांत्वना उत्पादन पता चलता है कि नियंत्रक हर 5 सेकंड कहा जाता है

यहाँ मेरी नियंत्रक कोड है। लेकिन मैं अनुरोध प्रत्येक 2 सेकंड अनुरोध भेज रहा हूं।

मैं कई आने वाले अनुरोधों को एक साथ कैसे संभाल सकता हूं? (मैं सांत्वना उत्पादन हर 2 सेकंड देखना चाहिए)

अद्यतन:

अगर मैं विभिन्न ब्राउज़र में अनुरोध भेजने के लिए, यह पूरी तरह से काम करता है। यदि मैं इसे उसी ब्राउज़र/एप्लिकेशन में परीक्षण करता हूं जो सत्र साझा करता है, तो समस्या आ जाएगी।

क्या से समान सत्र से समवर्ती एकाधिक अनुरोध स्वीकार करना संभव है?

धन्यवाद!

+0

मैं इसे पुन: पेश नहीं कर सकता। डिफ़ॉल्ट रूप से स्प्रिंग बूट वेब अनुप्रयोग बहु-थ्रेडेड होते हैं और एक साथ कई अनुरोधों को संभाल लेंगे। क्या आप एंबेडेड टोमकैट का उपयोग कर रहे हैं? क्या आपने किसी भी डिफ़ॉल्ट थ्रेड सेटिंग्स को बदल दिया है (उदा। 'Server.tomcat.max-threads')? –

+0

@KyleAnderson कोड ठीक काम करता है अगर मैं विभिन्न ब्राउज़रों से अनुरोध भेजता हूं। जब मैं एक ही ब्राउज़र में अनुरोध (खुले टैब) भेजता हूं तो समस्या दिखाई देती है। मैंने अपनी पोस्ट पीएलएस चेक अपडेट की। Ty! –

+0

यह _might_ एक ब्राउज़र विशिष्ट क्विर्क हो। विंडोज 10 पर, क्रोम और फ़ायरफ़ॉक्स एक ही यूआरएल के लिए कई अनुरोध कतार लगते हैं, जबकि आईई, एज, और कर्ल नहीं करते हैं। –

उत्तर

4

डिफ़ॉल्ट रूप से स्प्रिंग बूट वेब अनुप्रयोग बहु-थ्रेडेड हैं और एक साथ कई अनुरोधों को संभाल लेंगे।

यह ब्राउज़र विशिष्ट क्विर्क हो सकता है। विंडोज 10 पर, क्रोम & फ़ायरफ़ॉक्स एक ही यूआरएल के लिए कई अनुरोध कतार में प्रतीत होता है, जबकि आईई, एज, & कर्ल नहीं करता है।

-3

वसंत बीन्स डिफ़ॉल्ट सिंगलटन बीन्स द्वारा हैं। सिंगलटन का अर्थ है प्रति कंटेनर एक ऑब्जेक्ट उदाहरण। तो वास्तव में एक कंटेनर में डमी कंट्रोलर का एक उदाहरण है। पहला अनुरोध आता है और थ्रेड 5 सेकंड के लिए सो जाता है। एक बार यह पूर्ण निष्पादन उठता है और ऑब्जेक्ट जारी किया जाता है, जिसे दूसरे अनुरोध द्वारा उठाया जाएगा। Is REST controller multithreaded?

+0

यदि ऐसा है तो स्प्रिंग-बूट एक साथ कई अनुरोधों को कैसे संभालता है? –

+4

जबकि 'नियंत्रक' बीन एक 'सिंगलटन' है, यह कई तरीकों से इसकी विधियों तक पहुंचने से नहीं रोकता है।हकीकत में वसंत बूट सर्वलेट कंटेनर बहु-थ्रेडेड है और इस प्रकार एकाधिक अनुरोधों को समवर्ती रूप से संसाधित किया जा सकता है। –

संबंधित मुद्दे