确保消息只能被处理一次。
1、消息的幂等性
确保消息处理方法是幂等的,处理相同的消息多次不会导致不同的结果
2、消息确认机制
消费者处理完消息后,显式地向RabbitMQ发送一个确认(ACK)。
如果RabbitMQ没有收到这个确认,那么会认为消息没有被处理,会重新投递该消息给其他消费者。
3、消息持久化与日志记录
将已处理的消息存储到数据库或Redis中 。
Redis:setnx (只有当键不存在时候才设置键的值)
在处理新消息时,先检查 该消息是否已经被处理过,避免重复处理。
4、使用唯一消息ID
可以在发送消息时,通过UUID 这样的机制生成唯一的ID。
给个消息带上唯一ID,将唯一ID存入数据库中,当处理消息时,首先检查这个ID是否已经被处理过,如果是则跳过。