我正在开发一个系统,其中有一个服务器从UI(客户端)获取请求,然后它创建对另一个与外部Web API通信的服务器的调用。
我面临的问题是2台服务器之间的不一致,因为面向服务器的外部API可能无法使用外部API执行操作,有时它会在20分钟左右后失败。
所以状态可以是
服务器A向服务器发送请求并获得200 ok - 服务器A上的状态可以是ACTIVE或PENDING 服务器B发送API调用并失败 - 服务器B上的状态现在是错误
告诉服务器A该操作实际失败的最佳做法是什么?
答案 0 :(得分:0)
高度依赖于客户端和服务器设计。 如果我理解你的话,从服务器B到外部API的API调用(我在下文中称之为C)是异步设计的:
A ---------> B
A <-- ACK -- B
B ---------> C
B <-- ERR -- C
(A <-- ERR -- B)
^ that is your question
根据消息通信,有多种可能性。如果您使用REST调用,则从B到A的确认可能包含操作ID和A可以询问操作状态的端点:
{
status: queued,
operationId: 12345
operationStatusUri: yourhost.com/api/queue/123456
}
客户端现在可以使用A调用来轮询状态。
如果你有某种基于消息的架构,你可以使用消息总线系统将错误从B推送到A.