Надеюсь, это нормально спросить об этом. Я использую акку и имею двух актеров, где один инициируется/создается быстро, а другой намного медленнее. Быстро созданный спрашивает другого о чем-то (ask-pattern), и сообщение отправляется мертвым буквам, так как другое еще не инициировано. Каков предпочтительный способ заставить актера ждать отправки его сообщения? Я не очень хочу сделать актера сном или чем-то, не зная, что другого пути нет.Как избежать отправки сообщений актерам, которые еще не созданы?
0
A
ответ
1
Я бы использовал функциональность become()/unbecome()
Акка для Актеров. Я предполагаю в следующем коде, что slowActor
создается fastActor
. Фокус здесь в том, что fastActor
будет иметь два типа поведения: один, когда начинается slowActor
, а другой - когда он готов выполнить какую-то работу. Когда slowActor
будет готов, он отправит сообщение fastActor
на рекламу, способную принимать сообщения. fastActor
будет watch
ing slowActor
, и если он будет разорван, он снова изменит свое поведение. Что делать дальше, это зависит от вашего решения.
Вот макет код в качестве руководства (я не компилируется код и он может содержать некоторые ошибки):
case object Ready
case object DoWork
case object WorkDone
class FastActor extends Actor with ActorLogging {
val slowActor = context.actorOf(SlowActor.props)
context.watch(slowActor)
def receive = slowActorNotReadyBehavior
def slowActorNotReadyBehavior = {
case DoWork => log.warning("Slow actor in not ready, I am sorry...")
case Ready => context.become(slowActorReadyBehavior)
}
def slowActorReadyBehavior = {
case DoWork => (slowActor ? DoWork).pipeTo(self)
case Terminated(ref) =>
log.error("Slow actor terminated")
context.unbecome()
//... do something with slowActor
}
}
class SlowActor extends Actor {
override def preStart = {
context.parent ! Ready
}
def receive = {
case DoWork =>
//do something
sender ! WorkDone
}
}
Смежные вопросы
- 1. Как указать объекты, которые еще не созданы.
- 2. Crystal Reports с использованием наборов данных, которые еще не созданы
- 3. jQuery - привязка к элементам, которые еще не созданы
- 4. jquery validate on элементы, которые еще не созданы
- 5. Новичок для Javascript: как избежать отправки данных, которые не изменились?
- 6. Как избежать печати/отображения сообщений
- 7. Как избежать отправки в середине отправки
- 8. Как избежать наводнения очереди сообщений?
- 9. Что происходит с сообщениями, отправленными Актерам, которые развертываются?
- 10. Как перенести пакет с ресурсами, которые еще не созданы на моем сервере fhir?
- 11. Создание прослушивателей событий для отдельных DIVS, которые еще не были созданы, и как запускать отдельную команду?
- 12. Cross отправки сообщений не работает
- 13. Как сравнить строки, которые были созданы подстрокой?
- 14. jQuery выбор элементов, которые еще не существуют
- 15. Как бы вы объяснили актерам не программисту?
- 16. Rails показывает строку из модели, которые не созданы
- 17. Ethernet Multicast без отправки сообщений судовых сообщений
- 18. Как реализовать систему отправки сообщений?
- 19. Rails structure.sql недействителен (таблицы ссылок внешних ключей еще не созданы)
- 20. Метеор: найти объекты, которые созданы сегодня
- 21. Как избежать отбрасывания сообщений zeromq pub sub
- 22. Как удалить администраторов-арендаторов, которые не были созданы должным образом?
- 23. Использование .one() для некоторых элементов, которые еще не созданы (например. .live())
- 24. Предельная логика отправки сообщений
- 25. Объекты доступа, которые не были созданы с помощью Blend
- 26. Фрагментные представления в TabLayout еще не созданы в действии create
- 27. JavaMail и IMAP. Как избежать сообщений подтверждения?
- 28. События на элементах DOM еще не созданы, в Javascript?
- 29. ParseCrashReport отправки сообщений вопрос
- 30. wp_mail отправки нескольких сообщений
спасибо. Это может быть интересно, но медленный актер сейчас является братом быстрого актера. – stian