gpt4 book ai didi

java - 如何在 Akka Java 中使用 Patterns.askWithReplyTo

转载 作者:行者123 更新时间:2023-11-30 05:56:51 24 4
gpt4 key购买 nike

我正在寻找如何使用 Java 使用 Akka 模式 Patterns.askWithReplyTo 的示例。

Github 上提供了示例项目:https://github.com/pcdhan/akka-patterns.git

我的挑战是我无法将发送者的 ActorRef 包含在有效负载中。

本地 Actor

ActorRef localA= system.actorOf(LocalActor.props(), "localA");

远程 Actor

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) 一起发送到 Remote Actor

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[akka.tcp://ClusterSystem@localhost:53324/temp/$d]
...Actor[akka.tcp://ClusterSystem@localhost:53324/temp/$e]

我期望.../user/localA,但我得到/temp/$d

最佳答案

askWithReplyTo 并不意味着将发送参与者 self 传递到消息中。

askWithReplyTo 希望您给它一个工厂函数,该函数将被提供给临时响应参与者,因此如果您有一条消息,您可以像这样构造:

new MyMessage(ActorRefreplyTo)

您可以将其与 askWithReplyTo 一起使用,如下所示:

final Future<Object> f = Patterns.askWithReplyTo(
otherActor,
replyTo -> new MyMessage(replyTo),
timeout);

第二个参数是一个 lambda,它将与临时的 Ask-actor 一起调用(当您确实要求处理响应超时时,它总是被创建),以便您可以将其包含在消息中。

该模式仅在接收方使用 replyTo 字段进行响应而不是 sender() 时有用,而这正是您通常所做的响应。

关于java - 如何在 Akka Java 中使用 Patterns.askWithReplyTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53023682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com