2024 07 12
2024-07-12¶
Akka Dispatcher¶
참고: https://blog.naver.com/kbh3983/221142958800 참고: https://helloino.tistory.com/93 참고: https://velog.io/@leesomyoung/Akka-Classic-Dispatchers
- 디스패처란?
- 쓰레드풀에서 실행가능한 스레드를 가져다가 처리할 메시지와 함께 액터에게 전달해 액터가 동작하도록 하는 엔진
- 디스패처 설정을 통해 쓰레드 풀, 메일박스 관련 설정 가능
- 디스패처 종류도 쓰레드/메일박스 처리 방식에 따라 나뉨
- Dispatcher
- Pinned Dispatcher
- Balancing Dispatcher
- 모든 Dispatcher는 ExecutionContext를 상속받음 (Future 실행 가능)
- 모든 ActorSystem은 디폴트 디스패쳐를 가지고, 특별한 지정 아니면 이걸 사용 (akka.actor.default-dispatcher.executor)
- executor가 선택되지 않았다면, "fork-join-executor"가 선택됨
- 설정 방법
- 클래스 패스 아래 application.conf 설정 파일 읽음
- fork-join-executor를 사용
- actor dispatcher 세팅
- 배포 방식
- 액터 선언 방식 유지 :
val myActor = context.actorOf(Props[MyActor](), "myActor") - 액터 선언 방식 변경 :
val myActor = context.actorOf(Props[MyActor]().withDispatcher("my-dispatcher"), "myActor")
- 액터 선언 방식 유지 :
- Tips
- 서비스 로직이 Blocking 인 경우, Actor가 하나의 쓰레드 풀을 가지고 있기에 액터가 실행 안될 수 있음