0

我正在为 DDD 应用程序编写服务层。
服务通过 WSS 上的 JSON-RPC 公开。
我不确定如何响应多余的服务调用。

关于系统的一些事实:

  1. 所有请求必须在特定时间内完成,否则会发生超时异常。
  2. 如果系统负载很重,它可能会决定丢弃请求(可见为timeout)。
  3. 如果系统负载过重,一些消息可能会在队列中过期(显示为timeout)。
  4. 即使请求到达它的目标 ACK 也可能无法及时到达用户(可见为timeout)。
  5. 如果 ACK 没有及时到达,最终用户有权重新调用方法。

不保证请求完成。因此需要幂等性。

如果我们考虑 [4]+[5] 的含义,就会出现问题:

  • 用户调用方法 setFoo(Bar)。
    • 实体已创建,但 ACK 未按时完成。
  • 用户收到超时并假设他应该再试一次,所以他重新调用 setFoo(Bar)。
  • 实体已经存在 -> 嗯...

问题是:用户应该得到 ACK 还是错误(我已经完成了那个伙伴......)?

4

1 回答 1

3

幂等操作在多次调用时应该具有相同的行为。这表明返回值也应该相同,因此在您上面描述的场景中,用户应该得到 ACK。

考虑替代方案;如果向用户返回错误,那么用户应该如何响应?什么“错误处理”是合适的?

您可以为ACK 的响应提出论据(我已经完成了那个伙伴......),但括号中的部分应该是一个纯粹的可选信息字段,而不是影响用户如何处理响应的内容。

于 2014-10-02T11:32:55.743 回答