首先,这不是"什么是最好的队列管理器…"之类的问题。
我目前使用Gearman进行队列管理。它很快,很可靠,但我确实错过了一些功能,我想根据我的需求了解更好的选择。我曾经在Ruby中使用Delayed_job和Resque,但即使使用它们,我也没有找到以下所有要求:
- 我不需要一台速度极快的服务器(我们每天处理大约3000个任务/作业)
- 我需要它才能重新排队执行任务
- 以持久的方式存储当前任务(而不仅仅是内存)
- 它应该能够在服务器之间复制数据(以便在服务器崩溃时保持高可用性)
- 列出项目
- 并且能够有一个超时,自动重新排队
- 能够延迟任务
- 从现在起安排到5分钟
- 或安排到下周日
- 能够管理队列
- 每个队列有多少个作业
- 工作是关于什么的
- 我可以查询队列吗
其他想法:
- 能够通过Zabbix监控服务器状态会很好
我对Beanstalkd有很好的第一印象。我只怀念服务器之间的数据复制。我对ActiveMQ Apollo也有很好的印象,但我不知道如何延迟安排。
有什么想法吗?
Beanstalkd完成了大部分工作,您可以保存二进制日志。不过这只是当地的。监测很容易,只需连接,发送"STATS"调用,并读取结果,还可以选择返回以从已知管道中获取计数。
还有另外两种潜在的远程托管解决方案具有高可用性。亚马逊SQS和IronMQ。Iron的一个优点(尽管我个人没有使用过)是它还有一个几乎100%兼容Beanstalkd的接口,只是后端更"企业化"。