【发布时间】:2014-10-02 10:15:07
【问题描述】:
我正在为 DDD 应用程序编写服务层。
服务通过 WSS 上的 JSON-RPC 公开。
我不确定如何响应多余的服务调用。
关于系统的一些事实:
- 所有请求必须在特定时间内完成,否则会出现超时异常。
- 如果系统负载过重,它可能会决定放弃请求(显示为超时)。
- 如果系统负载过重,队列中的某些消息可能过期(显示为超时)。
- 即使请求到达它的目的地 ACK 也可能无法到达用户 时间(显示为超时)。
- 如果 ACK 未及时到达,最终用户有权重新调用方法。
不保证请求完成。 因此需要幂等性。
如果我们考虑 [4]+[5] 的含义,就会出现问题:
- 用户调用方法 setFoo(Bar)。
- 实体已创建,但 ACK 未按时完成。
- 用户收到超时并认为他应该再试一次,所以他重新调用 setFoo(Bar)。
- 实体已存在 -> 嗯...
问题是:用户应该得到 ACK 还是错误(我已经完成了那个伙伴...)?
【问题讨论】:
标签: web-services service domain-driven-design json-rpc idempotent