面试题答案
一键面试- 使用唯一消息ID:
- 原理:生产者在发送消息时,为每条消息分配一个全局唯一的ID。消费者在接收到消息后,先根据这个唯一ID检查本地是否已经处理过该消息。例如,可以将已处理消息的ID存储在数据库、缓存(如Redis)中。若发现该ID已存在,表明此消息已处理过,直接丢弃,不再重复处理;若不存在,则正常处理消息,并将该ID记录下来。这样通过对唯一ID的检查,保证相同ID的消息只被处理一次,从而实现幂等性。
- 利用数据库的唯一约束:
- 原理:假设消息处理逻辑会涉及到数据库操作,如插入数据。在数据库表中,针对关键业务字段设置唯一约束(如订单表中的订单编号字段设置为唯一)。当消费者接收到消息进行业务处理,执行数据库插入操作时,如果消息重复,由于数据库唯一约束的存在,重复插入相同关键业务数据的操作会失败(数据库会抛出异常)。消费者捕获该异常并进行相应处理(如忽略异常),保证即使消息重复,数据库中的数据也不会重复插入,实现消息处理的幂等性。