RabbitMQ知識點總結

2021-09-11 07:00:46 字數 1642 閱讀 5144

1、 常用埠: 5672 用於常規連線  5671用於tls連線

2、佇列

(1)佇列的長度是有限的,佇列和訊息由ttl(time to live   存活時間).這兩個功能可以用於資料過期,並且可以設定佇列最多可以使用多少資源。 這個功能可以設定訊息的延遲載入(下面詳細介紹)。

(2)訊息訂閱: 佇列是有序的訊息集合,訊息以fifo方式進出佇列(先進先出)

(3)永續性: 宣告佇列的時候,第二個引數可以設定佇列的永續性,如果為true則會將佇列持久化到磁碟中,否則不持久化

佇列的持久化並不使其中訊息也持久化。所以要做到真正的高可靠性的持久化的辦法是佇列和訊息都持久化

3、 通道: 提供大部分的協議操作。

為了執行緒的安全不要共享通道,應該乙個執行緒對應乙個通道。盡量使用通道池 spring amqp中可以實現

4、 網路故障自動恢復過程

連線恢復: 重新連線----恢復連線*** -----重新開啟  通道 ----恢復通道***----恢復通道的basic.qos,發布者確認和交易設定

拓撲恢復(恢復通道):重新宣告交換器----重新宣告佇列-----恢復所有繫結----恢復所有消費者

5、多消費者時訊息分發

緣起:佇列的優勢就是並行處理,如果加壓了大量的訊息,就得增加消費者

迴圈分發: 是按次序分發,比如有兩個消費者,輪流給兩個消費者傳送訊息。 訊息:1 2 3 4 5 6   消費者1將接收到1 3 5   消費者2接收到 2 4 6 。兩個消費者接收的訊息數量是一樣的。這樣如果某些訊息比較大,會導致乙個消費者繁忙,另乙個消費者空閒,造成資源浪費,也降低了速度。原因rabbitmq 只是當訊息進入佇列時就分發出去,而沒有檢視每個工作者未返回確認資訊的數量。

6 訊息確認機制

為了保證訊息不丟失,所以rabbitmq支援訊息確認機制。mq給消費者傳送一條訊息,消費者處理完這個訊息後,將會給mq返回乙個訊息確認: 我已經成功的處理完了,你可以刪除它了。如果有其他消費者,就會將該條訊息傳送到其他消費者手中。

但是這樣可能會出現訊息重**送的問題,可以利用等冪處理

8、佇列、訊息持久化

如果消費者掛掉了,可以利用訊息確認機制保證訊息的準確性。 但是伺服器掛掉了,則會丟掉所有的佇列和訊息。所以就要使用到佇列的持久化和訊息的持久化,將訊息和佇列持久會到磁碟中。 

如果乙個消費者在返回確認訊息前死亡,mq則認為該訊息並沒有完全處理完,將會把這條訊息重新放入佇列中,

9、實現訊息的延遲載入

使用佇列的長度限制和訊息存活時間(ttl)、兩個佇列。 生產者將訊息傳送到第乙個佇列中,該佇列沒有消費者去監聽。給其設定過期時間,比如過我要將這個訊息延遲60秒傳送,則設定過期時間為六十秒,過了六十秒則該訊息會被置入死信佇列中,也就時第二個佇列,死信佇列時被消費者監聽的,死信佇列一有訊息就會被消費者監聽到。這樣就實現了延遲處理。

還有一種比較簡單的方法,是使用乙個延遲外掛程式rabbitmq_delayed_message_exchange

10 rabbitmq的主要組成

connection 連線

channel 通道

exchange 交換器

bind 繫結 從交換器到佇列的動態繫結的過程

queue 佇列

***生產者、消費者

11 rabbitmq的主要作用

解耦、 削峰填谷、解決生產者和消費者的效能差

知識點總結

1,迴圈中的中斷 continue 跳出此次迴圈,繼續for迴圈 break 跳出當前for迴圈 return 跳出當前方法 2,字串的操作 componentseparatedbystring stringbyreplacingoccurencesofstring withstring iskin...

知識點總結

oncreate onstrat onresume onpause onstop onrestart ondestroy standard 啟動activity都會產生乙個新的activity 預設模式 singletop 啟動activity允許多個,但不允許重疊 singletask 只允許有乙...

知識點總結

function go go 呼叫 go為變數名 setinterval go,1000 1000ms clearinterval 關閉定時器 function abc a,b 2,3 5undefined 未定義 null 空 nan 非數值 string 字串 var a 123 數字型別 va...