什么是消息重试?如何实现?
什么是消息重试?如何实现?
消息重试,Consumer 消费消息失败后,要提供一种重试机制,令消息再消费一次。
- Consumer 会将消费失败的消息发回 Broker,进入延迟消息队列。即,消费失败的消息,不会立即消费。
- 也就是说,消息重试是构建在定时消息之上的功能。
🦅 消息重试的主要流程
- Consumer 消费失败,将消息发送回 Broker 。
- Broker 收到重试消息之后置换 Topic ,存储消息。
- Consumer 会拉取该 Topic 对应的 retryTopic 的消息。
- Consumer 拉取到 retryTopic 消息之后,置换到原始的 Topic ,把消息交给 Listener 消费。
这里,可能有几个点,胖友会比较懵逼,艿艿简单解释下:
- Consumer 消息失败后,会将消息的 Topic 修改为 %RETRY% + Topic 进行,添加 “RETRY_TOPIC” 属性为原始 Topic ,然后再返回给 Broker 中。
- Broker 收到重试消息之后,会有两次修改消息的 Topic 。
- 首先,会将消息的 Topic 修改为 %RETRY% + ConsumerGroup ,因为这个消息是当前消费这分组消费失败,只能被这个消费组所重新消费。 😈 注意噢,消费者会默认订阅 Topic 为 %RETRY% + ConsumerGroup 的消息。
- 然后,会将消息的 Topic 修改为 SCHEDULE_TOPIC_XXXX ,添加 “REAL_TOPIC” 属性为 %RETRY% + ConsumerGroup ,因为重试消息需要延迟消费。
- Consumer 会拉取该 Topic 对应的 retryTopic 的消息,此处的 retryTopic 为 %RETRY% + ConsumerGroup 。
- Consumer 拉取到 retryTopic 消息之后,置换到原始的 Topic ,因为有消息的 “RETRY_TOPIC” 属性是原始 Topic ,然后把消息交给 Listener 消费。
😈 有一丢丢复杂,胖友可以在思考思考~详细的,胖友可以看看 《RocketMQ 源码分析 —— 定时消息与消息重试》 。
具体的代码实现,可以看看 《芋道 Spring Boot 消息队列 RocketMQ 入门》的「6. 消费重试」 小节。
%23%20%E4%BB%80%E4%B9%88%E6%98%AF%E6%B6%88%E6%81%AF%E9%87%8D%E8%AF%95%EF%BC%9F%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%EF%BC%9F%0A%E6%B6%88%E6%81%AF%E9%87%8D%E8%AF%95%EF%BC%8CConsumer%20%E6%B6%88%E8%B4%B9%E6%B6%88%E6%81%AF%E5%A4%B1%E8%B4%A5%E5%90%8E%EF%BC%8C%E8%A6%81%E6%8F%90%E4%BE%9B%E4%B8%80%E7%A7%8D%E9%87%8D%E8%AF%95%E6%9C%BA%E5%88%B6%EF%BC%8C%E4%BB%A4%E6%B6%88%E6%81%AF%E5%86%8D%E6%B6%88%E8%B4%B9%E4%B8%80%E6%AC%A1%E3%80%82%0A%0A%20Consumer%20%E4%BC%9A%E5%B0%86%E6%B6%88%E8%B4%B9%E5%A4%B1%E8%B4%A5%E7%9A%84%E6%B6%88%E6%81%AF%E5%8F%91%E5%9B%9E%20Broker%EF%BC%8C%E8%BF%9B%E5%85%A5%E5%BB%B6%E8%BF%9F%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97%E3%80%82%E5%8D%B3%EF%BC%8C%E6%B6%88%E8%B4%B9%E5%A4%B1%E8%B4%A5%E7%9A%84%E6%B6%88%E6%81%AF%EF%BC%8C%E4%B8%8D%E4%BC%9A%E7%AB%8B%E5%8D%B3%E6%B6%88%E8%B4%B9%E3%80%82%0A%20%E4%B9%9F%E5%B0%B1%E6%98%AF%E8%AF%B4%EF%BC%8C%E6%B6%88%E6%81%AF%E9%87%8D%E8%AF%95%E6%98%AF%E6%9E%84%E5%BB%BA%E5%9C%A8%E5%AE%9A%E6%97%B6%E6%B6%88%E6%81%AF%E4%B9%8B%E4%B8%8A%E7%9A%84%E5%8A%9F%E8%83%BD%E3%80%82%0A%0A%F0%9F%A6%85%20%E6%B6%88%E6%81%AF%E9%87%8D%E8%AF%95%E7%9A%84%E4%B8%BB%E8%A6%81%E6%B5%81%E7%A8%8B%0A%0A1.%20Consumer%20%E6%B6%88%E8%B4%B9%E5%A4%B1%E8%B4%A5%EF%BC%8C%E5%B0%86%E6%B6%88%E6%81%AF%E5%8F%91%E9%80%81%E5%9B%9E%20Broker%20%E3%80%82%0A2.%20Broker%20%E6%94%B6%E5%88%B0%E9%87%8D%E8%AF%95%E6%B6%88%E6%81%AF%E4%B9%8B%E5%90%8E%E7%BD%AE%E6%8D%A2%20Topic%20%EF%BC%8C%E5%AD%98%E5%82%A8%E6%B6%88%E6%81%AF%E3%80%82%0A3.%20Consumer%20%E4%BC%9A%E6%8B%89%E5%8F%96%E8%AF%A5%20Topic%20%E5%AF%B9%E5%BA%94%E7%9A%84%20retryTopic%20%E7%9A%84%E6%B6%88%E6%81%AF%E3%80%82%0A4.%20Consumer%20%E6%8B%89%E5%8F%96%E5%88%B0%20retryTopic%20%E6%B6%88%E6%81%AF%E4%B9%8B%E5%90%8E%EF%BC%8C%E7%BD%AE%E6%8D%A2%E5%88%B0%E5%8E%9F%E5%A7%8B%E7%9A%84%20Topic%20%EF%BC%8C%E6%8A%8A%E6%B6%88%E6%81%AF%E4%BA%A4%E7%BB%99%20Listener%20%E6%B6%88%E8%B4%B9%E3%80%82%0A%0A%E8%BF%99%E9%87%8C%EF%BC%8C%E5%8F%AF%E8%83%BD%E6%9C%89%E5%87%A0%E4%B8%AA%E7%82%B9%EF%BC%8C%E8%83%96%E5%8F%8B%E4%BC%9A%E6%AF%94%E8%BE%83%E6%87%B5%E9%80%BC%EF%BC%8C%E8%89%BF%E8%89%BF%E7%AE%80%E5%8D%95%E8%A7%A3%E9%87%8A%E4%B8%8B%EF%BC%9A%0A%0A1.%20Consumer%20%E6%B6%88%E6%81%AF%E5%A4%B1%E8%B4%A5%E5%90%8E%EF%BC%8C%E4%BC%9A%E5%B0%86%E6%B6%88%E6%81%AF%E7%9A%84%20Topic%20%E4%BF%AE%E6%94%B9%E4%B8%BA%20%25RETRY%25%20%2B%20Topic%20%E8%BF%9B%E8%A1%8C%EF%BC%8C%E6%B7%BB%E5%8A%A0%20%22RETRY_TOPIC%22%20%E5%B1%9E%E6%80%A7%E4%B8%BA%E5%8E%9F%E5%A7%8B%20Topic%20%EF%BC%8C%E7%84%B6%E5%90%8E%E5%86%8D%E8%BF%94%E5%9B%9E%E7%BB%99%20Broker%20%E4%B8%AD%E3%80%82%0A2.%20Broker%20%E6%94%B6%E5%88%B0%E9%87%8D%E8%AF%95%E6%B6%88%E6%81%AF%E4%B9%8B%E5%90%8E%EF%BC%8C%E4%BC%9A%E6%9C%89%E4%B8%A4%E6%AC%A1%E4%BF%AE%E6%94%B9%E6%B6%88%E6%81%AF%E7%9A%84%20Topic%20%E3%80%82%0A3.%20%E9%A6%96%E5%85%88%EF%BC%8C%E4%BC%9A%E5%B0%86%E6%B6%88%E6%81%AF%E7%9A%84%20Topic%20%E4%BF%AE%E6%94%B9%E4%B8%BA%20%25RETRY%25%20%2B%20ConsumerGroup%20%EF%BC%8C%E5%9B%A0%E4%B8%BA%E8%BF%99%E4%B8%AA%E6%B6%88%E6%81%AF%E6%98%AF%E5%BD%93%E5%89%8D%E6%B6%88%E8%B4%B9%E8%BF%99%E5%88%86%E7%BB%84%E6%B6%88%E8%B4%B9%E5%A4%B1%E8%B4%A5%EF%BC%8C%E5%8F%AA%E8%83%BD%E8%A2%AB%E8%BF%99%E4%B8%AA%E6%B6%88%E8%B4%B9%E7%BB%84%E6%89%80%E9%87%8D%E6%96%B0%E6%B6%88%E8%B4%B9%E3%80%82%F0%9F%98%88%20%E6%B3%A8%E6%84%8F%E5%99%A2%EF%BC%8C%E6%B6%88%E8%B4%B9%E8%80%85%E4%BC%9A%E9%BB%98%E8%AE%A4%E8%AE%A2%E9%98%85%20Topic%20%E4%B8%BA%20%25RETRY%25%20%2B%20ConsumerGroup%20%E7%9A%84%E6%B6%88%E6%81%AF%E3%80%82%0A4.%20%E7%84%B6%E5%90%8E%EF%BC%8C%E4%BC%9A%E5%B0%86%E6%B6%88%E6%81%AF%E7%9A%84%20Topic%20%E4%BF%AE%E6%94%B9%E4%B8%BA%20SCHEDULE_TOPIC_XXXX%20%EF%BC%8C%E6%B7%BB%E5%8A%A0%20%22REAL_TOPIC%22%20%E5%B1%9E%E6%80%A7%E4%B8%BA%20%25RETRY%25%20%2B%20ConsumerGroup%20%EF%BC%8C%E5%9B%A0%E4%B8%BA%E9%87%8D%E8%AF%95%E6%B6%88%E6%81%AF%E9%9C%80%E8%A6%81%E5%BB%B6%E8%BF%9F%E6%B6%88%E8%B4%B9%E3%80%82%0A5.%20Consumer%20%E4%BC%9A%E6%8B%89%E5%8F%96%E8%AF%A5%20Topic%20%E5%AF%B9%E5%BA%94%E7%9A%84%20retryTopic%20%E7%9A%84%E6%B6%88%E6%81%AF%EF%BC%8C%E6%AD%A4%E5%A4%84%E7%9A%84%20retryTopic%20%E4%B8%BA%20%25RETRY%25%20%2B%20ConsumerGroup%20%E3%80%82%0A6.%20Consumer%20%E6%8B%89%E5%8F%96%E5%88%B0%20retryTopic%20%E6%B6%88%E6%81%AF%E4%B9%8B%E5%90%8E%EF%BC%8C%E7%BD%AE%E6%8D%A2%E5%88%B0%E5%8E%9F%E5%A7%8B%E7%9A%84%20Topic%20%EF%BC%8C%E5%9B%A0%E4%B8%BA%E6%9C%89%E6%B6%88%E6%81%AF%E7%9A%84%20%22RETRY_TOPIC%22%20%E5%B1%9E%E6%80%A7%E6%98%AF%E5%8E%9F%E5%A7%8B%20Topic%20%EF%BC%8C%E7%84%B6%E5%90%8E%E6%8A%8A%E6%B6%88%E6%81%AF%E4%BA%A4%E7%BB%99%20Listener%20%E6%B6%88%E8%B4%B9%E3%80%82%0A%0A%F0%9F%98%88%20%E6%9C%89%E4%B8%80%E4%B8%A2%E4%B8%A2%E5%A4%8D%E6%9D%82%EF%BC%8C%E8%83%96%E5%8F%8B%E5%8F%AF%E4%BB%A5%E5%9C%A8%E6%80%9D%E8%80%83%E6%80%9D%E8%80%83~%E8%AF%A6%E7%BB%86%E7%9A%84%EF%BC%8C%E8%83%96%E5%8F%8B%E5%8F%AF%E4%BB%A5%E7%9C%8B%E7%9C%8B%20%5B%E3%80%8ARocketMQ%20%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%20%E2%80%94%E2%80%94%20%E5%AE%9A%E6%97%B6%E6%B6%88%E6%81%AF%E4%B8%8E%E6%B6%88%E6%81%AF%E9%87%8D%E8%AF%95%E3%80%8B%5D(http%3A%2F%2Fwww.iocoder.cn%2FRocketMQ%2Fmessage-schedule-and-retry%2F)%20%E3%80%82%0A%0A%E5%85%B7%E4%BD%93%E7%9A%84%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0%EF%BC%8C%E5%8F%AF%E4%BB%A5%E7%9C%8B%E7%9C%8B%20%E3%80%8A%E8%8A%8B%E9%81%93%20Spring%20Boot%20%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97%20RocketMQ%20%E5%85%A5%E9%97%A8%E3%80%8B%E7%9A%84%E3%80%8C6.%20%E6%B6%88%E8%B4%B9%E9%87%8D%E8%AF%95%E3%80%8D%20%E5%B0%8F%E8%8A%82%E3%80%82