Мой актер Akka FSM нуждается в определении приоритетов сообщений в зависимости от типа.А именно, субъект получает сообщения в одной из следующих категорий в порядке приоритетов:
- Сообщения, которые инициируют переходы состояний
- Сообщения, которые запрашивают текущее состояние
- Сообщения, которые заставляют актера выполнять какую-то работу («WorkMsg»)
В соответствии с документами Akka, сообщения могут иметь приоритет в соответствии с приведенным выше списком с помощью PriorityExecutorBasedEventDrivenDispatcher, содержащего PriorityGenerator.Я реализовал FSM-актера с этим диспетчером, и он хорошо работает.
Проблема в том, что этот диспетчер также изменяет порядок WorkMsgs, а это не то, что мне нужно.
WorkMsgs содержат метку времени и отправляются субъекту FSM, отсортированному по этой метке времени.Когда субъект FSM обрабатывает WorkMsgs, он отбрасывает WorkMsgs, которые старше, чем предыдущий WorkMsg.Поэтому, если они переупорядочиваются, я теряю данные.
Без PriorityExecutorBasedEventDrivenDispatcher WorkMsgs не переупорядочиваются, но тогда приоритеты в приведенном выше списке не выполняются.
Как сохранить приоритеты всписок выше, при этом предотвращая переупорядочение сообщений с одинаковым приоритетом?