消息的幂等性
消费者拿到消息后,可能由于网络波动,超时没有返回ack,这时候mq没有接受到ack,认为你没有消费,会重发这时候就造成了一条消息消费了2次
幂等性对于业务来说,不管执行一次或者多次它的状态都不会改变,这就是幂等性
解决幂等性的方案
方案一:
用java代码如何实现
首先先发送一条消息
然后到mq的控制台看一下,这条消息的头是否含有id
结果是没有的
如果给rabbimt设置一个id,代码如下![](https://i-blog.csdnimg.cn/blog_migrate/26ffec261661cf35d8061db3fe1b06e3.png)
然后在此发送消息,看控制台结果
可以看到携带了一个message_id,并保存到数据库中
消费者如何获取呢代码如下
这样发送一次直接和数据库中进行对比,如果存在说明消费过,直接扔掉。
但是这种方案有一个弊端,就是对业务代码有侵入性。
方案二
如下图