假設rabbitmq伺服器有上萬條未處理訊息,隨便開啟乙個消費端,會造成巨量訊息瞬間全部推送過來,然而我們單個客戶端無法同時處理這麼多資料。
還比如說單個pro一分鐘產生了幾百條資料,但是單個con一分鐘可能只能處理60條,這時pro-con不平衡。通常pro沒辦法做限制,所以con就需要做一些限流措施,否則如果超出最大負載,可能導致con效能下降,伺服器卡頓甚至崩潰。
因此,我們需要con限流。
rabbitmq提供了一種qos (服務質量保證)功能,在非自動確認訊息的前提下,若一定數目的訊息 (通過基於con或者channel設定qos的值) 未被確認前,不消費新的訊息。
不能設定自動簽收功能(autoack = false)請求特定設定「服務質量(quality of service)」。 這些設定強加資料的伺服器將需要確認之前,為消費者傳送的訊息數量限制。 因此,他們提供消費者發起的流量控制的一種手段。如果訊息未被確認,就不會到達con,目的就是給pro減壓
;
prefetchsize和global這兩項,rabbitmq沒有實現,不研究prefetchcount在
autoack=false
的情況下生效,即在自動應答的情況下該值無效,所以必須手工ack。
void
basicack
(integer deliverytag,boolean multiple)
呼叫該方法就會主動回送給broker乙個應答,表示這條訊息我處理完了,你可以給我下一條了。引數multiple表示是否批量簽收,由於我們是一次處理一條訊息,所以設定為false。 如何用RabbitMQ實現延遲佇列
利用外掛程式實現延遲佇列 總結在jdk的juc工具包中,提供了一種延遲佇列delayqueue。延遲佇列用處非常廣泛,比如我們最常見的場景就是在網購或者外賣平台中發起乙個訂單,如果不付款,一般15分鐘後就會被關閉,這個直接用定時任務是不好實現的,因為每個使用者下單的時間並不確定,所以這時候就需要用到...
如何用RabbitMQ實現延遲佇列
在jdk的juc工具包中,提供了一種延遲佇列delayqueue。延遲佇列用處非常廣泛,比如我們最常見的場景就是在網購或者外賣平台中發起乙個訂單,如果不付款,一般15分鐘後就會被關閉,這個直接用定時任務是不好實現的,因為每個使用者下單的時間並不確定,所以這時候就需要用到延遲佇列。延遲佇列本身也是佇列...
如何用Redis做LRU Cache
lru least recently used 最近最少使用演算法是眾多置換演算法中的一種。redis中有乙個maxmemory概念,主要是為了將使用的記憶體限定在乙個固定的大小。redis用到的lru 演算法,是一種近似的lru演算法。上面已經說過maxmemory是為了限定redis最大記憶體使...