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