Каждый учебник Akka и его бабушка с гордостью демонстрируют фрагменты кода, как показано ниже, демонстрируя, как выполнять асинхронный, неблокирующий ask
через Akka Futures:Реализация шаблона Ask на стороне получателя на земле Akka-Java
// Groovy pseudo code
class Fizz extends UntypedActor {
ActorRef buzz
Fizz(ActorRef buzz) {
super()
this.buzz = buzz
}
@Override
void onReceive(Object message) {
if(message instanceof DoSomething) {
DoSomething ds = message as DoSomething
Foo foo = doSomething(ds)
Future<BuzzResult> buzzFut = buzz.ask(new ProcessResult(foo))
buzzFut.onSuccess(new BuzzResultHandler(), system.dispatcher)
}
}
Foo doSomething(DoSomething ds) { … }
}
Но нигде я могу на самом деле найти фрагмент кода, который показывает, как обслуживания этого ask
на других (получатель) сторонах. Итак, Fizz
имеет ask
ed Buzz
с сообщением ProcessResult
, и создал обработчик onSuccess
, чтобы получить результат один раз Buzz
отправил его обратно. Но как Buzz
действительно отправить его обратно?!?
Buzz
является актером, и поэтому он делает все свои сообщения через onReceive
:
class Buzz extends UntypedActor {
@Override
void onReceive(Object message) {
if(message instanceof ProcessResult) {
ProcessResult pr = message as ProcessResult
BuzzResult br = BuzzResultFactory.createBuzzResult(pr)
// Oh snap, I can’t send ‘br’ back to the Fizz’s BuzzResultHandler
// because I return void…
}
}
}
Если onReceive
возвращает void
, как он может когда-нибудь, возможно, возвращающие результат, когда ask
изд-то по Fizz
(или другой актер)?!?
Конечно, я приветствую и я чрезвычайно признательна любые ответы, даже в Scala, но будет просить какие-либо фрагменты кода, чтобы быть в Java, так как Scala выглядит иероглифами для меня.
Почему нисходящее объяснение отсутствует? В некоторых местах это называется хитом. Этот вопрос уникален, отвечает, показывает исследования и является [SSCCE] (http://sscce.org). Отправляй меня, дьявол! – smeeb
Для тех из вас, кто хотел бы ударить и запустить: перед тем, как вы это сделаете, пожалуйста, проявите смелость принять эту решимость: пожалуйста, найдите точное место в документации Akka, в которой объясняется, как запросы 'ask' обратно на' отправителя' автоматически отображается в «Будущее», указанном в запрашивающем (вызывающем) актере? ** Это не объясняется нигде в документации. ** Поэтому, пожалуйста, подумайте дважды, прежде чем загружать это. Если вы спросите меня, этот вопрос следует добавить к документам Akka, а не избегать и ниспровергать. – smeeb
И, если человек, который держит это в порядке, это Бакстер, то, по крайней мере, хватит смелости говорить. Кора дважды, если вы в Милуоки. – smeeb