2017-09-14 36 views
5

Spring Boot to build a RESTful web service kullanıyorum. IDE'm Eclipse Oksijen.Spring-Boot: Aynı anda birden çok istekte bulunun

Chromearacılığıyla her 2 saniyede içinde birden HTTP alma istekleri göndermek, ancak tek tarafından biri tetiklenir. Her istek, önceki isteğin tamamlanmasını bekler.

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 

konsol çıkış kontrolör her 5 saniyede denir gösterir:

@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); 
    } 
} 

Benim konsol dışarı koymak geçerli:

İşte benim denetleyicisi kodudur. Ama her 2 saniyede bir istemi gönderiyorum.

Birden çok gelen isteği aynı anda nasıl ele alabilirim?

Ben farklı tarayıcılarda istekleri gönderirseniz

, mükemmel çalışır:

GÜNCELLEME (Ben konsol çıktı üretmesi her 2 saniyede görmelisiniz). Oturumu paylaşan aynı tarayıcı/uygulamada test edersem, sorun ortaya çıkar.

numaralı oturumda aynı anda birden çok istek kabul edilebilir mi?

Teşekkürler!

+0

Bunu yeniden oluşturamıyorum. Varsayılan olarak, Spring Boot web uygulamaları çok iş parçacıklıdır ve aynı anda birden çok isteği ele alır. Gömülü Tomcat kullanıyor musunuz? Varsayılan iş parçacığı ayarlarından herhangi birini değiştirdiniz mi (ör. 'Server.tomcat.max-threads')? –

+0

@KyleAnderson, istekleri farklı tarayıcılardan gönderdiğimde kod çalışır. Aynı tarayıcıda istekleri (açık sekmeleri) gönderdiğimde sorun ortaya çıkıyor. Gönderiyi güncelledim. ty! –

+0

Bu _might_ tarayıcıya özgü bir tuhaflık olabilir. Windows 10'da, Chrome ve Firefox, aynı URL'ye birden çok istekte sıraya girerken, IE, Edge ve curl ise görünmez. –

cevap

4

Varsayılan olarak, Spring Boot web uygulamaları çok iş parçacıklıdır ve aynı anda birden çok isteği ele alır.

Bu, tarayıcıya özgü bir sorgu olabilir. Windows 10'da, Chrome & Firefox, aynı URL'ye birden çok istekte sıraya girerken, IE, Edge, & curl yapmaz.

-3

Yay fasulyeleri, varsayılan olarak tekli fasulyedir. Singleton, konteyner başına bir nesne örneğini ifade eder. Yani aslında bir konteynerde bir tane DummyController var. İlk istek geldi ve iş parçacığı 5 saniye uyumaya gitti. Bir kez tam yürütme uyandırır ve nesne ikinci talep tarafından alınacak olan, serbest bırakılır. Is REST controller multithreaded?

+0

Bu durumda, Spring-Boot eş zamanlı olarak çok sayıda istekte bulunur mu? –

+4

Denetleyici çekirdeği bir "Tekil" iken, bu yöntem, yöntemlerinin birden çok iş parçacığı üzerinden erişilmesini engellemez.Gerçekte, Spring Boot Servlet Container çok iş parçacıklıdır ve bu nedenle birden çok istek aynı anda işlenebilir. –

İlgili konular