PriorityExecutorBasedEventDrivenDispatcherを使用してメッセージの並べ替えを防ぐ方法は?
-
27-10-2019 - |
質問
私のAkkaFSMアクターは、タイプに応じてメッセージに優先順位を付ける必要があります。具体的には、アクターは次のいずれかのカテゴリのメッセージを優先順に受信します。
- 状態遷移をトリガーするメッセージ
- 現在の状態を照会するメッセージ
- アクターに何らかの作業を実行させるメッセージ(「WorkMsg」)
Akkaのドキュメントによると、PriorityGeneratorを含むPriorityExecutorBasedEventDrivenDispatcherを使用して、上記のリストに従ってメッセージに優先順位を付けることができます。このディスパッチャーでFSMアクターを実装しましたが、うまく機能します。
問題は、このディスパッチャがWorkMsgsも並べ替えることです。これは、私が望んでいることではありません。
WorkMsgsにはタイムスタンプが含まれており、このタイムスタンプでソートされたFSMアクターに送信されます。 FSMアクターがWorkMsgsを処理するとき、以前のWorkMsgより古いWorkMsgsを破棄します。したがって、これらを並べ替えると、データが失われます。
PriorityExecutorBasedEventDrivenDispatcherがないと、WorkMsgsは並べ替えられませんが、上記のリストの優先度は満たされません。
同じ優先度のメッセージの並べ替えを防ぎながら、上記のリストの優先度を維持するにはどうすればよいですか?
解決
優先プロキシアクターは、ワーカーアクターに送信されるメッセージに優先順位を付けることができます。着信メッセージを並べ替えて保存し、優先順位付けロジックを実装する必要があります。ワーカーはさらに、各メッセージの後にプロキシに応答して、さらに作業する準備ができていることを通知する必要があります。
所属していません StackOverflow