(1)应用 调用 服务 失败 后, 会 将 调用 请求 重新 发送 到 其他 服务器, 但是 这个 失败 可能 是 虚假 的 失败。 比如 服务 已经 处理 成功, 但 因为 网络 故障 应用 没有收到 响应, 这时 应用 重新 提交 请求 就 导致 服务 重复 调用, 如果 这个 服务 是 一个 转 账 操作, 就会 产生 严重后果。
(2)服务 重复 调用 是 无法 避免 的, 应用 层 也不 需要 关心 服务 是否 真的 失败, 只要 没有 收到 调用 成功 的 响应, 就可以 认为 调用 失败, 并重 试 服务 调用。 因此 必须 在 服务 层 保证 服务 重复 调用 和 调用 一次 产生 的 结果 相同, 即 服务 具有 幂 等 性。
(3)有些 服务 天然 具有 幂 等 性, 比如 将 用户 性别 设置 为 男性, 不管 设置 多少 次, 结果 都 一样。 但是 对于 转 账 交易 等 操作, 问题 就会 比较 复杂, 需要 通过 交易 编号 等 信息 进行 服务 调用 有效性 校验, 只有 有效 的 操作 才能 继续 执行。
因篇幅问题不能全部显示,请点此查看更多更全内容