1. 程式人生 > >RabbitMQ筆記四:Binding,Queue,Message概念

RabbitMQ筆記四:Binding,Queue,Message概念

let 保留 dea 參數 def str 所有 刪除元素 live

Binding詳解

技術分享圖片 黃線部分就是binding

ExchangeExchangeQueue之間的虛擬連接,Binding中可以包含Routing key或者參數

技術分享圖片 創建binding

註意:

  • default Exchange不能進行Binding,也不需要進行綁定。
  • 除default Exchange之外,其他任何Exchange都需要和Queue進行Binding,否則無法進行消息路由(轉發)
  • Binding的時候,可以設置一個或多個參數,其中參數要特別註意參數類型,如果Routing key中指定的參數類型和消息中指定的參數類型不一致(header Exchange)也不能進行消息轉發。
  • Direct Exchange,Topic Exchange進行Binding的時候,需要指定Routing key
  • Fanout Exchange,Headers Exchange進行Binding的時候,不需要指定Routing key。

Queue詳解

Queue稱為Message Queue,消息隊列,保存消息並將它們轉發給消費者。

技術分享圖片 RabbitMQ架構圖

屬性

  • Durability:是否持久化,Durable是,Transient是否。如果不持久化,那麽在服務器宕機或重啟之後Queue就會丟失。
  • Auto delete:如果選擇yes,當最後一個消費者不在監聽Queue的時候,該Queue就會自動刪除,一般選擇false。
  • Arguments:AMQP協議留給AMQP實現者擴展使用的。
    x-message-ttl:一個消息推送到隊列中的存活時間。設置的值之後還沒消費就會被刪除。
    x-expires:在自動刪除該隊列的時候,可以使用該隊列的時間。
    x-max-length:在隊列頭部刪除元素之前,隊列可以包含多少個(就緒)消息,如果再次向隊列中發送消息,會刪除最早的那條消息,用來控制隊列中消息的數量。
    x-max-length-bytes:在隊列頭部刪除元素之前,隊列的總消息體的大小,用來控制隊列中消息的總大小。
    x-dead-letter-exchange:當消息被拒絕或者消息過期,消息重新發送到的交換機(Exchange)的可選名稱。
    x-dead-letter-routing-key:當消息被拒絕或者消息過期,消息重新發送到的交換機綁定的Route key的名稱,如果沒有設置則使用之前的Route key。
    x-max-priority:隊列支持的最大優先級數,如果沒有設置則不支持消息優先級
    x-queue-mode:將隊列設置為延遲模式,在磁盤上保留盡可能多的消息以減少RAM使用; 如果未設置,隊列將保持在內存中的緩存,以盡可能快地傳遞消息。
    x-queue-master-locator:將隊列設置為主位置模式,確定在節點集群上聲明隊列主節點所在的規則。

可以在控制臺上查看queue列表還可以通過rabbitmqctl list_queues命令進行查看。

[root@mqserver ~]# rabbitmqctl list_queues
Listing queues
weixin  0
duanxin 0
APP     0
email   0
WAP     0
zhihao.miao.order       0
PC      0
OA      1

指定某個vhost下的隊列:

[root@mqserver ~]# rabbitmqctl list_queues -p /
Listing queues
weixin  0
duanxin 0
APP     0
email   0
WAP     0
zhihao.miao.order       0
PC      0
OA      1

可以通過restful api來查看:http://192.168.1.131:15672/api/queues輸入用戶名密碼即可。

技術分享圖片 具體的api可以點擊

Message詳解

消息。服務器和應用程序之間傳送的數據,本質上就是一段數據,由Properties和Payload(body)組成。

技術分享圖片

Delivery mode:是否持久化,如果未設置持久化,轉發到queue中並未消費則重啟服務或者服務宕機則消息丟失。
Headers:頭信息,是由一個或多個健值對組成的,當固定的Properties不滿足我們需要的時候,可以自己擴展。

Properties(屬性)
content_type:傳輸協議
content_encoding:編碼方式
priority:優先級
correlation_id:rpc屬性,請求的唯一標識。
reply_to:rpc屬性,
expiration:消息的過期時間
message_id:消息的id
timestamp:消息的時間戳
...

如何保證消息的不丟失,三個地方做到持久化。

  1. Exchange需要持久化。
  2. Queue需要持久化。
  3. Message需要持久化。


作者:二月_春風
鏈接:https://www.jianshu.com/p/fc97159f31d1
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。

RabbitMQ筆記四:Binding,Queue,Message概念