消息消耗时间超过15分钟,可以在重试主题中生成两条相同的消息
当消息被消耗超过15分钟时 org.apache.rocketmq.client.impl.consumer.ProcessQueue#cleanExpiredMsg此方法扫描并找到,将此消息发送到重试主题并将其从缓存中删除。
但这条消息仍然是消费者的。最后,在org.apache.rocketmq.client.customer.listener.MessageListenerConcurrently#consumerMessage这个方法中,如果返回成功或失败,这个消息将被消耗多次。
原提问者GitHub用户panzhi33
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
RocketMQ保证了消息一定投递且不丢失,但不保证消息不会重复。RocketMQ把解决消息重复的工作交给了用户。
解决消息重复主要有两种方法:第一种方法是保证消费逻辑的幂等性(多次调用和一次调用相同);另一种方法是维护一个已经消费消息的记录,消费前查询这个消息是否被消费过。
原回答者GitHub用户MountainOne
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。