Rabbit的队列驻留在内存中,因此比在数据库中实现要快得多.一个(好的)专用消息队列还应该提供与队列相关的基本功能,比如节流/流量控制,以及 Select 不同路由算法的能力(兔子提供了这些和更多).根据项目的大小,您可能还希望消息传递组件与数据库分离,这样,如果一个组件承受重负载,就不需要妨碍另一个组件的操作.
至于你提到的问题:
polling keeping the database busy and low performing:使用Rabbitmq,生产者可以向消费者提供push个更新,这比轮询性能好得多.数据只需在需要时发送给消费者,无需进行浪费性判断.
locking of the table -> again low performing:.没有可锁的桌子:P
millions of rows of task -> again polling is low performing:如上所述,Rabbitmq驻留在RAM中并提供流控制,因此运行速度更快.如果需要,如果内存不足,它还可以使用磁盘临时存储消息.2.0之后,Rabbit的RAM使用率有了显著提高.集群选项也可用.
关于AMQP,我想说一个非常酷的功能是"交换",以及它能够路由到其他交换.这为您提供了更大的灵活性,并使您能够创建一系列复杂的布线类型,这些类型在扩展时非常方便.有关一个好例子,请参见:
(source: springsource.com)
和:http://blog.springsource.org/2011/04/01/routing-topologies-for-performance-and-scalability-with-rabbitmq/
最后,关于Redis,是的,它可以用作消息代理,并且可以做得很好.然而,Rabbitmq比Redis具有更多的消息队列功能,因为Rabbitmq从一开始就是一个功能齐全的企业级专用消息队列.另一方面,Redis最初是作为内存键值存储而创建的(尽管它现在的功能远不止这些;它甚至被称为瑞士军刀).尽管如此,我还是听说很多人在较小规模的项目中使用Redis取得了很好的效果,但在更大的应用程序中并没有听说过很多.
下面是一个在长轮询聊天实现中使用Redis的示例:http://eflorenzano.com/blog/2011/02/16/technology-behind-convore/