복붙노트

[SPRING] Spring-Boot : 여러 요청을 동시에 처리

SPRING

Spring-Boot : 여러 요청을 동시에 처리

나는 RESTful 웹 서비스를 만들기 위해 Spring Boot를 사용하고있다. 내 IDE는 Eclipse Oxygen입니다.

Chrome을 통해 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 초마다 콘솔 출력을보아야합니다)

최신 정보:

다른 브라우저에서 요청을 보내면 완벽하게 작동합니다. 세션을 공유하는 동일한 브라우저 / 응용 프로그램에서 테스트하면 문제점이 나옵니다.

동일한 세션의 동시 요청을 동시에 수용 할 수 있습니까?

감사!

해결법

  1. ==============================

    1.기본적으로 스프링 부트 웹 애플리케이션은 멀티 스레드이며 여러 요청을 동시에 처리합니다.

    기본적으로 스프링 부트 웹 애플리케이션은 멀티 스레드이며 여러 요청을 동시에 처리합니다.

    브라우저 별 특징 일 수 있습니다. Windows 10에서 Chrome과 Firefox는 IE, Edge, & curl이 아닌 여러 요청을 동일한 URL에 대기시키는 것처럼 보입니다.

  2. ==============================

    2.스프링 빈은 기본적으로 싱글 톤 빈이다. 싱글 톤은 컨테이너 당 하나의 객체 인스턴스를 의미합니다. 그래서 실제로 하나의 컨테이너에 DummyController 인스턴스가 하나 있습니다. 첫 번째 요청이 도착하고 Thread가 5 초 동안 잠자기 상태가됩니다. 깨어나면 실행이 완료되고 객체가 해제되고 두 번째 요청에 의해 선택됩니다. REST 컨트롤러가 다중 스레드인지 확인하십시오.

    스프링 빈은 기본적으로 싱글 톤 빈이다. 싱글 톤은 컨테이너 당 하나의 객체 인스턴스를 의미합니다. 그래서 실제로 하나의 컨테이너에 DummyController 인스턴스가 하나 있습니다. 첫 번째 요청이 도착하고 Thread가 5 초 동안 잠자기 상태가됩니다. 깨어나면 실행이 완료되고 객체가 해제되고 두 번째 요청에 의해 선택됩니다. REST 컨트롤러가 다중 스레드인지 확인하십시오.

  3. from https://stackoverflow.com/questions/46223363/spring-boot-handle-multiple-requests-concurrently by cc-by-sa and MIT license