eclipse 에서 java 로 akka를 사용하다보니 예상치 못한 에러가 발생한다.
1.
onReceive 안에서
현재 클래스의 전역변수를 참조할 때,
this.변수 를 사용하지 않고,
암묵적으로 단순히 변수명만 사용하면
예상치 못하게 그 변수의 초기값이 참조된다. 왜지????
분명 지역변수를 사용하지는 않는다.
(스칼라의 클로저가 작동한건 아니겠지???-_-;;)
> 밑에 4번과 같은 문제인듯...
2.
값자기 잘되던 소스에 에러가 난다.(빨간줄..)
import 하라고 하는데,,,
음. import 할 필요가 없는 상황인데 말이다.
프로젝트 clean 하니 해결되었다.
> akka 가 scala로 작성되어서 그런지 좀... 이상하다....
3.
akka를 실행하고 나서
따로 shutdown 해주지 않고, 계속 테스트(실행)하다보면,,
작업관리자에 java 프로세스가 몇개씩 남아있다.-_-;;
4.
재귀적인 느낌으로 자기 자신을 호출(tell)할 경우
onReceive 했을때 전역변수를 확인해보면 리셋되어 있다.-_-;;;
> 호출(tell)할 때 액터 생성시 문제가 있었다.
1. ActorRef conn = context().actorOf(Props.create(B_AkkaController.class));
2. ActorRef conn = getSelf();
//1 ActorRef conn = context().actorOf(Props.create(B_AkkaController.class)); //2 ActorRef conn = getSelf();
첫번째 코드처럼 하면, 새로운 클래스가 생성되어서, 기존의 전역변수를 재활용 할 수 없다.
두번째 코드로 해야 계속 유지가 된다.
5.
A -> B1
A -> B2
A -> B3
A -> B4
....
A <- B1, B2, B3, B4,,,,,
B를 동시에 100개로 멀티쓰레드 구성을 한다면,,,
뭐,,, 동작은 하지만...
뭐,,, B도 100개가 동작하겠지만...
A가 문제다.
A의 onReceive 에서 100개의 reply를 Queue의 동기식으로 처리하기 때문에
멀티쓰레드의 결과를 onReceive에서 받을 때 지연이 발생한다....이런;;;
결국.... 맵리듀스 문제가 다시 불거진다;;;
포크 앤 조인을 찾아봐야 하나???
...
분명 분산처리를 위해서 멀티쓰레드를 사용하는 것이 맞는데
결과들을 다시 합치는 과정으로 데이터 무결성을 보장하기 위해 싱글쓰레드 하면,
속도 지연이 심각하다-_-;;;;.