我正在尝试从doc理解改编响应的目的。
我看不出它的目的,有人可以提供一个非常简单的例子吗?
答案 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
,因为它是您行为的一部分。