2013-08-30 3 views
0

Я создаю иерархию актеров, в которой некоторые участники отвечают на сообщения, которые они получают непосредственно известному актеру (фиксированное имя). То есть эти актеры (удаленные в иерархии) получают actorRef через context.actorFor("akka://...").Адреса и тесты актера

I.e. например, у меня есть "Orchestrating" актер:

system.actorOf (Подпорки [OrchestratingActor], имя = "оркестратор")

, который затем иметь адрес вида akka://application/user/orchestrator

и где-нибудь другой, случайные рабочий, который получил сообщение и хочет поговорить с оркестраторами:

class RandomWorker extends Actor { 
    def theOrchestrator = context.actorFor("akka://application/user/orchestrator") 
    def receive = { 
    case Foo => 
     theOrchestrator ! "Bar" 
    } 
} 

Теперь я хотел бы проверить эти актеры и мне интересно, о том, как обращаться с этими адресами: когда блок-тестирования актер (например, используя TestAc torRef), как я могу проверить, что отправляется на удаленный адрес? Одна из идей заключалась бы в том, чтобы (когда это возможно) предоставить адрес известному актеру через конструктор и передать в адрес TestActor, чтобы узнать, что получилось. Однако я задаюсь вопросом, нет ли способа «олицетворять» данный адрес в тесте, особенно. в ситуации, когда адреса не просты.

Другими словами, я хотел бы, чтобы проверить поведение актера (он будет действительно послал "Bar" к оркестратор при получении Foo

+0

Извините, но я вообще не понимаю вопроса. Можете ли вы составить список того, что у вас есть и чего хотите? – Jatin

+0

Действительно, это было немного пушистым, я надеюсь, что теперь это яснее –

ответ

2

Моя рекомендация заключалась бы в том, чтобы избежать использования l ook-ups актеров для той цели, которую вы показываете. Это скорее инструмент для этапа настройки вашего приложения, когда он соединяет все вместе. Но даже тогда большинство исполнителей актеров будут знать зависимости своих детей, не используя взгляды.

В рамках локальной системы актеров все ActorRefs можно вводить сверху вниз (используя аргументы конструктора или вводные сообщения). Взгляды наиболее полезны при введении удаленных систем друг с другом.

1

Там нет ничего плохого с инъекционным адреса с помощью конструктора. Пусть это я знаю, если вам нужны какие-то детали, потому что на данный момент я не знаю, как сделать это более ясным, так как вы в основном ответили на свой вопрос. И кстати, я не знаю, какую версию Akka вы используете, но actorFor был недавно рекомендован в пользу ActorSelection, и для этого есть веские причины.

Смежные вопросы