발신자 발신자 액터에 액세스해야합니다. Patterns.ask() 전화가 걸립니다. 예 : getSender().tell(...)
: 보낸 사람에게 Patterns.ask()로 외부 액세스
ActorSystem system = ActorSystem.create("MySystem");
ActorRef actor = system.create(..., "MyActor");
Future<Object> futureResult = Patterns.ask(actor, new Question(), 10000);
다음은 Akka 프레임 워크는
하여 응답 할 것이다 "MyActor" 배우에게 메시지를 보내드립니다.
보낸 사람은 Akka 프레임 워크에서 만든 액터가됩니다. 경로는 다음과 같습니다 (akka://MySystem/temp/$a
). 어떻게받을 수 있습니까? ActorRef이이 배우는?
나는 위의 경로를 가지고 있지만 system.actorSelection
을 호출 한 다음 resolveOne
을 사용하면이 액터가 존재하지 않는다고 오류가 발생합니다 (참고 :이 발신자는 답변을받은 직후에 죽을 것입니다. 내가 만든 테스트는 심지어 getSender().tell()
메서드가 호출되기 전입니다.)
내 프로젝트의 Akka 버전을 2.5.4으로 업데이트하면이 문제가 발생했습니다. 그 전에는 임시 직원/발신자 액터에 액세스하는 데 문제가 없었습니다.
나는 Patterns.ask(ActorRef actor, Function<ActorRef,java.lang.Object> messageFactory, Timeout timeout)
에 대해 읽었지만 그 배경에 대해 생각하고 있기 때문에 활용하지 못했습니다 (예제도 찾을 수 없음). 위의 방법이 다소 해결책이라면 예제 사용을 제공 할 수 있습니까?
내 문 중 하나가 위의 경우하지 완전히 사실 그름 - 당신의 수정을하시기 바랍니다! :)
감사합니다.
>이 액터의 ActorRef를 어떻게 얻을 수 있습니까? 그 점은 무엇입니까? 응답 메시지는 임시 액터에 의해 무시됩니다. –
비즈니스 로직에 필요하기 때문에 ** 시스템에서 배우 생성 **을 제공하는 API를 작성하고 있습니다. 어떤 시점에서 (실제'Patterns.ask()'가 호출 될 때)이 임시 액터에 대해 my API가 ** 요청 ** 될 것입니다. 이는 클라이언트가 액터의 동작을 결정하기 때문입니다. 그렇게하기 위해 내 클라이언트는 ** selfActor **, ** senderActor ** 및 ** message **와 같은 세 가지를 기대하는 ** 기능 **을 구현합니다. –
나는 또한 당신이 성취하려는 것을 얻지 못합니다. "배우의 행동이 무엇인지 판단"하는 것은 무엇을 의미합니까? a) 배우가 무엇을하고 있는지 알아 내거나, b) 배우의 행동을 설정하십시오. A)는 쉽다 : 하나의 메시지의 내용을 약속의 가치로 설정하고, b) ask()을 사용하지 않고 자신의 배우를 생성하기 때문에 의미가 없다. 또한, 액터 ref를 얻고 자한다면, 어떻게 할 것인가, 어떻게 사용되어야하는지 생각해 봅시다. 나는 'MyActor'가 대답을 보내면 의미있는 것을 보지 못한다. 그런 다음 배우가 사라지고 심판이 유효하지 않게된다. –