【问题标题】:Approach for long running REST API长时间运行的 REST API 的方法
【发布时间】:2019-05-07 16:02:02
【问题描述】:

我们正在尝试使用 REST API,用于消息处理器,它的某些操作可能需要超过配置的超时时间。

想知道,如果Http调用API超时,会停止执行API,还是继续执行?

想法是,我们可以触发并忘记 API,如果 API 不返回 404 或 503,我们并不担心。但想知道 API 是否会继续执行?

任何意见或建议表示赞赏。

【问题讨论】:

  • 改用websocket?
  • 听起来你需要一个异步进程。这通常通过触发总线消息来启动进程来完成。您的消费者看到队列中的消息并对其进行处理。完成后,它可以触发另一条总线消息以指示它已完成,或回调网站或使用结果更新数据库等。通过遵循此过程,您的站点不必等待 HTTP 中长时间运行的过程打电话,然后你就可以腾出线程来做其他工作了。
  • 评论暗示您可以控制 API 服务器。您只是一个消费者还是也可以控制 API 服务器? -> 如果你只是消费者,这取决于服务器的实现。
  • 是的..我们实际使用windows服务和处理消息,但是消息处理涉及调用API,这是长期运行的。我们不需要等待 API 完成并返回消息处理器,但是想了解 API 是否会在调用者消息处理器超时后完成所有操作..?这会是一种好方法吗?

标签: c# rest message-queue


【解决方案1】:

您应该使用某种后台处理来处理该过程。 我建议使用 Hangfire。 https://www.hangfire.io/ 使用 Hangfire 将作业排入队列,它将返回作业 ID。您可以将此作业 ID 返回给客户端。 公开另一个 API 以检查此作业的状态。

【讨论】:

    【解决方案2】:

    很好的方法是使用回调/观察者模式来处理这个问题。首先要了解超时有两种,服务器端和客户端。您可以显式指定客户端超时,服务器超时由服务器自己处理。 所以,你需要实现这样的算法,

    1. 您以独特的方式识别每个请求并在触发之前对其进行标记 内存或文件/数据库。
    2. 带有关联回调方法的触发请求。 因此,在响应时,您可以控制执行诸如标记请求之类的操作 完成或失败或它是什么。
    3. 标记/删除请求数据。

    【讨论】:

      猜你喜欢
      • 2013-05-04
      • 1970-01-01
      • 2016-01-05
      • 2020-02-20
      • 2010-12-10
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多