场景(我已经简化了事情):
这个相当标准的模式运行良好。
The problem:如果一个用户在同一分钟内启动了10个作业,而在一天中的那个时候只有10个工人应用程序在运行,那么这个最终用户实际上正在为自己接管所有的计算时间。
问题:我如何确保每个最终用户在任何时候只处理一个作业?(奖励:某些最终用户(例如,管理员)不能被限制)
此外,我不希望前端应用程序阻止最终用户启动并发作业。我只想让最终用户等待他们的并发作业一次完成一次。
的解决方案?:我应该动态地为每个终端用户创建一个自动删除的排他队列吗?如果是,我如何告诉辅助应用程序开始使用这个队列?如何确保一个(而且只有一个)工作人员将从这个队列中消费?
发布于 2016-10-12 20:23:04
这样的特性不是由rabbitMQ提供的。但是,您可以通过以下方式实现它。但是,您将不得不使用轮询,而轮询效率不高(与订阅/发布相比)。你还必须利用动物园管理员来协调不同的工作人员。
您将创建两个队列:一个高优先级队列(用于管理作业)和一个低优先级队列(用于正常用户作业)。这10个工作人员将从两个队列中检索消息。每个工作人员将执行一个无限循环(理想情况下,队列为空时的睡眠间隔),在该循环中,它将尝试可转换地从每个队列检索一条消息:
发布于 2016-10-13 06:32:43
正如Dimos所说,你需要自己构建一些东西来实现这一点。下面是另一种实现,它需要额外的队列和一些持久存储。
限制器的逻辑如下:
这是相当重要的,但如果您需要查看正在发生的事情,则始终可以检查持久存储。
https://stackoverflow.com/questions/28414484
复制相似问题