0

如果我有一个 web api 服务(订单通知),它允许第三方客户端定期(每 10 分钟)打电话(他们必须打电话给我们,而不是使用推送给他们)并获得尚未收到的新订单,我该如何处理失败?

例如,客户自上次调用以来尚未收到 10 个新订单。客户调用我们的订单通知服务。我们检索尚未发送的订单(在本例中为 10 个)。我们将这 10 个订单更新为已发送并将响应返回给客户端。

但是客户端没有收到响应(有时在离开我们之后发生,例如 http 超时或其他)。

所以现在我们遇到了一个问题,我们已经将订单标记为已发送,但客户从未收到它们。

关于如何解决这个问题的任何想法?

4

2 回答 2

0

只是一个想法,您能否为调用者分配某种标识符,当调用者成功时,它会回复说它已确认请求?除非客户端报告,否则服务器永远不会知道客户端是否发生了故障。

例如,当调用者 A 调用请求时,它可能会执行以下操作:

call -> http://server/requests

服务器回复一些 xml,其中包含此调用者的结果集以及唯一标识符,它将跟踪以了解该特定调用是否有响应(您可以在合理的时间段后超时此标识符)

当客户端收到请求时,它可以再次回调

call -> http://server/requestComplete?id=[generatedID]

并且服务器将其标记为成功。

许多 API 需要某种标识令牌,因此它已经很适合这种发送/确认消息传递系统。

于 2012-04-30T17:28:40.420 回答
0

如果您可以访问系统的双方,您可以创建一个接收到的请求,这样一旦客户端接收到数据,它就会向原始主机发出请求,告知它已成功接收。

于 2012-04-30T17:32:27.767 回答