我对Akka相当陌生,并浏览了Akka文档的这个请求-响应示例。
我理解这种模式的工作原理如下:
- X1 M0 N1 X通过发送X1 M2 N1 X的协议的消息来询问X1 M1 N1 X。
- X1 M3 N1 X通过向X1 M4 N1 X发送其自己协议的消息来应答。
1.不知道X1 M6 N1 X的协议的X1 M5 N1 X获得适配的响应并将其重新发送给它自己。 - X1 M7 N1 X接收适配的响应并继续其有效载荷。
context.ask(dave, Dave.Request) {
case Failure(exception) => throw exception
case Success(response) => AdaptedResponse(response.payload)
}
但是,如果Dave
当场直接需要response.payload
,会发生什么呢?这可能吗?
1条答案
按热度按时间zzlelutf1#
在Akka Typed中,使用
context.ask
是不可能的,尽管我会问为什么你特别需要它。或者,当您有两个进行交互的执行元时,您可以在它们之间定义一个联合协议:
那么
Dave
就可以并直接从
Hal
获得响应(您可以为自己安排一条消息来解决超时问题)。请注意,这实际上是将两个参与者纠缠在一起。它适用于父参与者将一个长期运行的任务交给子参与者的情况,但在大多数/所有其他场景中,这是一个非常值得怀疑的方法。