在使用mq消息队列的时候,如何保证消费者不会重复处理相同的消息?

提问者:Rae 问题分类:消息队列

在使用mq消息队列的时候,系统有可能会出现宕机,同时生产者也有可能会涉及到重复发送消息,那么我们如何保证消费者不会重复处理相同的消息呢?

1 个回答
帅平
帅平

这个问题其实也主要考虑消息的幂等性问题即可。有以下几种情况:

1、如果当前的数据没有业务上的影响,例如日志的数据,那么我们可以在发送端为每一条数据做一个唯一的全局id,随着消息一起拼凑成一条数据然后发送出去,消费者可以根据布隆过滤器直接过滤掉已经处理过的数据。

2、如果当前的数据和业务有简单关联,例如生产者生产订单,消费者修改订单状态,那么这个订单id本身可以作为一个全局的id进行处理,消费者在处理之前可以先查以下对应订单号是否有处理过,如果处理过,则不需要再处理了。

常见的幂等性的处理总体思路就是上面两个,设计到的工具一般有:

1、redis
2、数据库
3、布隆过滤器
等等。

发布于:2个月前 (10-18)
我来回答