Zaqar/specs/use-cases/5
< Zaqar(重定向自 Marconi/specs/use-cases/5)
Marconi: 用例 5
从代理请求信息。
特征信息
| 目标背景 |
| 先决条件 |
| 成功结束条件 |
| 失败结束条件 |
| 主要参与者 |
| 触发器 |
主要流程
1. 请求者生成并签署请求,然后提交给服务。
2. 服务确认消息并保证其持久性,同时返回为该消息生成的 ID。
3. 代理从服务检索请求。
4. 代理验证请求。
5. 代理处理请求。
6. 代理准备一个包含对原始请求 ID 的引用,然后签署消息并提交给服务的回应。
7. 请求者从服务检索代理响应。
8. 请求者验证代理响应。
9. 请求者通过检查附加的 ID 将代理响应与原始请求匹配。
10. 请求者处理响应。
11. 代理循环到 (3)
变体
2a. 服务无法以持久方式保存请求:服务返回错误状态和信息给请求者;请求者可以选择重试请求,或者根据收到的错误性质简单地记录失败并继续。
3a. 已经排队了多个请求:代理检索最多 min(50, n) 个请求,其中 n 是代理在每次请求中指定给服务的值。
3b. 没有可用的请求:服务返回“无内容”状态码,代理必须在一段时间延迟后重试。
4a. 请求的签名无效:代理忽略无效请求,跳过接下来的几个步骤 (5-10)。
8a. 代理响应无效:请求者记录问题并跳过后续步骤 (9-10)。
9a. 无法匹配 ID:按 (8a) 中的方式进行。
11a. 已经排队了超过 min(50, n) 条消息,或者请求者提交请求的速度快于其被消耗的速度:代理循环,直到所有请求都被处理。请求者可能需要增加请求的 TTL,以便代理能够跟上。