我的 Akka FSM 演员需要根据类型确定消息的优先级。具体来说,参与者按照优先顺序接收这些类别之一的消息:
- 触发状态转换的消息
- 查询当前状态的消息
- 导致参与者执行某些工作的消息(“WorkMsg”)
根据 Akka 文档,可以根据上面的列表使用包含 PriorityGenerator 的 PriorityExecutorBasedEventDrivenDispatcher 对消息进行优先级排序。我已经用这个调度程序实现了 FSM 演员,它运行良好。
问题是这个调度程序还重新排序了WorkMsgs,这不是我想要的。
WorkMsgs 包含一个时间戳,并被发送到按此时间戳排序的 FSM 参与者。当 FSM 参与者处理 WorkMsgs 时,它会丢弃比之前的 WorkMsg 更旧的 WorkMsgs。所以如果这些被重新排序,我会丢失数据。
如果没有 PriorityExecutorBasedEventDrivenDispatcher,WorkMsgs 不会重新排序,但是上面列表中的优先级不满足。
如何保持上面列表中的优先级,同时防止相同优先级的消息重新排序?