Dao を介して、DB 操作をブロックするルーターの背後に DB ワーカー アクターのプールがあります。foo オブジェクトを Dao に挿入 ("putting") すると、同じ foo を 2 回挿入しようとすると、DuplicateKeyException がスローされます。その場合、 DuplicateFoo(foo) メッセージで応答したいと思います。成功したら、FooAdded(foo) で応答したいと思います。これが私が行った方法です。より良い方法はありますか?
def receive = {
case PutFoo(foo) =>
try {
dao.put(foo)
sender ! FooAdded(foo)
} catch {
case DuplicateKeyException(_) =>
sender ! DuplicateFoo(foo)
}
}
Dao は DuplicateKeyException をスローした後もリクエストを処理し続けても問題ないので、ワーカーを再起動する必要はあまりないと思います。