开发者社区> 问答> 正文

使用了RabbitMq怎么防止用户重复消息生产

问题

环境是Mysql+RabbitMq +java

业务场景:用户发送请求过来,将数据写入mq,然后写入数据库,但是要求是每个用户都只能请求一次。

  • 怎么样防止用户多次请求?
  • 如果在消息消费时再验证,如果已经有数据怎么处理?
  • 怎么合理的给用户反馈信息?

展开
收起
未来团队 2020-12-02 19:57:30 1212 0
1 条回答
写回答
取消 提交回答
  • 保证消息不被重复消费的关键是保证消息队列的幂等性,这个问题针对业务场景来答分以下几点:

    1.比如,你拿到这个消息做数据库的insert操作。那就容易了,给这个消息做一个唯一主键,那么就算出现重复消费的情况,就会导致主键冲突,避免数据库出现脏数据。

    2.再比如,你拿到这个消息做redis的set的操作,那就容易了,不用解决,因为你无论set几次结果都是一样的,set操作本来就算幂等操作。

    3.如果上面两种情况还不行,上大招。准备一个第三方介质,来做消费记录。以redis为例,给消息分配一个全局id,只要消费过该消息,将<id,message>以K-V形式写入redis。那消费者开始消费前,先去redis中查询有没消费记录

    2021-02-20 14:55:12
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
RocketMQ Client-GO 介绍 立即下载
RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载