目录
在 RocketMQ 中,消息的重试是保证消息可靠性的重要机制之一。当消息发送失败或消费失败时,RocketMQ 会自动触发重试机制,确保消息最终能够成功发送或消费。以下是 RocketMQ 中处理消息重试的详细方法和最佳实践:
1. 消息重试的场景
1.1 生产者发送消息失败
-
网络异常:生产者与 Broker 之间的网络问题导致消息发送失败。
-
Broker 不可用:Broker 宕机或负载过高,无法处理消息。
-
消息过大:消息大小超过 Broker 的配置限制。
1.2 消费者消费消息失败
-
业务逻辑异常:消费者处理消息时抛出异常。
-
网络异常:消费者与 Broker 之间的网络问题导致消息消费失败。
-
资源不足:消费者资源(如数据库连接、线程池)不足,无法处理消息。
2. RocketMQ 的重试机制
2.1 生产者重试
-
同步发送重试:
-
生产者发送消息后,如果未收到 Broker 的确认响应,会自动重试发送。
-
默认重试次数为 2 次,可以通过
retryTimesWhenSendFailed参数配置。
-
-
异步发送重试:
-
异步发送失败时,生产者会在回调函数中收到异常,并可以选择重试。
-
-
事务消息重试:
-
如果事务消息的半消息发送失败,生产者会重试发送。
-
2.2 消费者重试
-
消费失败重试:
-
如果消费者消费消息失败(如抛出异常),RocketMQ 会将该消息重新投递。
-
默认重试次数为 16 次,重试间隔逐渐增加。
-
-
重试队列:
-
消费失败的消息会被放入重试队列(%RETRY% + ConsumerGroup)。
-
重试队列的消息会按照重试间隔重新投递给消费者。
-
-
死信队列:
-
如果重试次数用尽,消息会被放入死信队列(%DLQ% + ConsumerGroup),供人工处理。
-

最低0.47元/天 解锁文章
737

被折叠的 条评论
为什么被折叠?



