[英]Serialization of Try/Success/Failure in Scala Akka
我ask
一個會用 Try 回復的演員:
val reply = actor.ask[Try[MyReply]](MyCommand)
但是,當回復來自集群中另一個節點上的參與者時,我在日志中收到以下錯誤:
Failed to serialize message [scala.util.Success].
有趣的是,如果我使用Option
而不是Try
事情似乎工作正常。 我想使用Try
來更好地控制錯誤。 有沒有辦法通過Try
實現這一目標?
我認為這是 akka 的開發人員故意這樣做的,以避免使用Try
作為傳輸類型。
Try
旨在處理所有非致命異常。 這將要求您序列化異常,以便它們通過網絡傳輸並在其他節點上處理。 Imo,必須在本地處理異常。
如果您希望轉移您的業務錯誤,我建議使用Either[MyError, MyReply]
,其中MyError
可以是您自己的case class
定義特定的業務錯誤。
編輯:
正如@artur 建議的那樣,您還可以使用akka.pattern.StatusReply來通知錯誤消息。
case class Command(replyTo: ActorRef[StatusReply[MyReply]])
val actorRef: ActorRef[Command] = ???
actorRef.askWithStatus(Command).onComplete {
case Success(response) =>
case Failure(StatusReply.ErrorMessage(text)) => ???
case Failure(_) => ???
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.