Rabbitmq logo.png
License : Mozilla Public License

RabbitMQ是實現AMQP(Advanced Message Queuing Protocol,進階訊息佇列協議) 中間層設計的一種。伺服器端是使用Erlang語言編寫, 支持AJAX 也支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等。用在分散式系統中存儲轉發訊息,在容易使用性、擴展性及高可用性等各方面表現得都很好。

在近期微服務(microservice)己成為系統開發的重要方法。在微服務的架構上,除了容器的佈署運用之外,若再搭配訊息佇列的服務可以讓流程和負載更容易的水平擴展。

一個Publisher(server)發出訊息時會先將訊息傳送到Exchange,此時Exchange會將訊息外包一層規則(Binding)並傳送到Queue,在規則中,可以決定該訊息由誰來取走,而Queue則負責保存這些訊息,直到Consumer透過Channel將訊息取走(一個Consumer就是一條Channel)。

系統特點

  1. 可靠性(Reliability)RabbitMQ 使用一些機制來保證可靠性,如持久化、傳輸確認、發佈確認
  2. 靈活的路由(Flexible Routing) 在訊息進入佇列之前,通過 Exchange 來路由訊息的。對於典型的路由功能,RabbitMQ 已經提供了一些內置的 Exchange 來實現。針對更複雜的路由功能,可以將多個 Exchange 綁定在一起,也通過外掛程式機制實現自己的 Exchange
  3. 訊息集群(Clustering)多個 RabbitMQ 伺服器可以組成一個集群,形成一個邏輯 Broker
  4. 高可用(Highly Available Queues)佇列可以在集群中的機器上進行鏡像,使得在部分節點出問題的情況下佇列仍然可用
  5. 多種協定(Multi-protocol)RabbitMQ 支援多種訊息佇列協定,比如 STOMP、MQTT 等等
  6. 多語言用戶端(Many Clients)RabbitMQ 幾乎支援所有常用語言,比如 Java、.NET、Ruby 等等
  7. 管理介面(Management UI)RabbitMQ 提供了一個易用的使用者介面,使得使用者可以監控和管理訊息 Broker 的許多方面
  8. 跟蹤機制(Tracing)如果訊息異常,RabbitMQ 提供了訊息跟蹤機制,使用者可以找出發生了什麼
  9. 外掛程式機制(Plugin System)RabbitMQ 提供了許多外掛程式,來從多方面進行擴展,也可以編寫自己的外掛程式

在訊息的推播、控制,使用RabbitMQ可以很簡單的做到,這在許多系統上,例如線上遊戲、即時訊息APP等,會用到大量即時訊息推播的軟體上是有很大的幫助,不僅可以達到快速、即時,更可以監控訊息傳送的狀態,儘管碰到問題也能很快地找出問題點,因此RabbitMQ可算是未來訊息傳送技術重要發展之一。