如果我有一个web api服务(订单通知),允许第三方客户端定期(每隔10分钟)打电话给他们(他们必须打电话给我们,而不是使用推送)并获得新订单尚未收到,我该如何处理失败?
例如,自上次呼入以来客户端未收到10个新订单。客户呼叫我们的订单通知服务。我们检索未发送的订单(本例中为10)。我们将这10个订单更新为已发送并将响应返回给客户。
然而,客户没有收到回复(有时候在离开我们之后发生了例如http超时或其他事情)。
所以现在我们遇到了一个问题,在我们这边我们已经将订单标记为已发送但客户从未收到过。
关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
只是一个想法,你能为调用者分配一些标识符吗?当调用者成功时,它回复说它已经确认了请求?除非客户端报告,否则服务器永远不会知道客户端是否出现故障。
例如,当呼叫者A呼叫请求时,它可能会执行以下操作:
call -> http://server/requests
服务器回复一些包含此调用者结果集的xml以及一个唯一标识符,它将跟踪该特定标识符以确定该特定调用是否有响应(您可以在一段合理的时间后超时使用此标识符)< / p>
当客户端收到请求时,它可以再次回电
call -> http://server/requestComplete?id=[generatedID]
,服务器将其标记为成功。
许多API需要某种识别令牌,因此它已经很好地适用于这种发送/确认消息系统。
答案 1 :(得分:0)
如果您有权访问系统的两端,则可以创建收到的请求,这样一旦客户端接收到数据,它就会向原始主机发出请求,告知它已成功收到。