Linux 有许多开源消息队列,我需要一些帮助来决定我应该选择哪一个。
我的问题很简单 - 我收到一份需要处理的文件列表。每项工作都不能拆分,但它们都是独立的,可以分散到多台计算机上。
我正在考虑使用消息队列来解决这个问题。多个客户端向中央队列发送一条消息。每个队列都有多个订阅者,这些订阅者在处理完当前作业后将从该队列中获取作业。
理想情况下,它应该具有以下特质
- 消息队列必须能够在关机/重启时存储未处理的消息
- 一项工作只能由一个订阅者处理(不希望有重复的工作)
- 订阅者应该能够发送他们自己的作业,这些作业将由不同的订阅者组来处理。
有人可以推荐一个简单易用的消息队列吗?
答案1
您有 RabbitMQ 和 ZeroMQ,但据我所知,ZeroMQ 不会在崩溃时存储未处理的消息。它们都是开源的,并使用 AMQP(一种开放的消息传递协议)。
答案2
一个非常简单易用的是 memcacheq,它使用与 memcached 相同的 API,因此您可以使用相同的库。它使用 BDB 后端,因此它不像 memcached 那样只占用 RAM
答案3
Beanstalkd是一个简单的作业队列系统,可以满足您的基本需求。如果队列本身发生故障,它可以使用二进制日志提供持久性,并且一次只允许一个工作程序执行一项作业,不过作业也设置了超时时间,因此如果作业未在此之前被删除或返回到队列,它们将再次可用(以防工作程序出现问题)。
我做了一个beanstalkd 演示对于本地用户组,它有更多信息。
答案4
我曾使用 Beanstalkd 执行此类任务。可以将其配置为在重新启动之间将作业保存到磁盘。为了帮助删除重复项,我将作业标识符推送到 memcached - 如果作业已在 memcache 中,则将其删除,而不是在 Beanstalkd 中排队。