1
扔在Auction Example我已經看到了這兩個ctx.commandFailed(...)
和throw SomeException(...)
。是否有充分的理由拋棄而不是使用API,並且兩者之間存在差異?ctx.commandFailed VS在PersistentEntity
扔在Auction Example我已經看到了這兩個ctx.commandFailed(...)
和throw SomeException(...)
。是否有充分的理由拋棄而不是使用API,並且兩者之間存在差異?ctx.commandFailed VS在PersistentEntity
持久實體命令處理程序和持久回調之後被包裝在try/catch
塊中,如果發現異常,它會爲您傳遞該異常給ctx.commandFailed(...)
。
還有就是兩者之間的細微差別需要注意的。如果拋出異常,命令的處理當然會立即停止。然而,如果你傳遞一個例外ctx.commandFailed(...)
,將異常發送回命令的調用,但它不會停止處理。你理論上可以繼續返回一些指令來堅持事件 - 這是一件很奇怪的事情。在實踐中你需要做的是調用ctx.commandFailed(...)
後返回ctx.done
。
一般來說它可能是簡單和更安全簡單地拋出異常。
我以爲我明白這兩個選項是相對平等的,但我看到的是拋出異常導致從OneToOneStrategy(表面上由於演員重新啓動)的日誌記錄。我沒有看到ctx.commandFailed(拋出)相同的日誌,因此它似乎有重大差異。我真的不希望我的實體記錄每個命令失敗,所以我選擇了後者。但我想知道是否還有其他差異。 – dres