PriorityExecutorBasedEventDrivenDispatcherを使用してメッセージの並べ替えを防ぐ方法は?

StackOverflow https://stackoverflow.com/questions/8354958

質問

私のAkkaFSMアクターは、タイプに応じてメッセージに優先順位を付ける必要があります。具体的には、アクターは次のいずれかのカテゴリのメッセージを優先順に受信します。

  1. 状態遷移をトリガーするメッセージ
  2. 現在の状態を照会するメッセージ
  3. アクターに何らかの作業を実行させるメッセージ(「WorkMsg」)

    Akkaのドキュメントによると、PriorityGeneratorを含むPriorityExecutorBasedEventDrivenDispatcherを使用して、上記のリストに従ってメッセージに優先順位を付けることができます。このディスパッチャーでFSMアクターを実装しましたが、うまく機能します。

    問題は、このディスパッチャがWorkMsgsも並べ替えることです。これは、私が望んでいることではありません。

    WorkMsgsにはタイムスタンプが含まれており、このタイムスタンプでソートされたFSMアクターに送信されます。 FSMアクターがWorkMsgsを処理するとき、以前のWorkMsgより古いWorkMsgsを破棄します。したがって、これらを並べ替えると、データが失われます。

    PriorityExecutorBasedEventDrivenDispatcherがないと、WorkMsgsは並べ替えられませんが、上記のリストの優先度は満たされません。

    同じ優先度のメッセージの並べ替えを防ぎながら、上記のリストの優先度を維持するにはどうすればよいですか?

役に立ちましたか?

解決

優先プロキシアクターは、ワーカーアクターに送信されるメッセージに優先順位を付けることができます。着信メッセージを並べ替えて保存し、優先順位付けロジックを実装する必要があります。ワーカーはさらに、各メッセージの後にプロキシに応答して、さらに作業する準備ができていることを通知する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top