2022年5月14日
消息队列丟消息、重复消费、顺序消费
1.丢消息
使用带回掉的发送方法,增加reties机制、增加acks等
2.消费端,防止丢消息
对于kafka,可以增加一个逻辑,保存消费的记录,消费完之后手动提交,如果消费过程中有挂掉的情况,重新拉取消息,允许小部分消息重复消费,不过下游做好幂等就行。 幂等性,可以redis使用单号+状态来做唯一的key,当然主要还是数据库端处理。
3.顺序消费
对于一些顺序消费的场景,主要的做法应该就是需要把要保持顺序的消息发送到相同的patition分区,这样就能保证了。 如果不这样做的话,那就在消费端做处理,比如增加多个状态,如支付、发消息、退货等字段分开,哪个先到无所谓,最终保持状态一致。