RabbitMQ筆記四:Binding,Queue,Message概念
阿新 • • 發佈:2018-10-17
let 保留 dea 參數 def str 所有 刪除元素 live
作者:二月_春風
鏈接:https://www.jianshu.com/p/fc97159f31d1
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。
Binding詳解
黃線部分就是bindingExchange
與Exchange
,Queue
之間的虛擬連接,Binding
中可以包含Routing key
或者參數
註意:
- 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
輸入用戶名密碼即可。
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:消息的時間戳
...
如何保證消息的不丟失,三個地方做到持久化。
- Exchange需要持久化。
- Queue需要持久化。
- Message需要持久化。
作者:二月_春風
鏈接:https://www.jianshu.com/p/fc97159f31d1
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。
RabbitMQ筆記四:Binding,Queue,Message概念