Можно ли использовать шаблон «скажи-не-спроси» извне системы актера? - PullRequest
0 голосов
/ 01 июля 2019

У меня есть служба, которая находится за пределами системы акторов, которая делает запрос к системе акторов через запрос и ожидает ответа.

Очевидным подходом для реализации этого было бы использовать Задайте шаблон и дождитесь ответа, пока не истечет время ожидания, примерно так:

val futureArticle = articleParseActor ? ParseArticle("someArctile")
val parsedArticle = Await.result(futureArticle, 10 seconds)

Можно ли добиться того же с помощью команды Tell (!) Вне системы акторов?

1 Ответ

0 голосов
/ 01 июля 2019

Как видно из подписи метода.

final def tell(msg: Any, sender: ActorRef): Unit

Метод Tell возвращает единицу измерения. Это означает, что вы не можете получить Future, как вы можете в методе ask.

def ask(message: Any)(implicit timeout: Timeout, sender: ActorRef = Actor.noSender): Future[Any]

Если вы хотите получить какое-либо сообщение, используя Tell, то, вероятно, вам нужно реализовать какой-то пользовательский ReceiverActor, тогда он получит сообщение внутри системы акторов, а затем вызовет внешнюю логику акторов. Также вы можете реализовать что-то более общее и, вероятно, оно будет похоже на метод ask.

...