跳转到: 导航, 搜索

Zaqar/specs/use-cases/1

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) 个工作票,或者生产者提交工作票的速度快于其消耗速度:工作者循环直到处理完所有票。工作者池可以根据票据量动态调整大小。

相关信息

  • 所有工作票状态更改都广播为审计消息。
  • 生产者和消费者可以通过标记命名空间工作票。
  • 工作者池管理器可以请求消息总线指标,并可选地按一个或多个标签进行过滤。