scala - 在 Akka 中,我可以欺骗来自不同参与者的消息吗?

标签 scala akka

我正在使用 Akka 来控制对正在运行的系统进程的访问。

我有一个 CommandActor 来处理来自系统中任何 Actor 的传入命令请求(我们将其称为 RequestActor),并且对于每个新请求,CommandActor 都会生成一个单独的 CmdChildWorker Actor 来处理该特定请求。 CommandActor 还限制了 CmdChildWorkers 的数量,并为每个请求分配了唯一的 id,因此它比简单的路由器更复杂。

当命令完成时,并且在系统进程的执行期间周期性地,CmdChildWorker Actor 将周期性更新发送回原始 RequestActor(例如到目前为止的进程输出)。

然而,为了保持简洁的设计,我希望能够将 CmdChildWorker 完全隐藏在原始 RequestActor 之外,它的唯一接口(interface)是单个 CommandActor。

显然,我可以通过 CommandActor 从 CmdChildWorker 发回任何回复消息,但我想知道是否可以直接从 CmdChildWorker 回复 RequestActor 而无需通过 CommandActor 路由消息,但仍然假装消息已从 CommandActor 发回。

IE。我想将 CmdChildWorker Actor 的发件人地址伪装成其父 Actor 的地址。这可能吗?也许更重要的是,这是明智的,还是好的 Actor 设计?

谢谢

最佳答案

tell Actor 的方法。当 CommandActor 转发其消息时,调用:
childActor.tell(msg, sender)
并且 childActor 将其发送者作为原始发送者。

关于scala - 在 Akka 中,我可以欺骗来自不同参与者的消息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13240861/

相关文章:

java - 如何将 Scala 数据集传递给 Apache Flink 中的 Java 类

scala - 包对象什么时候初始化?

scala - 在 Scala 中使用 java Map

scala - Akka 中 async io 的延迟回复

scala - akka grpc自定义认证

java - Apache Flink + CEP - 检测相同事件

Scala 编译器和 JVM 对加载的 Akka 版本不一致

akka - 构造函数与preStart : when to use which?

scala - 将订户建模为 Akka Actor 的正确方法

java - 获取现有或创建新的 akka actor