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
恢复”。