2013-08-18 3 views
0

사용자 지정 Akka 라우터를 만드는 예 (예 : http://doc.akka.io/docs/akka/snapshot/scala/routing.html#custom-router-scala)는 라우터가 대상 액터/보낸 사람 쌍 목록을 반환하여 Akka에게 메시지를 보낼 기본 액터를 알리는 것을 보여줍니다. 이 패턴을 배우에게 선호하는 이유는 tell()을 사용하여 해당 액터에게 메시지를 보내는 것입니다.tell()에 문제가 있습니까? 맞춤 Akka 라우터의 다른 액터가 있습니까?

특히, 라우터에서 tell()을 사용하는 것이 좋지 않습니까, 비동기적일 수 있습니다 (나중에 라우팅 함수를 호출하는 스레드가 아닌 다른 스레드에서)?

답변

2

1)이 패턴은 배우에게 메시지를 보내기 위해 tell()을 사용하는 것보다 선호되는 이유는 무엇입니까?

라우터에는 라우트로 보내기 (예 : 크기 조정 등) 이상의 기능이 있기 때문입니다. 메시지 라우팅과 관련된 나머지 논리와 경로를 결정하는 논리를 구별하는 것은 논리의 좋은 분리입니다. 이렇게하면 서로 다른 부분을 서로 독립적으로 변경할 수 있습니다. 또한 createRoute의 내부에 추가로 tell을 추가하기 시작하면 그다지 효과적이지 않습니다. 부작용이 있으므로 피해야합니다.

2) 특히 라우터에서 tell()을 사용하는 것이 좋지 않습니까, 비동기적일 수 있습니다 (나중에 라우팅 함수를 호출하는 스레드가 아닌 다른 스레드에서)?

위에서 언급 한 것처럼 이것이 가능할 수도 있지만 실제로는 좋지 않습니다. 이러한 종류의 부작용은 테스트하기가 극히 어려울 수 있으며 기능적 패러다임에 적합하지 않습니다. 이와 같은 것을 정말로 필요로한다면 라우팅 로직을 위해 라우터 대신 액터를 사용하십시오. 라우터는 라우팅을 수행하기위한 간단한 모델을 제공합니다. 요구 사항이이 모델에 맞지 않으면 라우터가 적합하지 않을 수도 있습니다.

관련 문제