일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- between date
- github
- 라즈베리파이
- Spring
- ORACLE CLOUD
- Linux
- python 개발환경
- ubuntu
- between 날짜
- MySQL
- Spring Boot
- oracle
- Java
- datasource
- hikari
- mybatis
- git
- 배열스트링
- log4j profile
- springboot
- bitbucket
- template
- STS
- oracle between
- intellij
- catalina log
- Gradle
- log4j2
- Spring Security
- hikaricp
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- between date
- github
- 라즈베리파이
- Spring
- ORACLE CLOUD
- Linux
- python 개발환경
- ubuntu
- between 날짜
- MySQL
- Spring Boot
- oracle
- Java
- datasource
- hikari
- mybatis
- git
- 배열스트링
- log4j profile
- springboot
- bitbucket
- template
- STS
- oracle between
- intellij
- catalina log
- Gradle
- log4j2
- Spring Security
- hikaricp
- Today
- Total
파워노트
[spring] 비동기 처리 정리. 본문
spring camp 에서 토비님의 비동기 강좌 정리 입니다.
1. @Async 사용시 return Type
- void
- Future<T>
- ListenableFuture<T>
- CompletableFuture<T>
> Future
get() 메소드를 통해 비동기 결과를 가져올 수 있다.
> ListenableFuture
리스너를 통해. 성공, 실패 결과를 처리 할 수 있음.
기본자바에는 없고 spring 4.0에 추가됨.
> CompletableFuture
자바 8에 포함
completableFuture 비동기 처리에 대한 처리가 지원
2. Async 처리시에
기본Thread는 SimpleAsyncTaskExceutor 쓰레드가 하나 생성이후 사용되고 버려짐.
쓰레드 풀이 아니므로 낭비임.
결론부터 말하자면 쓰레드풀을 만들어서 써라.
> Thread Pool 설정 사용
> 실사용 예)
@Configuration @EnableAsync public class AsyncThreadConfiguration{ @Bean(name="asyncThreadPoolTaskExecutor") publicExecutorasyncThreadTaskExecutor(){ ThreadPoolTaskExecutort hreadPoolTaskExecutor = new ThreadPoolTaskExecutor(); threadPoolTaskExecutor.setCorePoolSize(10); threadPoolTaskExecutor.setQueueCapacity(50); threadPoolTaskExecutor.setMaxPoolSize(100); threadPoolTaskExecutor.setThreadNamePrefix("TASK-POOL"); returnt hreadPoolTaskExecutor; } } |
50개의 @Async 메소드 호출이 동시에 일어나도 10개만 사용.
. 1 corepool 이상이 요청되면 (10개처리)
. 2. queue에 먼저 쌓는다 ( 나머지 40개 대기)
. 3. 그래도 감당이 안된다면 Maxpool 까지 늘림.
3. 비동기 스프링 MVC
..1 Controller return 을 Callable을 지원한다.
..2 WebAsyncTask 에서 timeout과 thread를 지정할수 있다..
..3 DeferedResult 지연결과처리 공장히 유용. thread는 이미 반환하고 채널만 연결해놓고
대기상태에서 응답이 오면 결과를 쓰면 됨.
@Async랑 보통 같이 사용.
..4 ListenableFuture : DeferedResult + ListenableFuture => 좀더 간편하게 사용.
..5 CompletableFuture : ListenableFuture callback hell 의 어려움 개선. 비동기 동시 조합, 결합 가능
4. 비동기 논블로킹 API 호출
..1 RestTemplate 은 동기-블로킹 방식 : 비효율… 쓰레드 점유함.
..2 AsyncRestTemplate : 비동기 처리 가능
AsyncRestTemplate 처리 후 listenableFuture 로 반환하여 처리.
..3 논블록킹 IO를 지원하는 라이브러리 사용 Netty
5. AsyncRestTemplate 를 여러개의 비동기처리를 동시 조합은 어떻게 해야 할까?
AsyncRestTemplate + ListenableFuture 콜백 지옥
==> AsyncRestTemplate + CompletableFuture 로 변경 처리하여 가능
6. 정리하면…
'spring boot' 카테고리의 다른 글
[STS] spring boot 프로젝트 생성하기. (0) | 2021.08.03 |
---|---|
[STS] Spring Tool Suite 설치 방법 (0) | 2021.08.03 |
[JPA] 양방향 연관관계시 주의.. (0) | 2020.08.04 |
[intelij] spring boot 프로젝트 생성하기 (0) | 2020.06.13 |
Security Filter (2) | 2020.04.17 |