验证RocketMQ默认重试

编程入门 行业动态 更新时间:2024-10-09 21:29:01

验证RocketMQ默认<a href=https://www.elefans.com/category/jswz/34/1771334.html style=重试"/>

验证RocketMQ默认重试

验证RocketMQ默认重试

背景:线上有丢消息(无重试)的情况。经过排查,是因为并发时会有一个消息消费失败,但没有进行重试。检查配置无误后决定升级MQ版本。在升级版本前后经过下面的验证。发现新版MQ重试没问题,而老版MQ存在兼容问题而不能重试消息。

先说下结论,后边事对此结论的验证:
RocketMQ的默认重试次数为16次,且默认重试间隔时间为(1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h)

一、环境说明

老版MQ版本:V4_4_0
新版MQ版本:V4_9_3
java

二、java代码

1.生产者

@RestController
@Api(value = "测试服务", description = "测试服务")
@RequestMapping(value = "/test", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class TestController {private final static Logger logger = LoggerFactory.getLogger(TestController.class);@Resource(name = "testReconsumProducer")private MqNormalProducer testReconsumProducer;@RequestMapping(value = "/testReconsumProducer")public Result<String> testReconsumProducer() {Result<String> result = Result.instance();String msgId = null;// 消息体当前时间MqMessage mqMessage = new MqMessage("testMessage,time:" + TimeUtils.parseDate(TimeUtils.currentTime()));// 发消息RocketSendResult rocketResult = (RocketSendResult) testReconsumProducer.sendMsg(mqMessage);// 获取消息的msgidmsgId = rocketResult.getSendResult().getMsgId();// 生产者日志打印(因为测试的集群环境,为方便跟踪,使用slf4j记录)logger.error("{}生产者,测试MQ重试,rocketResult:{}", rocketResult.getSendResult().getMsgId(), JSON.toJSONString(rocketResult));result.setData(msgId);return result;}
}

2.消费者

@Service("testReconsumeEventHandler")
public class TestReconsumeEventHandler implements MqListener {private final static Logger logger = LoggerFactory.getLogger(TestReconsumeEventHandler.class);@Overridepublic MqAction consume(MqMessage mqMessage, MqConsumeContext mqConsumeContext) {// 获取消息(因为做了抽象,所以才需要强转)RocketMessage rocketMessage = (RocketMessage) mqMessage;// 消费者日志打印(第一次消费会打印一次,其余每重试一次会打印一次,预计1+16次)logger.error("{}消费者,测试MQ重试,重新消费:{}", rocketMessage.getOriginMessage().getMsgId(), JSON.toJSONString(rocketMessage));// 直接进行重发消息return MqAction.ReconsumeLater;}
}

三、执行结果

经过查看日志。消费者一共打印了17次(1次正常消费,16次重试消费)。
注: 因为打印的时候记录了消息id,所以在kibana上查看日志的时候直接匹配此字符串进行塞选。

四、结论

RocketMQ的默认重试次数为16次,且默认重试间隔时间为(1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h)

更多推荐

验证RocketMQ默认重试

本文发布于:2024-03-12 10:43:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1731329.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:重试   RocketMQ

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!