消息隊列簡介(MQ)

1、什麼是消息隊列

消息隊列是一種異步的服務間通訊方式,適用於無服務器和微服務架構。消息在被處理和刪除以前一直存儲在隊列上。每條消息僅可被一位用戶處理一次。消息隊列可被用於分離重量級處理、緩衝或批處理工做以及緩解高峯期工做負載。java

2、隊列的特色

  • 先進先出
  • 發佈訂閱
  • 持久化
  • 分佈式

3、消息隊列的優點

在現代雲架構中,應用程序被分解爲多個規模較小且更易於開發、部署和維護的獨立構建塊。消息隊列可爲這些分佈式應用程序提供通訊和協調。docker

消息隊列能夠顯著簡化分離應用程序的編碼,同時提升性能、可靠性和可擴展性。此外,您還能夠採用扇出設計模式將消息隊列與發佈/訂閱消息收發結合起來。數據庫

1.提升性能
消息隊列支持異步通訊,這意味着建立和處理消息的終端節點將與隊列進行交互,而不是彼此交互。建立器能夠將請求添加到隊列中,無需再等待這些請求接受處理。處理器僅在消息可用時纔會處理消息。系統中的任何組件都不會停下等待其餘組件,從而優化了數據流。apache

2.加強可靠性
隊列可永久保留您的數據,並減小系統的不一樣部件離線時發生的錯誤。經過利用消息隊列分離不一樣的組件,能夠提升容錯性。即便系統的某一部分沒法訪問,其餘部分也仍可繼續與隊列進行交互。隊列自己也能夠進行鏡像,以提供更高的可用性。設計模式

3.可拓展性
消息隊列可根據您的須要精確擴展。當工做負載到達峯值時,應用程序的多個實例均可以將請求添加到隊列,並且不會產生衝突。隨着隊列因這些傳入請求的增多而愈來愈長,您能夠將這些工做負載分發給一組處理器。建立器、處理器和隊列自己均可以按需擴展和縮減。安全

4.分離解耦
消息隊列消除了組件之間的依賴關係,並顯著簡化了分離應用程序的編碼。軟件組件沒必要承擔通訊代碼的重壓,而是能夠在通過設計後執行離散的業務功能。服務器

不管您使用的是總體式應用程序、微服務仍是無服務器架構,消息隊列都是一種簡單且出色的應用程序分離方法。架構

4、幾種常見的MQ隊列

1.RabbitMQ

官網: www.rabbitmq.com/
開發語言: Erlang
支持客戶端語言言: Erlang,java,Ruby等
協議: AMQP, STOMP, XMPP, SMTP
消息推拉模式: pull/push均支持
數據可靠性: 保證數據不丟,有Slave用做備份
單機吞吐量: 萬級
持久化能力: 內存, 文件異步

RabbitMQ.png

RabbitMQ是一個消息傳遞代理—消息傳遞的中介。它爲您的應用程序提供了一個發送和接收消息的公共平臺,併爲您的消息提供了一個安全的地方,直到收到消息爲止。它的特性包括可靠性、高可用性、集羣和聯合。RabbitMQ附帶一個易於使用的管理UI,容許您監視和控制消息代理的各個方面。幾乎任何您能想到的語言都有RabbitMQ客戶機。分佈式

2.RocketMQ

官網: rocketmq.incubator.apache.org/
開發語言: Java
支持客戶端語言: Java, C++, Go
協議: JMS,MQTT
消息推拉模式: pull/push均支持
數據可靠性: 支持異步實時刷盤,同步刷盤,同步複製,異步複製
單機吞吐量:十萬級
持久化能力: 磁盤文件

RocketMQ.png

其中
NameServer: 爲 producer 和 consumer 提供路由信息
Producer: 爲消息生產者,生產者的做用就是將消息發送到MQ,生產者自己既能夠產生消息
Consumer: 爲消息消費者,消費 MQ 上的消息的應用程序就是消費者
Broker: RocketMQ系統的主要角色,及隊列。Broker接收來自生產者的消息,儲存以及爲消費者拉取消息的請求作好準備。

Apache RocketMQ是一個低延遲、可靠、可伸縮、易於使用的消息中間件,誕生於阿里巴巴龐大的消息業務。 它提供的各類功能以下:

  • 發佈/訂閱和P2P消息傳遞模型
  • 在同一隊列中可靠的FIFO和嚴格的順序消息傳遞
  • 支持pull和push模式
  • 單一隊列百萬消息堆積能力
  • 支持各類消息傳遞協議。例如JMS、MQTT等。
  • 功能豐富的管理儀表板的配置,指標和監測
  • 分佈式高可用的部署架構,知足至少一次消息傳遞語義
  • 提供 docker 鏡像用於隔離測試和雲集羣部署

3.ActiveMQ

官網: activemq.apache.org/
開發語言: Java
支持客戶端語言: Java, .NET, C++ 等
協議: OpenWire, STOMP, REST, XMPP, AMQP
消息推拉模式: pull/push均支持
數據可靠性: master/slave
單機吞吐量:萬級
持久化能力: 內存, 文件, 數據庫

p2p模式:

ActiveMQ-p2p.png

pub/sub模式:

ActiveMQ-pb.png

Apache ActiveMQ是最流行、功能最強大的開源消息傳遞和集成模式提供者。Apache ActiveMQ速度快,支持許多跨語言客戶機和協議,具備易於使用的企業集成模式和許多高級特性,同時徹底支持JMS 1.1和J2EE 1.4。

4.Kafka

官網: kafka.apache.org/
開發語言: Java & Scala
支持客戶端語言: Java, Scala 等
協議:自有協議
消息推拉模式: pull
數據可靠性: 數據可靠,並有replication機制,有容錯容災能力
單機吞吐量:十萬級
持久化能力: 磁盤文件,能夠作到無限消息堆積

Kafka.png

內部結構圖:

kafka2.png

如上圖所示,一個典型的kafka集羣中包含若干producer,若干broker(Kafka支持水平擴展,通常broker數量越多,集羣吞吐率越高),若干consumer group,以及一個Zookeeper 集羣。Kafka經過Zookeeper管理集羣配置,選舉leader,以及在consumer group發生變化時進行rebalance。producer使用push模式將消息發佈到broker,consumer使用pull模式從broker訂閱並消費消息。


喜歡能夠關注公衆號: 終身幼稚園

相關文章
相關標籤/搜索