スプリング-非同期2(実施)
メール通知の実施中に遅延応答の問題が発生しました.
ユーザーに注意メールを送るべきだったが、メールの送信が終了するまでクライアントが応答を受信できず、処理が遅延した.
スプリングがよくできていて、実現するのは難しくありません!
Thread poolの数を考慮しましたが、メールがあまり積まれず、すぐにメールを送信する必要もないので、キューサイズを調整するだけで、スレッドpoolの数は本当に最小限です.
AsyncConfig.java
AsyncConfigurer実施時に引き継いだclass Executorメソッドを呼び出して非同期処理を行う場合、このメソッドを上書きしてスレッドプールなどの をリセットすることができる.
ThreadPoolTaskExecutor ThreadPoolExecutorのコアプールサイズ設定 デフォルト管理するThread数字 カーネルプールとキューがいっぱいになると、生成される最大Thread数 のデフォルト値はIntegerです.MAX_VALUE 個のコアプールが満たされた場合(コアプールのサイズを超えるteskに入る)、teskが蓄積できる数は である.非同期メソッドに を追加非同期タスクを指定するデモ
ユーザーに注意メールを送るべきだったが、メールの送信が終了するまでクライアントが応答を受信できず、処理が遅延した.
スプリングがよくできていて、実現するのは難しくありません!
Thread poolの数を考慮しましたが、メールがあまり積まれず、すぐにメールを送信する必要もないので、キューサイズを調整するだけで、スレッドpoolの数は本当に最小限です.
AsyncConfig.java
@Configuration // 설정
@EnableAsync // spring 메소드 비동기 기능 활성화
public class AsyncConfig extends AsyncConfigurerSupport{
@Override
public Executor getAsyncExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//기본적으로 실행 대기하는 thread의 갯수 설정
executor.setCorePoolSize(2);
//동시동작하는 최대 Thread pool 크기
executor.setMaxPoolSize(10);
//thread pool que 크기
executor.setQueueCapacity(500);
// spring이 생성하는 thread의 접두사 설정
executor.setThreadNamePrefix("mail-async-");
//initialize 안해주면 executor 사용 불가
executor.initialize();
return executor;
}
}
MailService.java
@Async
public void assessmentMailBuilder(MailDtomailDto) throws MessagingException{
//서비스 로직
}
AsyncConfigurerSupport AsyncConfigurer実施時に引き継いだclass
getAsyncExecutor()
ThreadPoolTaskExecutor
setCorePoolSize
setMaxPoolSize
setQueueCapacity
@Async
Reference
この問題について(スプリング-非同期2(実施)), 我々は、より多くの情報をここで見つけました https://velog.io/@9sanha/스프링-비동기-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol