Я ищу пример использования шаблона Akka Patterns.askWithReplyTo
с использованием Java.
Образец проекта доступен на Github: https://github.com/pcdhan/akka-patterns.git
Моя задача заключается в том, что я не могувключить ActorRef отправителя в полезную нагрузку.
Локальный субъект
ActorRef localA= system.actorOf(LocalActor.props(), "localA");
Удаленный субъект
Timeout timeout = new Timeout(10000, TimeUnit.MILLISECONDS);
ActorSelection actorSelection=system.actorSelection("akka.tcp://ClusterSystem@localhost:2551/user/ActorA");
Future<Object> future = Patterns.ask(actorSelection, new Identify(""), timeout);
ActorIdentity reply = (ActorIdentity) Await.result(future, timeout.duration());
ActorRef actorRef = reply.ref().get(); //my remote actor ref
Отправить полезную нагрузку на удаленный субъект вместе с ActorRef (localA)
Payload payload = new Payload(); //How do I pass localA here
payload.setMsg("0");
Future<Object> askWithSenderRef =
Patterns.askWithReplyTo(actorRef,payload,20000L);
Payload responsePayload = (Payload) Await.result(askWithSenderRef,
timeout.duration());
System.out.println("Response from Remote Actor Payload: "+responsePayload.getMsg());
Полезная нагрузка
public class Payload implements Function<ActorRef, Object>, Serializable {
private static final long serialVersionUID = 1L;
String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
@Override
public Object apply(ActorRef param) throws Exception {
return this;
}
}
Удаленные журналы Actor
...Actor[akka.tcp://ClusterSystem@localhost:53324/temp/$d]
...Actor[akka.tcp://ClusterSystem@localhost:53324/temp/$e]
Я ожидаю ... / user / localA, но яget / temp / $ d