Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 根据发送的消息在Akka ask上恢复_Scala_Akka_Future_Actor_Akka Stream - Fatal编程技术网

Scala 根据发送的消息在Akka ask上恢复

Scala 根据发送的消息在Akka ask上恢复,scala,akka,future,actor,akka-stream,Scala,Akka,Future,Actor,Akka Stream,我通过ask向演员发送不同的信息。在超时时,我想提供一个默认值,它与向参与者请求的消息不同 由于超时异常总是相同的,我不能在recover中使用它来返回不同的默认值,我需要发送原始消息 如何才能做到这一点 代码示例: val-storageActorProxy=Flow[ByteString] .via(Framing.length字段(TCPMessage.sizeFieldLength、TCPMessage.sizeFieldIndex、Int.MaxValue)) .map(TCPMess

我通过
ask
向演员发送不同的信息。在超时时,我想提供一个默认值,它与向参与者请求的消息不同

由于超时异常总是相同的,我不能在
recover
中使用它来返回不同的默认值,我需要发送原始消息

如何才能做到这一点

代码示例:

val-storageActorProxy=Flow[ByteString]
.via(Framing.length字段(TCPMessage.sizeFieldLength、TCPMessage.sizeFieldIndex、Int.MaxValue))
.map(TCPMessage.decode)
.询问[操作响应](storageActor)
//TODO:寻找这一复苏;不存在的阿菲克
.customRecover{
案例Op1=>DefaultResponseA()
案例Op2=>DefaultResponseB()
}
.map(TCPMessage.encode(u).toByteString)

Akka的
ask
方法实际上很容易重新创建-它只是一个
mapsync
,带有一些额外的逻辑,可以在参与者死亡时产生更好的错误()。因此,只需手动使用
mapsync
,即可恢复ask错误

val-storageActorProxy=Flow[ByteString]
.via(Framing.length字段(TCPMessage.sizeFieldLength、TCPMessage.sizeFieldIndex、Int.MaxValue))
.map(TCPMessage.decode)
.mapAsync(并行度=2){decodedMessage=>
(storageActor?decodedMessage)。恢复{
案例Op1=>DefaultResponseA()
案例Op2=>DefaultResponseB()
}
}
.map(TCPMessage.encode(u).toByteString)

-尝试
.withAttributes(supervisionStrategy(resumingDecider))
@MateuszKubuszok但resumingDecider只是“元素被删除,流继续”。这不是我需要的,我不想删除它,而是提供一个默认值(基本上将发送的操作映射到默认值)如果未收到响应,则不应“使用
flow.ask
flow.mapsync
并在其中处理
Future
恢复”。