我应该select哪个消息队列(必须在Linux上运行)

Linux上有许多开源消息队列,我需要一些帮助来决定我应该做什么。

我的问题很简单 – 我发送了一个需要处理的文件列表。 每个工作都不能分开,但是它们是独立的,可以分散到多台计算机上。

我正在考虑使用消息队列来解决这个问题。 多个客户端将消息发送到中央队列。 每个队列都有多个订阅者,当他们完成当前作业的处理时,他们将从该队列中取出作业。

理想情况下,它应该有以下品质

  • 消息队列必须能够在关机/重启的情况下存储未处理的消息
  • 作业只能由单个订阅者处理(不要重复作业)
  • 用户应该能够发送他们自己的作业,这将由不同的订户处理。

任何人都可以build议一个简单的使用消息队列?

你有RabbitMQ和ZeroMQ,但是afaik ZeroMQ在崩溃的情况下不存储未处理的消息。 他们都是开源的,并使用AMQP,一个开放的消息协议。

使用非常简单的是memcacheq,它使用与memcached相同的API,因此可以使用相同的库。 它使用一个BDB后端,所以它不像memcached那样只是RAM

Beanstalkd是一个简单的工作队列系统,可以满足您的基本需求。 如果队列本身失败,它可以使用一个二进制日志来提供持久性,并且只允许一个工作者同时有一个工作,尽pipe工作也被设置为超时,所以如果它们没有被删除,或者在这之前被返回到队列,他们再次可用(在工人问题的情况下)。

我做了一个beanstalkd的本地用户组的介绍,它有更多的信息。

我刚刚在我最新的build筑规划中经历了这个

基本上..“消息队列”..都有问题,他们都没有保证同时遵循的两个特点。

保证收到消息
保证没有重复的消息

因此,目前作为开源解决scheme提供的服务不能同时执行这两项必要的任务(除非您希望与IBM共同使用50K)

有一个伟大的video,表明卡桑德拉可以处理这与法定人数读/写,但没有考虑到高并发性:/

最后我实际上决定使用REDIS (我避开了集群解决scheme)

简单而有效的单线程..(以避免重复)为队列工作者提供primefaces性的BlockonPop甚至是多播的pubsubhubbubfunction。

开发了一个自主开发的解决scheme来pipe理从未到达的“失业”(可靠性)

其实很简单的模型..看起来很容易保持以及..

希望这可以帮助..

我已经使用Beanstalkd这种types的任务。 可以将其configuration为在重新启动之间将作业保留到磁盘。 为了帮助删除重复项,我将作业标识符推送到memcached中 – 如果作业已经在memcache中,请将其删除而不是在Beanstalkd中排队。