rocketmq批量消費

rocketmq默認就是可以批量消費的,但需要設置多個參數一起配合。
我們只需要知道他是怎麼消費的,就可以很精準的設置他的批量消費參數。

我們看看DefaultMQPushConsumer源碼中的這幾個參數:

    /**
     * 消費消息線程,最小數目
     */
    private int consumeThreadMin = 20;
    /**
     * 消費消息線程,最大數目
     */
    private int consumeThreadMax = 64;
    /**
     * 拉消息間隔,如果爲了降低拉取速度,可以設置大於0的值
     */
    private long pullInterval = 0;
    /**
     * 消費一批消息,最大數
     */
    private int consumeMessageBatchMaxSize = 1;
    /**
     * 拉消息,一次拉多少條
     */
    private int pullBatchSize = 32;

rocketmq的批量消費,簡單來說就是開了一個線程池,啓動多個線程去拉數據,再回調Listener去處理。

consumeThreadMin和consumeThreadMax是這個線程池的最大最小線程數,通過設置這個可以控制每次處理的線程數。

pullInterval可以理解爲可調度線程池的時間參數,單位是秒。設置這個是爲了降低消費的次數,從而達到每批消費的個數都比較多。如果本來量就很大,就沒必要設置這個值了。

consumeMessageBatchMaxSize是一個最大消費限制參數,取值範圍是[0,1024],也就是說,rocketmq線程池中的每一個線程,一次只能拿出1024條數據。所以如果想設置批量消費,這個值也要調大。

pullBatchSize是設置一次拉多少條,很好理解。

總結

所以說,讓rocketmq批量消費,至少需要這幾個值協同處理。
舉個例子(pull模式併發消費):

consumer.setPullInterval(10000);
consumer.setConsumeThreadMin(5);
consumer.setConsumeThreadMax(10);
consumer.setConsumeMessageBatchMaxSize(1001);
consumer.setPullBatchSize(1000);

這個就是降低線程數,從而提升每次拉起的數據。
在沒有這樣配置之前,每次處理就是一條,配置了這個,每次處理就變成幾十條或幾百條。

發佈了177 篇原創文章 · 獲贊 164 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章