我在路由器后面有一个 DB Worker 演员池,通过 Dao 阻止 DB 操作。如果您尝试将相同的 foo 插入两次,则将(“放置”) foo 对象插入 Dao 会引发 DuplicateKeyException。在这种情况下,我想回复 DuplicateFoo(foo) 消息;成功后,我想用 FooAdded(foo) 来回应。这就是我的做法;有没有更好的办法?
def receive = {
case PutFoo(foo) =>
try {
dao.put(foo)
sender ! FooAdded(foo)
} catch {
case DuplicateKeyException(_) =>
sender ! DuplicateFoo(foo)
}
}
抛出 DuplicateKeyException 后,Dao 可以继续处理请求,所以我觉得没有必要重新启动 worker。