【问题标题】:Akka ask timeoutsAkka 询问超时
【发布时间】:2022-01-05 22:51:14
【问题描述】:

我们有一个 akka/scala 应用程序,其中包含一些我需要修复的天真的错误处理。

REST 端点与进行远程调用以创建订单的内部参与者通信。

它使用询问来执行此操作,并且当询问超时时,例如由于网络或通讯错误,我们通过 REST 端点向客户端发送请求失败的消息。

问题是内部actor有自己的排队/重试逻辑,它会继续调用远程接口,直到请求成功。

所以我们遇到的情况是,我们告诉客户请求失败,但实际上只是在排队(并且通常最终会成功)。客户重新提交请求,我们最终得到了 100 个重复订单。

我的问题是:akka 是否支持在询问请求超时时回滚或毒化询问消息的通用方式?

【问题讨论】:

    标签: scala timeout akka


    【解决方案1】:

    可以采取多种方法。两者都不是通用的,因为(特别是一旦涉及网络通信)在这个领域做出的任何选择都有一些情况下它对于业务逻辑来说是完全错误的:

    • 如果关于订单的某些内容可用于确定两个提交的订单实际上是相同的(例如,客户端提供的相关 ID),则可以在参与者中使用它来搭载队列/重试逻辑来处理较早的订单。这需要一些客户端可见的 API 更改。

    • 如果在消息中的此时间字段之后从队列中拉出,也可以包含停止重试和忽略;您可以根据询问超时时间设置此时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-03
      • 2014-04-03
      • 2016-07-14
      • 2016-03-29
      • 2015-07-07
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多