给消息中间件发送消息失败,发送方并不知道是消息中间件真的没有收到消息呢?还是消息已经收到了,只是返回response的时候失败了?如果是已经收到消息了,而发送端认为没有收到,执行update db的回滚操作。则会导致A账号的钱没有扣,B账号的钱却加了。
意思是消息中间件会出现收到消息,给消费者消费了,但是生产者却收到发送失败
我好奇的是,诸如kafka,rabbitMQ,ActiveMQ会出现这种状况吗?
理论上不会。
你可以研究一下MQ的实现原理。
另外,你也可以自己实现MQ,或者自己实现部分逻辑。比如添加一个握手的过程,取得发送成功回执。或者添加一个确认的过程,发送成功或者失败之后,都去MQ查一下消息存在不。
分布式事务了解一下:
https://www.roncoo.com/article/detail/124243
消息中间件有ACK确认等,有一系列的机制来保证消息一定被处理等,同时分布式系统还有补偿机制来针对你这种A没有扣,会把B加的重新扣减回去