1.網際網路大廠為什麼選擇RabbitMQ?
2.RabbitMQ的高性能之道是如何做到的?
3.什麼是AMQP進階協定?
4.AMQP核心概念是什麼?
5.RabbitMQ整體架構模型是什麼樣子?
6.RabbitMQ消息是如何流轉的?
7.指令行與管控台
8.RabbitMQ消息生産與消費
9.RabbitMQ交換機詳解
10.RabbitMQ隊列綁定、虛拟主機、消息
RabbitMQ是一個開源的消息代理和隊列伺服器,用來通過普通協定在完全不同的應用之間共享資料,RabbitMQ使用Erlang編寫,并且基于AMQP協定。
1.網際網路大廠為什麼選擇RabbitMQ?
①開源、性能優秀,穩定性保障
②提供可靠性消息投遞模式(confirm)、傳回模式(return)
③與SpringAMQP完美的整合,API豐富
④叢集模式豐富,表達式配置,HA模式,鏡像隊列模型
⑤保證資料不丢失的前提做到高可靠性、可用性
2. RabbitMQ的高性能之道是如何做到的?
Erlang語言最初在于交換機領域的架構模式,這樣使得RabbitMQ在Broker之間進行資料互動的性能是非常優秀的
Erlang的優點:有着和原生Socket一樣的延遲。(Socket是應用層與TCP/IP協定族通信的中間軟體抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協定族隐藏在Socket接口後面,對使用者來說,一組簡單的接口就是全部,讓Socket去組織資料,以符合指定的協定)
3.什麼是AMQP進階協定?
AMQP全程:Advanced Message Queuing Protocol(進階消息隊列協定)
AMQP定義:是具有現代特征的二進制協定。是一個提供統一消息服務的引用層标準進階消息隊列協定,是應用層協定的一個開放标準,為面向消息的中間件設計。
4.AMQP核心概念是什麼?
① Server:又稱Broker,接受用戶端的連接配接,實作AMQP實體服務
② Connection:連接配接,應用程式與Broker的網絡連接配接
③ Channel: 網絡信道,幾乎所有的操作都在Channel中進行,是進行消息讀寫的通道。用戶端可建立多個Channel,每個Channel代表一個會話任務。
④ Message:消息,伺服器和應用程式之間傳送的資料,由Properties和Body組成。
Properties可以對消息進行修飾,比如消息的優先級、延遲等進階特性;Body則就是消息體内容。
⑤ Virtual host: 虛拟位址,用于進行邏輯隔離,最上層的消息路由。一個Virtual Host裡面可以有若幹個Exchange和Queue,同一個Virtual Host裡面不能有相同名稱的Exchange或Queue
⑥ Exchange:交換機,接收消息,根據路由鍵轉發消息到綁定的隊列
⑦ Binding:Exchange和Queue之間的虛拟連接配接,binding中可以包含routing key
⑧ Routing key:一個路由規則,虛拟機可用它來确定如何路由一個特定消息
⑨ Queue:也稱為Message Queue,消息隊列,儲存消息并将它們轉發給消費者
5.RabbitMQ整體架構模型是什麼樣子?
生産者:Producer 交換機:Exchange 隊列Queues 消費者:Consumer
7.指令行與管控台
基礎操作:
Rabbitmqctl stop_app 關閉應用
Rabbitmqctl start_app 啟動應用
Rabbitmqctl status 節點狀态
rabbitmqctl add_user username password 添加使用者
rabbitmqctl list_users 列出所有使用者
rabbitmqctl delete_user username 删除使用者
rabbitmqctl clear_permissions –p vhostpath username 清除使用者權限
rabbitmqctl add_vhost vhostpath 建立虛拟主機
rabbitmqctl list_vhosts 列出所有虛拟主機
rabbitmqctl list_queues 檢視所有隊列資訊
進階操作:
rabbitmqctl reset: 移除所有資料,要在stop_app之後使用
rabbitmqctl join_cluster<clusternode>[--ram] 組成叢集指令([--ram]指定存儲模式)
rabbitmqctl cluster_status 檢視叢集狀态
rabbitmqctl change_cluster_node_type disc | ram 修改叢集節點的存儲形式
rabbitmqctl forget_cluster_node [--offline] 忘記節點(摘除節點)
rabbitmqctl rename_cluster_node oldnode1 newnode1 [oldnode2] [newnode2 ...] (修改節點名稱)
8.Exchange詳解:
1.Direct Exchange
所有發送到Direct Exchange的消息被轉發到RouteKey中指定的Queue
2.Topic Exchange
①所有發送到Topic Exchange的消息被轉發到所有關心RouteKey中指定Topic的Queue上
②Exchange将RouteKey和某Topic進行模糊比對,此時隊列需要綁定一個Topic
模糊比對的通配符:“#”比對一個或多個詞 “*”比對一個詞
3.Fanout Exchange
①不處理路由鍵,隻需要簡單的将隊列綁定到交換機上
②發送到交換機的消息都會被轉發到與該交換機綁定的所有隊列上
③Fanout交換機轉發消息是最快的
9.Message
消息的建立由AMQPMessage對象來建立。伺服器和應用程式之間傳送的資料,由Properties和Payload( Body )組成。
Delivery mode:消息是否持久化,1:否,2:是
Headers:頭資訊,是由一個或多個鍵值對組成的(hashtable)
10s自動消失
如何保證消息不丢失
保證消息的不丢失
1:Exchange需要持久化
2:Queue需要持久化
3:Message需要持久化