rocketmq的重試隊列和死信隊列

消費端,一直不回傳 消費的結果。rocketmq認為消息沒收到,consumer下一次拉取,broker依然會發(fā)送該消息。

所以,任何異常都要捕獲返回ConsumeConcurrentlyStatus.RECONSUME_LATER

rocketmq會放到重試隊列。

這個重試TOPIC的名字是

%RETRY%+consumergroup的名字

在控制臺上過一會就可以查到。

重試的消息在延遲的某個時間點(默認是10秒,業(yè)務可設置)后,再次投遞到這個ConsumerGroup。而如果一直這樣重復消費都持續(xù)失敗到一定次數(默認16次),就會投遞到DLQ死信隊列,此時需要人工干預了。

/**

  • Batch consumption size

*/

private int consumeMessageBatchMaxSize = 1;

/**

  • Batch pull size

*/

private int pullBatchSize = 32;

consumeMessageBatchMaxSize 是批量消費的最大條數

pullBatchSize 是每次拉取的最大條數

在broker端的

private String messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h";

參數是設置重試的時間,即第一次1s之后,第二次5s之后

為了測試,改成5s,生產環(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

死信隊列.png

這個默認的16次,可以改。但是使用DefaultMQPullConsumer才可以修改。

DefaultMQPushConsumer不能修改此值。

順便再說下,consumeMessageBatchMaxSize 這個size是消費者注冊的回調listener一次處理的消息數,默認是1.不是每次拉取的消息數(默認是32),這個不要搞混。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 分布式開放消息系統(RocketMQ)的原理與實踐 來源:http://www.lxweimin.com/p/453...
    meng_philip123閱讀 13,067評論 6 104
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 134,947評論 18 139
  • 在上一篇《RocketMQ實戰(zhàn)(一)》中已經為大家初步介紹了下RocketMQ以及搭建了雙Master環(huán)境,接下來...
    張豐哲閱讀 23,142評論 17 61
  • “ 消息隊列已經逐漸成為企業(yè)IT系統內部通信的核心手段。它具有低耦合、可靠投遞、廣播、流量控制、最終一致性等一系列...
    落羽成霜丶閱讀 4,036評論 1 41
  • 祖母是個愛美的女人,印象中的祖母總是將頭發(fā)梳的光亮,然后用簪子別著。我小的時候,祖母的頭上也總愛別著一朵花。 祖母...
    阿不思ss閱讀 660評論 2 6