消費(fèi)端,一直不回傳 消費(fèi)的結(jié)果萍桌。rocketmq認(rèn)為消息沒收到,consumer下一次拉取凌简,broker依然會發(fā)送該消息上炎。
所以,任何異常都要捕獲返回ConsumeConcurrentlyStatus.RECONSUME_LATER
rocketmq會放到重試隊(duì)列雏搂。
這個重試TOPIC的名字是
%RETRY%+consumergroup的名字
在控制臺上過一會就可以查到藕施。
重試的消息在延遲的某個時間點(diǎn)(默認(rèn)是10秒,業(yè)務(wù)可設(shè)置)后凸郑,再次投遞到這個ConsumerGroup裳食。而如果一直這樣重復(fù)消費(fèi)都持續(xù)失敗到一定次數(shù)(默認(rèn)16次),就會投遞到DLQ死信隊(duì)列芙沥,此時需要人工干預(yù)了诲祸。
/**
Batch consumption size
*/
private int consumeMessageBatchMaxSize = 1;
/**
Batch pull size
*/
private int pullBatchSize = 32;
consumeMessageBatchMaxSize 是批量消費(fèi)的最大條數(shù)
pullBatchSize 是每次拉取的最大條數(shù)
在broker端的
private String messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h";
參數(shù)是設(shè)置重試的時間,即第一次1s之后而昨,第二次5s之后
為了測試救氯,改成5s,生產(chǎn)環(huán)境不要改
messageDelayLevel = 5s 5s 5s 5s 5s 5s 5s 5s 5s 5s 5s 5s 5s 5s 5s 5s 5s 5s
16次之后配紫,多了一個topic
名為
%DLQ%+consumergroup
死信隊(duì)列.png
這個默認(rèn)的16次径密,可以改。但是使用DefaultMQPullConsumer才可以修改躺孝。
DefaultMQPushConsumer不能修改此值享扔。
順便再說下底桂,consumeMessageBatchMaxSize 這個size是消費(fèi)者注冊的回調(diào)listener一次處理的消息數(shù),默認(rèn)是1.不是每次拉取的消息數(shù)(默認(rèn)是32)惧眠,這個不要搞混籽懦。