MemcacheQ
持久化消息隊列(簡稱mcq)是一個輕量級的消息隊列,特性如下:
簡單易用
處理速度快
多條隊列
并發(fā)性能好
與memcache的協(xié)議兼容。意味著只要裝了前者的extension即可,不需要額外的插件
在zend framework中使用很方便
MSMQ
這是微軟的產品力唯一被認為有價值的東西。如果MSMQ能證明可以應對這種任務,他們將選擇使用它。
關鍵是它并不復雜,除了接收和發(fā)送,沒有別的;它有一些硬性限制,比如最大消息體積是4MB。
然而,通過和一些想MassTransit或NServiceBus這樣的軟件的連接,它完全可以解決這些問題。
ZeroMQ
ZeroMQ是一個非常輕量級的消息系統(tǒng),號稱最快的消息隊列系統(tǒng),專門為高吞吐量/低延遲的場景開發(fā),在金融界的應用中經(jīng)??梢园l(fā)現(xiàn)它。
與RabbitMQ相比,ZeroMQ支持許多高級消息場景,能夠實現(xiàn)RabbitMQ不擅長的高級/復雜的隊列,但是你必須實現(xiàn)ZeroMQ框架中的各個塊(比如Socket或Device等)。
ZeroMQ具有一個獨特的非中間件的模式,你不需要安裝和運行一個消息服務器或中間件,因為你的應用程序將扮演這個服務角色。你只需要簡單地引用ZeroMQ程序庫,可以使用NuGet安裝,然后你就可以愉快地在應用程序之間發(fā)送消息了。
但是ZeroMQ僅提供非持久性的隊列,即沒有地方可以觀察它是否有問題出現(xiàn),也就是說如果down機,數(shù)據(jù)將會丟失。
ZeroMQ非常靈活,但是你必須學習它的80頁的手冊(如果你要寫一個分布式系統(tǒng),一定要閱讀它)。
Jafka/Kafka
Kafka(能將消息分散到不同的節(jié)點上)是LinkedIn于2010年12月開發(fā)并開源的一個分布式MQ系統(tǒng),現(xiàn)在是Apache的一個孵化項目,是一個高性能跨語言分布式Publish/Subscribe消息隊列系統(tǒng),而Jafka是在Kafka之上孵化而來的,即Kafka的一個升級版。具有以下特性:
快速持久化,可以在O(1)的系統(tǒng)開銷下進行消息持久化;
高吞吐,在一臺普通的服務器上既可以打到10W/s的吞吐速率;
完全的分布式系統(tǒng),Broker、Producer、Consumer都原生自動支持分布式,自動實現(xiàn)復雜均衡;
支持Hadoop數(shù)據(jù)并行加載,統(tǒng)一了在線和離線的消息處理,對于像Hadoop一樣的日志數(shù)據(jù)和離線分析系統(tǒng),但又要求實時處理的限制,這是一個可行的解決方案。
相對于ActiveMQ是一個非常輕量級的消息系統(tǒng),除了性能非常好之外,還是一個工作良好的分布式系統(tǒng)。
Apache ActiveMQ
ActiveMQ居于(RabbitMQ&ZeroMQ)之間,類似于ZemoMQ,它可以部署于代理模式和P2P模式。
ActiveMQ被譽為Java世界的中堅力量。它有很長的歷史,且被廣泛使用。它還是跨平臺的,給那些非微軟平臺的產品提供了一個天然的集成接入點。
然而它只有跑過了MSMQ才有可能被考慮。如需配置ActiveMQ則需要在目標機器上安裝Java環(huán)境。
類似于RabbitMQ,它易于實現(xiàn)高級場景,而且只需付出低消耗。它被譽為消息中間件的“瑞士軍刀”。
RabbitMQ
RabbitMQ是使用Erlang編寫的一個開源消息隊列,本身支持很多的協(xié)議:AMQP, XMPP, SMTP, STONP,也正是如此,使的它變的非常重量級,更適合于企業(yè)級的開發(fā)。
它實現(xiàn)了代理(Broker)架構,意味著消息在發(fā)送到客戶端之前可以在中央節(jié)點上排隊。此特性使得RabbitMQ易于使用和部署,適宜于很多場景如路由、負載均衡或消息持久化等,用消息隊列只需幾行代碼即可搞定。
但是,這使得它的可擴展性差,速度較慢,因為中央節(jié)點增加了延遲,消息封裝后也比較大。
如需配置RabbitMQ則需要在目標機器上安裝Erlang環(huán)境。