Это вопрос дизайна;
Скажем, у меня есть дерево актеров, которые выполняют кучу обработки. Обработка запускается клиентом/партнером по подключению (т.е. Дерево является сервером). В конце концов, клиент-клиент хочет получить ответ. То есть У меня есть актерская система, которая выглядит так.
ActorA <---reqData--- Client_Actor
| msgA /|\
\|/ |
ActorB |
msgB | \ msgD |
\|/ \/ |
ActorC ActorD---------msgY-->|
|_____________msgX_________|
Ответ, который хочет клиентская система, - это выход из актеров листа (т.е. ActorC
и/или ActorD
). Эти актеры в дереве могут взаимодействовать с внешними системами. Это дерево может быть набором заранее определенных, возможно, маршрутизируемых актеров (т.е. Поэтому Client_actor
имеет только actorref для корня дерева актеров, ActorA
).
Вопрос заключается в том, что является лучшим шаблоном для управления отправкой ответа (msgX
&/или msgY
) от участников финала/листа обратно к клиенту-актеру?
Я могу вспомнить следующие варианты:
- Создайте дерево для каждого клиента подключения и попросите участников отслеживать отправителя, когда они получат
msgX
илиmsgY
, отправьте его обратно исходному отправителю, чтобы сообщения передавались обратно через дерево. I. Каждый актер будет держать ссылку исходного отправителя. - Каким-то образом отправьте сообщение
Client_actor
ref в сообщенииreqData
и скопируйте его для всех сообщений, используемых в дереве, чтобы субъекты листа могли напрямую ответить наClient_actor
... Это похоже на самый эффективный вариант. Не уверен, как это сделать (я как-то думаю о чертах в классах сообщений, в которых присутствует клиентский агент ref)... - Как-то найти клиент-клиент на основе уникального идентификатора в сообщениях, переданных через дерево или использовать actorselection (не уверен, насколько хорошо это будет работать с удалением)...
- Что-то лучше...
FYI Я использую Akka 2.2.1.
Ура!