消息隊列 (Message Queue)
- Apache ActiveMQ
- ZeroMQ
- RabbitMQ
1.消息持久化: 持久化消息主要是指:MQ down或者MQ所在的服務器down了,消息不會丟失的機制。zeroMq==不支持==,activeMq和rabbitMq都==支持==
2.整體比較:(可靠性、靈活的路由、集羣、事務、高可用的隊列、消息排序、問題追蹤、可視化管理工具、插件系統、社區) RabbitMq最好,ActiveMq次之,ZeroMq最差。當然ZeroMq也可以做到,不過自己必須手動寫代碼實現,代碼量不小。尤其是可靠性中的:持久性、投遞確認、發佈者證實和高可用性。
- TPS (系統吞吐量)
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 安裝配置
- 服務器安裝rabbitmq
apt-get install rabbitmq-server
- 配置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