從機制上看,rabbitmq除了有topic和queue的概念,(發訊息的時候要指定訊息的key,這個key之後會做路由key使用),還有乙個概念叫做交換機exchange,exchange有四種,drdirect、fanout、topic、header。就是說發訊息給rabbitmq時,訊息需要有個key,並告知發給那個exchange,exchange收到後根據key分發或者廣播給queue,消費者從queue總取訊息,並不直接接觸到exchange。
如果沒有指定exchange,預設是direct型別的exchange,如果不指定佇列和交換機的繫結關係,預設按照訊息的key繫結對應的queue,此時發乙個訊息,訊息的key是什麼,就會被預設交換機傳送個對應的queue。
rabbitmq同樣也支援主從複製和集群。但是rabbitmq的集群非常多樣化,而且需要至少一台機器做為磁碟節點,可以持久化queue和exchange的資訊,其他的可以為記憶體節點。普通集群中,只有exchange,queue這些定義是分布在所有機器上的,而queue中的資料不是冗餘的,比如有三颱rabbitmq組成了集群,他們共享同樣的exchange,queue,但是一條訊息資料落到了第一台機器上,另外兩台實際上沒有這條資料的。 對於整個集群的使用,這樣其實沒有任何問題。 但出於高可用的角度來想,還是需要完完全全的分布式集群的,萬一中間有資料這台機器掛了? rabbitmq對此也有支援,把佇列資料也冗餘存到三颱機器上,稱之為映象佇列,但效能要比普通集群低,畢竟一條訊息被複製到其他機器上是耗時的事情。
死信佇列指的是因為某些原因,佇列中的某些訊息變成死信後,它們被重新路由到死信交換機(dlx)繫結的佇列上,該佇列即為死信佇列。
訊息變成死信佇列的原因有三種:
指的是優先順序高的可以被優先消費,但是如果生產訊息的速度遠遠趕不上消費訊息的速度,那麼在佇列中的訊息最多也只有乙個,因為如果生產出了一條訊息,就會被立馬消費,此時也就沒有優先順序的概念了。
RabbitMQ 死信 延遲佇列
死信訊息 過期訊息 在 rabbitmq 中存在2種方可設定訊息的過期時間,第一種通過對佇列進行設定,這種設定後,該佇列中所有的訊息都存在相同的過期時間,第二種通過對訊息本身進行設定,那麼每條訊息的過期時間都不一樣。如果同時使用這2種方法,那麼以過期時間小的那個數值為準。當訊息達到過期時間還沒有被消...
rabbitmq之死信佇列的應用
如果此教程對你有幫助,有錢的捧個錢場,沒錢的請捧個人場!1 背景說明 開發環境 sprint boot,rabbitmq,mysql,jdk1.8.在預生產環境中,消費者消費訊息時出現了異常,後台不斷寫日誌,一天時間日誌檔案超過了30g,導致伺服器因磁碟空間不足而宕機!2 原因分析 1 rabbit...
RabbitMq死信佇列
死信交換機有什麼用呢?在建立佇列的時候 可以給這個佇列附帶乙個交換機,那麼這個佇列作廢的訊息就會被重新發到附帶的交換機,然後讓這個交換機重新路由這條訊息。通俗的說,就是訊息產生之後,因為設定了超時時間,在這段時間內訊息沒有被消費就會被扔到死信佇列裡面。交換機名稱 private static fin...