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