2017-02-06 51 views

回答

1

持久實體命令處理程序和持久回調之後被包裝在try/catch塊中,如果發現異常,它會爲您傳遞該異常給ctx.commandFailed(...)

還有就是兩者之間的細微差別需要注意的。如果拋出異常,命令的處理當然會立即停止。然而,如果你傳遞一個例外ctx.commandFailed(...),將異常發送回命令的調用,但它不會停止處理。你理論上可以繼續返回一些指令來堅持事件 - 這是一件很奇怪的事情。在實踐中你需要做的是調用ctx.commandFailed(...)後返回ctx.done

一般來說它可能是簡單和更安全簡單地拋出異常。

+0

我以爲我明白這兩個選項是相對平等的,但我看到的是拋出異常導致從OneToOneStrategy(表面上由於演員重新啓動)的日誌記錄。我沒有看到ctx.commandFailed(拋出)相同的日誌,因此它似乎有重大差異。我真的不希望我的實體記錄每個命令失敗,所以我選擇了後者。但我想知道是否還有其他差異。 – dres