消息隊列 (Message Queue)

消息隊列 (Message Queue)

  • Apache ActiveMQ
  • ZeroMQ
  • RabbitMQ

1.消息持久化: 持久化消息主要是指:MQ down或者MQ所在的服務器down了,消息不會丟失的機制。zeroMq==不支持==,activeMq和rabbitMq都==支持==

2.整體比較:(可靠性、靈活的路由、集羣、事務、高可用的隊列、消息排序、問題追蹤、可視化管理工具、插件系統、社區) RabbitMq最好,ActiveMq次之,ZeroMq最差。當然ZeroMq也可以做到,不過自己必須手動寫代碼實現,代碼量不小。尤其是可靠性中的:持久性、投遞確認、發佈者證實和高可用性。

  1. TPS (系統吞吐量)
    image

ZeroMQ:延遲最低低,RabbitMQ支持高併發最好

RabbitMQ 背景知識

由瑞典電信設備製造商愛立信公司開發。Erlang問世於1987年,經過十年的發展,於1998年發佈開源版本。Erlang是運行於虛擬機的解釋性語言,目的是創造一種可以應對大規模併發活動的編程語言和運行環境

AMQP協議 (Advanced Message Queuing Protocol)

一個提供統一消息服務的應用層標準高級消息隊列協議,是應用層協議的一個開放標準,爲面向消息的中間件設計。基於此協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件不同產品,不同的開發語言等條件的限制

概念說明:

Exchange:消息交換機,它指定消息按什麼規則,路由到哪個隊列。
Queue:消息隊列載體,每個消息都會被投入到一個或多個隊列。
Binding:綁定,它的作用就是把exchange和queue按照路由規則綁定起來。
Routing Key:路由關鍵字,exchange根據這個關鍵字進行消息投遞。
vhost:虛擬主機,一個broker裏可以開設多個vhost,用作不同用戶的權限分離。
producer:消息生產者,就是投遞消息的程序。
consumer:消息消費者,就是接受消息的程序。
channel:消息通道,在客戶端的每個連接裏,可建立多個channel,每個channel代表一個會話任務。

消息隊列的使用過程大概如下:

1. 客戶端連接到消息隊列服務器,打開一個channel。
2. 客戶端聲明一個exchange,並設置相關屬性。
3. 客戶端聲明一個queue,並設置相關屬性。
4. 客戶端使用routing key,在exchange和queue之間建立好綁定關係。
5. 客戶端投遞消息到exchange。

Ubuntu 安裝配置

  1. 服務器安裝rabbitmq
apt-get install rabbitmq-server
  1. 配置rabbitmq 賬戶
 #創建一個admin用戶
 1.sudo rabbitmqctl add_user admin 123123
 
 #設置該用戶爲administrator角色
 2.sudo rabbitmqctl set_user_tags admin administrator
 #設置權限
 3.sudo rabbitmqctl  set_permissions  -p  '/'  admin '.' '.' '.'
 #重啓rabbitmq服務
 4.sudo service rabbitmq-server restart
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章