1. 程式人生 > >RocketMQ消費批拉超過32不生效

RocketMQ消費批拉超過32不生效

說明

由於一些原因,我需要RocketMQ消費的時候,一批拉400條,一批處理400條。設定如下:

image

為了簡單驗證是否正確,消費如下:

image

直接通過列印msgs.size()觀察情況即可。

現象

實驗的topic裡面的訊息數量很多很多,但是啟動消費端,消費端的日誌如下:

image

奇怪啦,明明已經進行了修改

image

為什麼還是每次只能消費32條呢?

除錯RocketMQ原始碼

通過跟蹤consumer程式碼:

image

這裡的確已經設定為400了,那麼我們需要跟蹤到broker服務端進行查看了。

image

broker接受到的也是400,我們只有繼續跟蹤

image

因為返回為true導致下面的if判斷成立,for迴圈就break了,所有隻取了32條資料返回到consumer了:

image

image

如果需要讓可以一次拉取400條,需要修改broker這裡的資料配置才可(其實關於一條訊息大小也是類似的,雖然說最大設定16M,但是也是和這裡同理需要設定broker相關的資料配置才可生效)。

修改broker的配置檔案,新增:maxTransferCountOnMessageInMemory=400 重啟broker即可,效果如下:

image

效果正常,其實如果訊息過大,還需要考慮下面幾個引數:

image

總結

需要RocketMQ消費的時候,一批拉400條,一批處理400條。設定如下:

image

還是達不到效果的,還需要設定broker相關的引數,本次裡面設定broker的maxTransferCountOnMessageInMemory=400即可,其他情況需要考慮如下等引數。

image

文章github原始碼地址:rocketmq,或者公號回覆“rocketmq”獲取原始碼地址。


如果讀完覺得有收穫的話,歡迎點贊、關注、加公眾號【匠心零度】,查閱更多精彩歷史!!!

img