消費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