开发者社区> 问答> 正文

RocketMQ 多次发送未消费

我的 RocketMQ 发一个消息,一个客户端会拉三次,消费三次,为啥?
来源:云原生后端社区

展开
收起
Atom 2020-04-25 14:47:04 1375 0
1 条回答
写回答
取消 提交回答
  • 不保证 exactly once 语义,即不保证只消费一次,需要业务自己做幂等。RocketMQ 发送方的默认重试次数刚好是 3 次。发送一条消息时,超时时间内,如果失败了,会自动重试。第一次发送,加上 2 次重试,总共是 3 次。3 秒内,如果第一次发送失败,则进行重试,最多重试 2 次。如果 3 秒内成功了,不会抛出异常。所以虽然看起来调用了一次,实际上可能不止一次。每次重试可能是发送到不同的 broker,比较难查,如果是线上业务,一直有数据发送的话,更不容易确定。如果只是自己搭建个 broker,写个 demo 玩的话,可以通过 console,看一下发送一条消息,有几个 partition 的 offset 增加了。正常只会有一个 partition 的 offset 增加 1,这个时候说明,只发送了一次,生产者没有重复发送。以为默认大家都说的使用 consumer group。使用 consumer group 的情况下,消费者判断消息是否重复发送,可以根据 UNIQ_KEY 来判断,如果消息内容相同,UNIQ_KEY 不同,则说明可能是重复发送了。
    来源:云原生后端社区

    2020-04-25 14:47:27
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
基于RocketMQ Connect 构建全新数据流转处理平 立即下载
万亿级数据洪峰下的消息引擎——Apache RocketMQ 立即下载
万亿级数据洪峰下的消息引擎-Apache RocketMQ 立即下载