2022年5月14日 作者 zeroheart

消息队列丟消息、重复消费、顺序消费

1.丢消息

使用带回掉的发送方法,增加reties机制、增加acks等

2.消费端,防止丢消息

对于kafka,可以增加一个逻辑,保存消费的记录,消费完之后手动提交,如果消费过程中有挂掉的情况,重新拉取消息,允许小部分消息重复消费,不过下游做好幂等就行。

幂等性,可以redis使用单号+状态来做唯一的key,当然主要还是数据库端处理。

3.顺序消费

对于一些顺序消费的场景,主要的做法应该就是需要把要保持顺序的消息发送到相同的patition分区,这样就能保证了。

如果不这样做的话,那就在消费端做处理,比如增加多个状态,如支付、发消息、退货等字段分开,哪个先到无所谓,最终保持状态一致。

参考:Kafka丢数据、重复消费、顺序消费的问题 – Java3y – 博客园 (cnblogs.com)