RabbitMQ重复消费-创新互联

造成重复消费的原因:

成都创新互联专注于惠济网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供惠济营销型网站建设,惠济网站制作、惠济网页设计、惠济网站官网定制、小程序开发服务,打造惠济网络公司原创品牌,更为您提供惠济网站排名全网营销落地服务。

MQ向消费者推送message,消费者向MQ返回ack,告知所推送的消息消费成功。但是由于网络波动等原因,可能造成消费者向MQ返回的ack丢失。MQ长时间(一分钟)收不到ack,于是会向消费者再次推送该条message,这样就造成了重复消费。

解决重复消费的办法:

用从存储(redis或者mysql)记录一下已经消费的message的id,当message被消费前先去存储中查一下消费记录,没有该条message的id则正常消费返回ack,有该条message的id的话不用消费直接返回ack给MQ。

当然实际生产中的话选用redis是比较好的选择,毕竟查mysql要进行磁盘IO,效率要低得多,而且绝大多数重复消费都是由于MQ没有收到消费者的ack于是造成MQ再次向消费者进行同一条message的投递。所以message的消费记录其实我们并不需要一直记录,只需要保存一段时间,当下次投递过来的时候消费者能查到消费记录然后准确返回ack给MQ就行。

以下是一个使用redis解决重复消费的示例步骤:

  1. 监听器接收MQ队列中的数据。
  2. 利用redis的setnx命令,以消息唯一id为key,以消息内容为value,超时时间设置为10分钟,存入redis中。
  3. 如果能够成功存入,说明没有重复消费,则处理业务,处理完业务后返回ack或者nack确认。
  4. 如果存不进去,则说明重复消费,直接返回ack确认的回调信息就可以了。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站名称:RabbitMQ重复消费-创新互联
文章分享:http://myzitong.com/article/dsogph.html