Какова цель Адаптированного Ответа? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь понять цель Адаптированного ответа от doc .

Я не вижу цели этого, кто-то может привести очень простой пример?

1 Ответ

1 голос
/ 04 июля 2019

Обычно другой актер может ответить вам, ничего не зная о вас. Это происходит каждый раз, когда у вас есть сервисный актер, к которому могут обращаться другие актеры.

Допустим, вы поместили логику поиска 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, так как это часть вашего поведения.

...