23.rabbitmq幂等性

介绍

用户对同一操作发起的一次请求或多次请求的结果是一致的。

方式用户重复提交。

也就是消息被重复消费了。

消费者在消费mq中的消息时,mq已经把消息发送给消费者,消费者在给mq返回ack时网络中断,故mq未收到确认消息,该条消息会重新发给其他消费者,或者在网络重连后再次发送给该消费者,但实际上该消费者已经成功消费了该条消息,造成消费者消费了重复的消息。

解决思路

一般使用全局id,或者写一个唯一标识比如:时间戳, UUID, 按自己的规则生成一个全局唯一id。每次消费消息时用该id判断该消息是否被消费过。

消费端的幂等性保证

在海量订单生成的业务高峰期,生产端有可能会重复发生了消息,这时候消费端就要实现幂等性,这就意味着我们的消息永远不会被重复消费多次,即使我们收到了一样的消息。

业界主流的幂等性操作有两种:

1.唯一Id+指纹码机制。

指纹码:我们的一些规则或者时间戳加别的服务给到的唯一信息码,它并不一定是我们系统生成的,基本是我们的业务规则拼接而来,但是一定保证唯一性,然后利用查询语句进行判断这个id是否存在于数据库中,优点就是实现简单的一个拼接,然后查询判断是否重复。缺点是在高并发时,如果是单个数据库就会有写入性能瓶颈,当然可以采用分库分表提升性能,但也不是最佳的推荐方式。

2.利用redis的原子性去实现。

利用redis的setnx命令,天然具有幂等性,从而实现不重复消费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卷土重来…

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值