场景(我已经简化了事情):
- 许多最终用户可以从前端 Web 应用程序(生产者)开始工作(繁重的工作,例如渲染大 PDF)。
- 作业被发送到单个持久 RabbitMQ 队列。
- 许多工作应用程序(消费者)处理这些作业并将结果写回到数据存储中。
这种相当标准的模式运行良好。
问题:如果一个用户在同一分钟内启动了 10 个作业,并且在一天中的那个时间只有 10 个工作应用程序启动,那么这个最终用户实际上是在为自己接管所有的计算时间。
问题:如何确保每个最终用户在任何时候都只处理一个作业?(奖励:不得限制某些最终用户(例如管理员))
此外,我不希望前端应用程序阻止最终用户启动并发作业。我只希望最终用户一次完成一项并发作业。
解决方案?:我应该为每个最终用户动态创建一个自动删除的独占队列吗?如果是,我如何告诉工作应用程序开始使用此队列?如何确保一个(并且只有一个)工作人员会从此队列中消费?