私はいくつかのakkaアクターを使用してシステムを監視しており、それぞれが異なるコンポーネントを担当しています。
一部のアクター操作は、並行して実行しないでください。そこで、ロックを保持するアクター(LockActor)を作成しました。アクターがそのような操作を実行したい場合、彼はLockActorに承認を求める必要があり、承認を得るまで操作を実行できません。
コードを単純にしたい場合は、要求されたアクターで次のようなことを行う必要があります。
while (LockActor.isLockHold()) {
// perform the operation
}
これはもちろん、アクターシステムの設計全体を壊します...
したがって、コードを少し複雑にするメッセージを使用する必要があります。
- アクターBはLockRequestMessageをLockActorに送信する必要があります
- LockActorは、ロック要求を保持するキューを保持しています
- ロックが可能な場合、LockActorはLockApprovalMessageをキューの最初のアクターに送信します
- アクターBがLockApprovalMessageを(必ずしもすぐにではなく)受信すると、LockRequestMessageを送信したときに必要だった特定の操作を実行する必要があります(各アクターは、ロックを必要とする複数の操作を持つことができます)
だから私の質問は-アクターシステムの設計を壊さずにそのようなことを実装するが、それでもコードを可能な限り単純に保つ最良の方法は何ですか?