У меня есть аккорская система, использующая scala. Теперь мне нужно настроить несколько устройств параллельно, поэтому у меня есть оператор Manager
, который управляет всеми этими задачами конфигурации. Чтобы на самом деле сконфигурировать их, он будет создавать актера Worker
для каждой конфигурации, чтобы они запускались параллельно или параллельно. Теперь актеру Worker
действительно не нужно получать сообщения от менеджера во время конфигурации, которые ему только нужно сделать, а затем сообщить, что он вернулся к Manager
.Актер хорошая практика?
Теперь вопрос я передать инструкции и ActorRef
в Manager
в конструкторе Worker
или я его создать, а затем отправить ему сообщение, как Do(action: => Unit)
и будет отвечать на sender
после завершения? Есть ли соглашение, как это сделать или считается хорошей практикой?
EDIT: Как Владимир Матвеев напомнил мне ссылку на Manager
не является проблемой, как это уже известно по иерархии в context.parent
. Это оставляет только вопрос о том, как передать работу Worker
.
Если диспетчер '' управляет рабочими напрямую, вам не нужно передавать им ссылку 'Manager'. Работники могут использовать 'context.parent' для доступа к' Manager'' ActorRef'. –
@ Владымир Матвеев. О да, это правда. Но что делать с работой? Также 'context.parent' все еще' Manager', если я появляюсь в будущем с помощью 'context.scheduler.schedule ...'? Я думаю, это должно быть потому, что это закрытие, но я не уверен в этом. – mgttlinger
Если вы используете «контекст» внутри актера для создания дочерних актеров, у них будет этот актер в качестве родителя, независимо от того, где вы используете «контекст» внутри этого актера. Это довольно логично, потому что, как вы сказали, переменная 'context' просто закрыта, но она по-прежнему остается одним и тем же« контекстом ». –