簡體   English   中英

Scala Akka中Try/Success/Failure的序列化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM