1

我的 Akka FSM 演员需要根据类型确定消息的优先级。具体来说,参与者按照优先顺序接收这些类别之一的消息:

  1. 触发状态转换的消息
  2. 查询当前状态的消息
  3. 导致参与者执行某些工作的消息(“WorkMsg”)

根据 Akka 文档,可以根据上面的列表使用包含 PriorityGenerator 的 PriorityExecutorBasedEventDrivenDispatcher 对消息进行优先级排序。我已经用这个调度程序实现了 FSM 演员,它运行良好。

问题是这个调度程序还重新排序了WorkMsgs,这不是我想要的。

WorkMsgs 包含一个时间戳,并被发送到按此时间戳排序的 FSM 参与者。当 FSM 参与者处理 WorkMsgs 时,它会丢弃比之前的 WorkMsg 更旧的 WorkMsgs。所以如果这些被重新排序,我会丢失数据。

如果没有 PriorityExecutorBasedEventDrivenDispatcher,WorkMsgs 不会重新排序,但是上面列表中的优先级不满足。

如何保持上面列表中的优先级,同时防止相同优先级的消息重新排序?

4

1 回答 1

2

优先代理actor可以优先发送消息给你的workeractor。您将必须对传入的消息进行排序和存储以及实现优先级逻辑。工作人员还必须在每条消息后响应代理,以使其知道它已准备好进行更多工作。

于 2011-12-02T11:03:04.197 回答