1.RabbitMQ
RabbitMQ用Erlang語言編寫,最早是為電信系統間的可靠通信設計的。
優點:
(1)輕量級,迅捷,容易部署和使用,是應用最廣泛的消息中間件之一。
(2)靈活的路由配置。它在生産者和隊列之間增加了一個Exchange子產品,根據配置的路由規則将生産者發出的消息分發到不同的隊列中。
(3)每秒可以處理幾萬到幾十萬條消息,可以支撐絕大多數場景。
缺點:
(1)大量消息堆積時,會導緻性能急劇下降。
(2) 和其它兩種消息隊列産品相比,性能是最差的。是以,如果業務對性能要求特别高,就不要選用RabbitMQ。
(3) Erlang程式設計語言比較小衆,學習成本高,不容易二次開發。
2.RocketMQ
RocketMQ是阿裡巴巴2012年開源的産品,是優秀的國産消息隊列。
優點:
(1)中文社群活躍,源代碼易讀,友善二次開發。
(2)每秒可以處理幾十萬條消息,性能比RabbitMQ高一個數量級。
(3)對線上業務的響應時延做了很多優化,大多數情況下可以做到毫秒級響應。是以,如果業務很在意響應時延,就應該選用RocketMQ。
缺點:
(1)作為國産消息隊列,在國際上沒那麼流行,與周邊産品的內建和相容性略差。
3.Kafka
最早由LinkedIn開發,最初設計的目的是處理海量日志。
早期的版本為了擷取極緻的性能,在其它方面做了犧牲,如可靠性低,不支援叢集,功能也簡陋。但随後的版本已經補齊了這些短闆,在可靠性、穩定性和功能等方面已經可以滿足絕大部分場景的需求。
優點:
(1)與周邊産品的內建和相容性非常好。在大資料和流計算領域,幾乎所有的開源軟體都支援Kafka。
(2)每秒可以處理幾十萬條消息,也比RabbitMQ高一個數量級。
缺點:
(1)設計上大量采用批量和異步的思想,擷取了超高性能。但是同步收發消息的響應時延比較高,不太适合處理線上業務場景。