Можно ли указать тип сообщения, которое может принять актер, и дать ошибку компиляции, если что-то пытается отправить его другому типу?
Тип сейфа Scala актеры
Ответ 1
Не уверен, отвечает ли он на ваш вопрос, но я надеюсь, что это даст вам некоторые идеи. Возможно, вы ищете что-то вроде Типированные актеры из Akka проект:
Типизированные актеры реализованы через Типированные актеры. Он использует AOP через AspectWerkz, чтобы превращать обычные POJO в асинхронные неблокирующие актеры с семантикой модели Actor. Например. каждая отправка сообщения преобразуется в сообщение, которое помещается в очередь, которая будет обрабатываться Типированным Актером последовательно один за другим.
Итак, вы определяете интерфейс и реализацию, а затем регистрируете их как актера. Akka создаст прокси для вашего интерфейса, который все еще использует модель актера под капотом. И вы все еще можете использовать следующие стили передачи сообщений:
- огонь и забыть
- запрос-ответ
- request-reply-with-future
Ответ 2
Я думаю, что ответ находится в сообщении, на который ссылается @mkneissl: "Обычная практика заключается в том, чтобы объявить, какие сообщения, которые Актер может получить в сопутствующем объекте Актера, что делает его намного легче узнать, что он может получить".
Пример этого будет полезен...
Ответ 3
В то время как типизированные актеры в какой-то мере решают проблему, вы должны иметь в виду, что это обеспечивает только частичную защиту от статического типа - вы все еще молча выполняете динамический оттиск от нетипизированного актера до введенного в него символом typedActorOf(...)
вызов, а также то, что динамическая динамичность и статическая корректность теряются - если базовый реф, оказывается, указывает на актера, который фактически не подчиняется типизированному интерфейсу, у вас есть ошибка; Akka не пытается проверять время исполнения, кто "поддерживает" введенный код, поэтому введенные сообщения заканчиваются отправкой актерам, которые не могут (правильно) ответить на них.
В целом, насколько мне известно, единственный способ достичь полной (?) безопасности статического типа с помощью Akka - использовать типизированные каналы: http://letitcrash.com/post/45188487245/the-second-step-akka-typed-channels.