消费端,一直不回传 消费的结果。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
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。