适应对策的目的是什么?

时间:2019-07-02 15:26:06

标签: scala akka akka-typed

我正在尝试从doc理解改编响应的目的。

我看不出它的目的,有人可以提供一个非常简单的例子吗?

1 个答案:

答案 0 :(得分:1)

通常用于其他演员在不了解您的情况下回复您。每当您有可以由其他参与者查询的服务参与者时,就会发生这种情况。

假设您将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,因为它是您行为的一部分。