java - 循环消息/任务队列现有解决方案
问题描述
考虑有一组有限的任务必须在某个时间段内完成(也均匀分布在该时间段内),然后一次又一次地重复。
如果是一个本地工作者/线程,我们只需要这样做(抱歉伪代码):
long interval = period / tasks.size
while (true) {
for (task in tasks) {
task.do()
sleep(interval)
}
}
现在我想以分布式方式执行此操作,有多个独立的工作人员。
对于这样的案例,是否有一些已知的最佳实践解决方案(最好来自 Java 世界)?循环消息队列?任务上的分布式锁?我用谷歌搜索了一下安静,但看不到任何优雅的开箱即用解决方案。
解决方案
我不认为有一个单一的“最佳”方法可以解决这个问题,因为这将是灵活性和均匀度保证强度之间的权衡。
在频谱的灵活端,只需在此期间的某个时间将每个任务随机分配给一个工人。这将不需要工作人员之间的通信,因此这是可扩展的和可并行的。您会期望事情应该相当均匀,尤其是在您有很多任务的情况下。
在频谱的强均匀性端,您应该按工作人员和时间段划分任务,如@Lino 所示。这将要求您提前知道您有多少工作人员等,并且它是不可并行的。
有许多替代方法介于这两个极端之间,以及混合方法。
要缩小答案范围,您需要提供有关您的限制条件和成功标准的更多详细信息。
推荐阅读
- python - ParseError:“ValidateError Field(s) `arch` 失败:无效的视图定义错误详细信息:找不到模型:forecast.report
- javascript - 为什么 new Date 返回错误的日期?
- r - R 中引导包中的 tsboot 不能并行运行?
- recaptcha - reCAPTCHA:file_get_contents():假设应用程序/x-www-form-urlencoded 未指定内容类型
- linux - 我可以记录linux进程退出信息吗?
- php - WP Gravity Forms - 当等于 ,00 时隐藏小数
- angular - 从 http Post 返回 Observable
- java - 在火花中对多维数据集数据集使用连接时是否有任何限制
- hyperledger-fabric - 当 2 个服务器相互断开然后重新连接时会发生什么?
- python - Kivy 1.10.1 如何使用选项设置更改某些东西的 font_size?