2017-09-14 32 views
5

Tôi đang sử dụng Spring Boot to build a RESTful web service. IDE của tôi là Eclipse Oxygen.Spring-Boot: Xử lý nhiều yêu cầu đồng thời

tôi gửi nhiều HTTP get yêu cầu trong mỗi 2 giây qua Chrome, nhưng họ được kích hoạt từng người một. Mỗi yêu cầu sẽ đợi yêu cầu trước đó kết thúc.

Đây là mã điều khiển của tôi:

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

console của tôi đặt ra là:

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 

Giao diện điều khiển đầu ra cho thấy bộ điều khiển được gọi là mỗi 5 giây. Nhưng tôi gửi yêu cầu cứ sau 2 giây.

Tôi có thể xử lý đồng thời nhiều yêu cầu đến như thế nào? (Tôi sẽ thấy giao diện điều khiển đầu ra mỗi 2 giây)

CẬP NHẬT:

Nếu tôi gửi các yêu cầu trong các trình duyệt khác nhau, nó hoạt động một cách hoàn hảo. Nếu tôi kiểm tra trong cùng một trình duyệt/ứng dụng chia sẻ phiên, sự cố sẽ xảy ra.

Có thể chấp nhận nhiều yêu cầu đồng thời từ cùng một phiên không?

Cảm ơn!

+0

Tôi không thể tạo lại điều này. Theo mặc định, các ứng dụng web khởi động Spring đa luồng và sẽ xử lý nhiều yêu cầu đồng thời. Bạn đang sử dụng Tomcat nhúng? Bạn đã thay đổi bất kỳ cài đặt chuỗi mặc định nào (ví dụ: 'server.tomcat.max-threads')? –

+0

@KyleAnderson mã hoạt động tốt nếu tôi gửi yêu cầu từ các trình duyệt khác nhau. Sự cố hiển thị khi tôi gửi yêu cầu (tab đang mở) trong cùng một trình duyệt. Tôi cập nhật kiểm tra bài đăng của tôi. ty! –

+0

This _might_ là một trình duyệt riêng biệt. Trên Windows 10, Chrome & Firefox dường như xếp hàng nhiều yêu cầu đến cùng một URL, trong khi IE, Edge và curl thì không. –

Trả lời

4

Theo mặc định, ứng dụng web khởi động Spring đa luồng và sẽ xử lý đồng thời nhiều yêu cầu.

Đây có thể là một trình duyệt cụ thể. Trên Windows 10, Chrome & Firefox dường như xếp hàng nhiều yêu cầu đến cùng một URL, trong khi IE, Edge, & curl thì không.

-3

Đậu mùa xuân theo hạt đơn mặc định. Singleton có nghĩa là một cá thể đối tượng trên mỗi vùng chứa. Vì vậy, thực tế có một trường hợp của DummyController trong một thùng chứa. Yêu cầu đầu tiên đến và Chủ đề chuyển sang chế độ ngủ trong 5 giây. Một khi nó thức dậy hoàn thành thực hiện và đối tượng được phát hành, mà sẽ được chọn theo yêu cầu thứ hai. Kiểm tra Is REST controller multithreaded?

+0

Nếu đó là trường hợp Spring-Boot xử lý nhiều yêu cầu đồng thời như thế nào? –

+4

Trong khi 'Controller' bean là một' Singleton', điều này không loại trừ các phương thức của nó khỏi bị truy cập qua nhiều luồng.Trong thực tế, Spring Boot Servlet Container là đa luồng và do đó nhiều yêu cầu có thể được xử lý đồng thời. –

Các vấn đề liên quan