Zaqar/specs/use-cases/1
< Zaqar
Marconi:用例 1
将任务分配给多个工作者。
特征信息
| 目标背景 |
| 先决条件 |
| 成功结束条件 |
| 失败结束条件 |
| 主要参与者 |
| 触发器 |
主要流程
1. 生产者签名并向服务提交工作票
2. 服务确认工作票并保证其持久性
3. 工作者从服务中检索工作票
4. 工作者验证工作票签名
5. 工作者执行请求的工作
6. 工作者确认工作完成
7. 工作者循环到 (3)
变体
2a. 服务无法以持久方式保存工作票:服务返回错误状态和信息给生产者;生产者可以根据收到的错误性质重试请求或使工作项失败。
3a. 队列中存在多个工作票:工作者检索最多 min(50, n) 个,其中 n 是工作者在每次向服务请求中指定的。
3b. 没有可用的工作票:服务返回“无内容”状态码,工作者必须在一段时间延迟后重试。
3c. 工作者必须区分特定的工作流:生产者标记工作票,工作者请求服务根据指定的标签过滤工作票(生产者和工作者在带外协商)。
3d. 多个工作者正在处理工作票:工作者要求服务创建一个事务,有效地将给定批次的工作票隐藏给所有其他工作者。
4a. 签名无效:工作者记录此事实并忽略此工作项,跳过下一步 (5),但删除该工作项 (6)。
5a. 工作者由于任何原因无法完成工作:服务使工作票可供另一个工作者使用。
7a. 队列中存在多于 min(50, n) 个工作票,或者生产者提交工作票的速度快于其消耗速度:工作者循环直到处理完所有票。工作者池可以根据票据量动态调整大小。
相关信息
- 所有工作票状态更改都广播为审计消息。
- 生产者和消费者可以通过标记命名空间工作票。
- 工作者池管理器可以请求消息总线指标,并可选地按一个或多个标签进行过滤。