聲明:對於RabbitMQ的學習基於某課網相關視頻和《RabbitMQ實戰指南》一書,后續關於RabbitMQ的博客都是基於二者
一、什么是RabbitMQ
RabbitMQ是開源代理和隊列服務器,通過普通協議在不同的應用之間共享數據,使用Erlang編寫(Erlang進行數據交換的性能很好,
和原生socket一樣好的延遲響應效果),基於AMQP協議
二、AMQP
AMQP高級消息隊列協議:具有現代特征的二進制協議,和JMS有點像,模型如下:
AMQP核心概念
1、Server:Broker,接受client連接,實現AMQP實體服務
2、Connection:應用程序和Broker的網絡連接
3、Channel:網絡信道,讀寫都是在Channel中進行(NIO的概念),包括對MQ進行的一些操作(例如clear queue等)都是在Channel中進行,
客戶端可建立多個Channel,每個Channel代表一個會話任務
4、Message:由properties(有消息優先級、延遲等特性)和Body(消息內容)組成
5、Virtual host:用於消息隔離(類似Redis 16個db這種概念),最上層的消息路由,一個包含若干Exchange和Queue,同一個里面Exchange
和Queue的名稱不能存在相同的。
6、Exchange:Routing and Filter
7、Binding:把Exchange和Queue進行Binding
8、Routing key:路由規則
9、Queue:物理上存儲消息
三、哪些大廠在使用RabbitMQ,為什么?
滴滴、美團、頭條、去哪兒。。。。都再使用RabbitMQ
原因:
1、開源、性能優秀、能保證穩定性,提供可靠性消息投遞模式confirm、返回模式return,和springAMQP完美整合、API豐富
2、集群模式豐富,表達式配置,HA模式,鏡像隊列模式
3、保證數據不丟失的前提下做到高可靠性、高可用性
四、RabbitMQ基礎組件
1、Exchange:
如果不指定Exchange的話,RabbitMQ默認使用,(AMQP default)注意一下,需要將routing key等於queue name相同
2、name、type:
fanout(效率最好,不需要routing key,routing key如何設置都可以)、direct、topic(#一個或多個,*一個)、headers
3、Auto Delete:
當最后一個Binding到Exchange的Queue刪除之后,自動刪除該Exchange
4、Binding:
Exchange和Queue之間的連接關系,Exchange之間也可以Binding
5、Queue:
實際物理上存儲消息的
6、Durability:
是否持久化,Durable:是,即使服務器重啟,這個隊列也不會消失,Transient:否
7、Exclusive:
這個queue只能由一個exchange監聽restricted to this connection,使用場景:順序消費
8、Message:
由properties(有消息優先級、延遲等特性)和Body(Payload消息內容)組成,還有content_type、content_encoding、priority
correlation_id、reply_to、expiration、message_id等屬性
五、安裝
本人很早之前在centos安裝過了,具體步驟都忘了,大家可以百度一下,有一大堆呢,比較推薦Docker安裝,很方便
需要注意:注意rabbitMQ和erlang版本的對應,而且服務器的host name不要瞎改,當初RabbitMQ一直啟動報錯,就是這個原因,搞了兩天,真的
蛋疼,先要確定erlang安裝成功,然后按照RabbitMQ
瀏覽器可視化工具:rabbitmq-plugins enable rabbitmq_management 用戶名、密碼:guest guest