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