rocketmq的重试队列和死信队列

消费端,一直不回传 消费的结果。rocketmq认为消息没收到,consumer下一次拉取,broker依然会发送该消息。

所以,任何异常都要捕获返回ConsumeConcurrentlyStatus.RECONSUME_LATER

rocketmq会放到重试队列。

这个重试TOPIC的名字是

%RETRY%+consumergroup的名字

在控制台上过一会就可以查到。

重试的消息在延迟的某个时间点(默认是10秒,业务可设置)后,再次投递到这个ConsumerGroup。而如果一直这样重复消费都持续失败到一定次数(默认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,生产环境不要改

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),这个不要搞混。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 分布式开放消息系统(RocketMQ)的原理与实践 来源:http://www.jianshu.com/p/453...
    meng_philip123阅读 13,081评论 6 104
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 在上一篇《RocketMQ实战(一)》中已经为大家初步介绍了下RocketMQ以及搭建了双Master环境,接下来...
    张丰哲阅读 23,147评论 17 61
  • “ 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列...
    落羽成霜丶阅读 4,045评论 1 41
  • 祖母是个爱美的女人,印象中的祖母总是将头发梳的光亮,然后用簪子别着。我小的时候,祖母的头上也总爱别着一朵花。 祖母...
    阿不思ss阅读 660评论 2 6