나는 그것을 이해하고 배우에게 "화재와 잊지"스타일의 메시지를 보낼 수 있습니다! 연산자 또는 "보내기 및 받기 - 미래"스타일? 운영자. 메시지를 통해 전달되는 배우? self.reply를 호출해야합니다. 그렇지 않으면 발신자가 시간 초과 예외를 수신합니다. 반면에, 메시지를 통해 전달되는 배우! 메시지가 다른 액터로부터 전달되지 않으면 self.reply를 가질 수 없습니다.메시지가 전달되면 반환 된 미래가 예상되는지 여부를 Akka 배우가 구별해야합니까?
내 질문은 배우가 컴파일 타임에 호출 여부를 알고 있어야한다는 것입니다. 또는? ??? 또는 self.reply의 필요성을 런타임에 확인할 수 있다면 어떻게 결정할 수 있습니까? 아마도 self.tryReply가 관련되어 있지만 akka 문서는 실패한 회신 시도가 오류 경우임을 암시하는 것처럼 보입니다. 반면 발신자가 액터가 아닌 경우에는 메시지가 전달 된 경우 회신에 실패하는 것이 실제로 오류가 아닙니다. !
편집 :
class ak extends Actor {
def receive = {
case msg:String => {
val response = "Received: " + msg
println(response)
self.reply(response)
response
}
}
}
이 변경 수정 :
package akTest
import akka.actor.Actor
object Main1 {
val worker = Actor.actorOf[ak].start()
def main(args: Array[String]) {
val resp = worker ? "Hi"
resp.get
println(resp)
}
}
class ak extends Actor {
def receive = {
case msg:String => {
val response = "Received: " + msg
println(response)
response
}
}
}
이 Exception in thread "main" akka.dispatch.FutureTimeoutException: Futures timed out after [4995] milliseconds
그래서 나는 배우에 self.reply를 추가 가져옵니다 여기
는 일부 코드입니다 타임 아웃 에러 하지만 불을 보내는 메인 2가 지금 경우 메시지 잊지 :object Main2 {
val worker = Actor.actorOf[ak].start()
def main(args: Array[String]) {
val resp = worker ! "Hi"
println(resp)
}
}
을, 새로운 오류가 생성됩니다 [ERROR] [2/1/12 2:04 PM] [akka:event-driven:dispatcher:global-1] [LocalActorRef] No sender in scope, can't reply.
가 어떻게 그 응답의 방식 사이의 커플 링을 제거하기 위해 내 배우를 쓸 수 있습니다 보낸 사람의 호출 방법? 나는 배우의 버전을 1 개 갖고 싶지 않습니다! 배우의 두 번째 버전은?
에 댓글을 올리려면 미래를 가지고 있고 그들은 모두 한 가지 공통점이 있습니다 거의 그들 중 누구도 해결책을 보여 없다합니다. 그것은이 곳의 모든 지점입니다. [BTW, 분명히 문서와 예제가 명확하지 않습니다.] – Rob
문서를 개선하려면 ML에서 수정해야 할 사항을보고하거나 티켓을 직접 열어야합니다. 우선 코드를 작성하지 않습니다. 왜냐하면 우선, 그렇게 할 시간이 없기 때문입니다. 둘째, 컴파일되지 않았기 때문에 쉽게 부실할 수 있습니다. –
음, 일주일 전 내 게시물에서 완벽한 예제를 보았습니다. Viktor : 액터를 사용하는 문서의 모든 예제는 단지 여러 가지 요소를 병렬로 처리 한 다음 리스너에게 콘솔에 메시지를 내 보내고 끝내다. 완전히 쓸모 없어. 유용한 정보는 다음과 같습니다. 액터에게 메시지를 보내는 방법을 보여주고, 다른 액터에게 작업을 보냈는지 확인한 다음 결과를 REST 서비스로 반환하여 다시 보낼 수 있도록합니다. 추가 도움이 필요하면 스프레이 문서를보십시오. 첫 페이지에는 정확히 어떻게 수행되었는지가 나와 있습니다. 다른 한편으로는 ... – Rob