【发布时间】:2019-07-02 15:26:06
【问题描述】:
我正在尝试了解来自 doc 的 Adapted Response 的目的。
我看不到它的目的,有人可以提供一个非常简单的例子吗?
【问题讨论】:
标签: scala akka akka-typed
我正在尝试了解来自 doc 的 Adapted Response 的目的。
我看不到它的目的,有人可以提供一个非常简单的例子吗?
【问题讨论】:
标签: scala akka akka-typed
通常用于让另一个演员能够在不了解您的情况下回复您。只要您有一个可以被其他参与者查询的服务参与者,就会发生这种情况。
假设您将您的 User 查找逻辑放在一个中心参与者中,可以通过发送包含 replyTo ActorRef 的消息进行查询,这样:
object UserBehavior {
sealed trait UserCommand
final case class GetUser(userId: Long, replyTo: ActorRef[UserResponse]
extends UserCommand
final case class UserResponse(user: User)
}
由于我们在 scala 中没有联合类型(还),所以如果不明确扩展 UserResponse 并进行所有可能的接收,您的所有参与者都无法将 UserResponse 包含在他们的行为中行为。
您使用接收User 的消息创建您的行为,如下所示:
object MyBehavior {
sealed trait Command
final case class MyUserResponse(user: User) extends Command
}
但是你如何创建一个ActorRef 接收UserResponse 但到达你家门口时看起来像MyUserResponse?
您创建一个经过调整的响应并将其用于构建您的 GetUser 查询:
userActor ! UserBehavior.GetUser(
1234,
context.messageAdapter(x => MyUserResponse(x.user)
现在您可以收到MyUserResponse,因为这是您行为的一部分。
【讨论】: