0

在我们的应用程序中,我们有一个有状态的参与者,它调用另一个无状态服务。无状态服务进行一些处理并将响应返回给参与者。该服务有时可能需要 1-2 小时才能完成处理。

间歇性地,我们看到服务已成功完成处理但未将响应返回给参与者的场景。我的意思是控制不会返回给actor,并且整个actor处理会卡住并且不会继续进行。我们在服务端或参与者端找不到任何异常。

寻找进一步调查该问题的指针。任何帮助将非常感激。

4

1 回答 1

1

我建议将您的架构更改为事件驱动模型。例如,通过使用这个pub/sub 库。这样,服务可以响应来自参与者的事件并开始处理。完成后,它会触发另一个事件,该事件可以由参与者接收和处理。

这样,参与者只能在事件发送/接收期间存在,从而允许您的集群托管更多工作负载。它还可以防止您的演员不得不等待几个小时才能返回呼叫,从而阻止其他进程使用它。

要解决您当前的问题,我建议您执行以下步骤:

  • 使服务操作在后台运行,返回一个相关令牌(例如随机 guid)
  • 将服务更改为有状态服务。存储处理进度以便查询。
  • 使用 Actor Reminders 定期检查是否有结果,使用令牌。
于 2020-11-26T06:12:52.520 回答