1. 程式人生 > >消費RabbitMQ時的注意事項,如何禁止大量的訊息湧到Consumer

消費RabbitMQ時的注意事項,如何禁止大量的訊息湧到Consumer

按照官網提供的訂閱型寫法( Retrieving Messages By Subscription ("push API")) 我發現,RabbitMQ伺服器會在短時間內傳送大量的訊息給Consumer,然後,如果你沒有來得及Ack的話,那麼服務端會積壓大量的UnAcked訊息,而Consumer如果來不急處理也會處於假死(也可能引起程式崩潰)。

僅有兩個Channel,結果積壓了大量的UnAcked訊息。

這明顯是與我們的目的不一致,我們不能保證Consumer一 定會急時快速的處理訊息。所以這種方式帶來的後果就是Consmer崩潰後,UnAcked訊息又ReQueue,這肯定會消耗MQ的寶貴資源。

我試圖在官網上找到一種方法,讓每條訊息明確的Ack後再接受下一條。但是好沒有。好在在 gitbooks.io/rabbitmq-quick/ 這兒找到了,通過設定Channel的QOS即可

1 2 var channel = Connect.CreateModel(); channel.BasicQos(0,1,false); //RabbitMQ客戶端接受訊息最大數量

 設定後的結果:

在開啟4個Consumer的情況下,每條訊息處理要耗時2秒。然後問題解決了。Unacked的訊息只有4個。

相關推薦

消費RabbitMQ注意事項如何禁止大量訊息Consumer保證執行緒安全

按照官網提供的訂閱型寫法( Retrieving Messages By Subscription ("push API")) 我發現,RabbitMQ伺服器會在短時間內傳送大量的訊息給Consumer,然後,如果你沒有來得及Ack的話,那麼服務端會積壓大量的UnAcked訊息,而Cons

消費RabbitMQ注意事項如何禁止大量訊息Consumer

按照官網提供的訂閱型寫法( Retrieving Messages By Subscription ("push API")) 我發現,RabbitMQ伺服器會在短時間內傳送大量的訊息給Consumer,然後,如果你沒有來得及Ack的話,那麼服務端會積壓大量的UnAcked

安裝windows和ubuntu雙系統安裝ubuntu注意事項

1.允許安裝第三方軟體圖形、硬體以及是否聯網更新(可選也可不選) 2.引導驅動裝置應選全盤即/dev/sda即可------這是Ubuntu的grub2引導;如果將引導驅動裝置放入分好的/boot區,則是由Windows引導。 3.當更新windows或者Ubuntu時,造成開機無法進入即找不到引導

0到3個月的寶寶護理重點和注意事項家長要記住哦

寶寶從出生的那一天開始每個月都是有不同的變化,而且會隨著寶寶的成長,有些月份會新增一些寶寶的相關護理的要點和注意事項。當然不管是哪個月照顧寶寶的任何方面都是需要細心和耐心的,下面相關的一些護理要點僅供家長們參考,畢竟每個寶寶都是獨一無二的,每個家庭在寶寶的養育方面都是不一樣的。 1個月的寶

Android Sqlite資料庫升級注意事項

在app版本升級時,同時升級了Sqlite資料庫的版本號的話,如果需要保留之前的資料,需要在onUpgrade方法中做處理。這裡記錄一下在onUpgrade處理升級的時候的一些注意事項。 先看下常用的SQLiteOpenHelper的方法: public class Database

有關mycat一些操作注意事項自己慢慢記錄

關於查詢操作 報錯com.alibaba.druid.sql.parser.ParserException: ERROR. token : FROM, pos : 14 在mycat進行查詢的時候,不可以用* 進行查詢,必須新增欄位名進行查詢,否則會 報錯 com.a

.NET MVC和.NET WEB api混用注意事項

1、同時配置了mvc路由和api路由時,mvc路由無法訪問(呼叫所有mvc路由全部404錯誤) 在Global.asax中,需注意路由註冊的順序,將api路由註冊放在最後: 即將 void Application_Start(object sender, EventArgs e)

python socket.connect注意事項埠應為int型

import socket def port_status(ip,port): server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: server.connect((ip,port

vue之watch監聽物件或者一個值注意事項(深度觀察deep:true慎用!)

vue中想在某個值改變的時候能夠做一些其他事情,可以使用其提供的監聽機制,使用watch。注意,本篇不講技術問題,只是講解如何應用,因為筆者也是一個前端的小白 例:經手專案中就有使用,截圖如下: 下面來分析上面分別是怎樣實現監聽的: 其實除了畫紅線的地方,別的都沒什

FPGA nios編寫LCD12864的驅動程式過程以及注意事項本人親自踩坑重要!!!

LCD12864引腳如下: FPGA開發板得提供,3.3v電壓,5v電壓,普通io都是3.3v電壓 DB:資料腳,得用雙向io,因為程式裡面需要讀取液晶的應答(普通io3.3v可以) E: 輸出引

對比這10個注意事項你的網頁文字排版達標了麼?

 編輯 : 陳子木  閱讀本文需 8 分鐘 優設投稿入口 對於網頁而言,視覺資訊的傳達至關重要。使用者通過頁面獲取資訊,文字、圖片、圖示、按鈕、表單等UI元素都承載著不同型別的資訊。在這其中,文字的作用尤其巨大。排版設計

POI操作EXCEL追加或覆蓋資料輸入輸出流注意事項jar包的選擇

首先有兩種資料格式,如果只是為用表格,那麼用xls格式就夠用了。但如果你還用得到XML的東西,那麼需要用xlsx這個格式。 實現程式碼很簡單。 2017.9.22補充: 1.一定要在XSSFWorkbook用輸入流當成建構函式引數建立新物件後,再使用輸入流。如果直接先把輸入

ovirt掛載多儲存環境注意事項

我的測試環境如下 default資料中心+default叢集+NFS儲存 default叢集有node1和node2 新建FC叢集,並加入node3,然後掛載fc儲存 node1和node2沒有hba卡,並未連線到儲存,隸屬於不同叢集,但還是會報錯,看來儲存在同一資料中心

使用Spring + quartz叢集持久化注意事項

1、持久化時未序列化異常 java.io.NotSerializableException: Unable to serialize JobDataMap for insertion into database because the value of property '

linux中級進階01--linux分割槽的注意事項特殊目錄pwd,mkdir命令再次介紹以及執行檔案路徑的變數: PATH

1.不可與根目彔(/)放置到不同的 partition 中的目錄。   /etc(配置檔案), /bin(一般身份可用執行檔案)   /dev(裝置檔案)   /lib(執行檔的函式庫或核心模組等)    /sbin(系統管理員可用指令) 2.根目彔要小一點比較好   /home, /usr, /var,

mybatis寫xml注意事項

mybatis寫xml時注意事項: 1. 如果資料庫欄位中有關鍵字,使用`關鍵字`,最好是隻要是欄位就用``符號,可以減少很多錯誤 2. 如果更新的欄位中有 時間戳,更新時,使用如下(加上jdbcType可以防止出錯): <if test="updateTime !=null"> &

微信支付服務商模式(受理機構模式)開發注意事項jsapi支付

1.首先下載的demo,一般都是有些bug的,先要改一下。 2.微信貌似沒有為服務商模式單獨開發demo,下載的也都是普通商戶的支付demo,其實這裡沒有必要單獨寫,因為他們區別就是幾個引數的區別。 (0)demo裡設定的引數全部都要填服務商的,而不是子商戶的。 (1)第一

JAVA中在main函式中呼叫變數注意事項

在下面這段程式碼中會報錯 [java] view plain copy print?System.out.println(s1);  System.out.println(s1);Cannot make a static reference to the non-static field s1 只要把

Centos7上安裝python3.7--步驟注意事項以及常見的出錯

Centos7安裝python3.7 由於python2和python3在很大程度上有些不同,因為需要,就以決定安裝python3.x的版本,但由於Centos上自安裝的就是pyhton2.6.所以在安裝python3.7的時候,最好不要將原有的python刪

C/C++常用巨集定義注意事項巨集中#和##的用法

總結下巨集和函式的不同之處,以供大家寫程式碼時使用,這段總結摘自《C和指標》一書。 當然巨集定義非常重要的,它可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。 下面列舉一些成熟軟體中常用得巨集定義 1,防止一個頭檔案被重複包含 #ifndef COMDEF_H