RabbitMQ系列(二)--基礎組件


聲明:對於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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM