【问题标题】:What is the purpose of the Adapted Response?适应反应的目的是什么?
【发布时间】:2019-07-02 15:26:06
【问题描述】:

我正在尝试了解来自 doc 的 Adapted Response 的目的。

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

【问题讨论】:

    标签: scala akka akka-typed


    【解决方案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,因为这是您行为的一部分。

    【讨论】:

    • 能否提供一个运行示例?
    猜你喜欢
    • 1970-01-01
    • 2020-05-27
    • 2018-04-08
    • 2011-01-04
    • 2016-07-06
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多