跳转到: 导航, 搜索

Zaqar/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,以便代理能够跟上。