浅谈消息队列MQ

说起它,想必大家都很清楚,它很好的处理了高并发问题,采用异步的方式处理请求,有效的缓解系统压力。接下来,我就自己的观点来谈一下MQ。

就针对A和B转账类似的问题,曾经推广出JTA,但却伴存在着很多缺陷,分布式事务伴随着大量节点的通信交换,协调者要确定其他节点是否完成,加上网络带来的超时,导致JTA性能低下,在分布式、高并发和高要求性能的场景下举步维艰,在这种情况下,消息队列应运而生。

就转账的问题和大家简单认识一下消息队列。首先在A账户所在的数据库中添加一张‘事件表’;转账开始后,将A账户中的100元扣除,同时向事件表中插入一条记录:给B账户增加100元;由于这两张表存在于同一个数据库中,所以直接使用本地事务就可以,不需要用分布式事务。另外需要设计一个定时运行程序,当定时运行时,从事件表中取出记录,向消息队列写入消息,然后把记录的状态修改一下,这样下次就不会再去处理了。细心的你会发现这个过程中也存在的一些问题:定时运行程序读取了数据,向消息队列中也写入了消息,但这个时候如果事件表中的状态还未改变程序就崩溃了,待定时运行程序重启后,还会再次读取,这样转账给B账户的金额就不对了。针对这个问题,对应的解决方案是在执行转账到B账户的时候,对其进行判断,看之前是否已经执行过(这里需要创建一张表:用于存储之前的执行记录),如果没有就执行转账;如果执行过了,就会抛弃这条消息。

MQ:1、异步;2、实现了持久化,把消息存到硬盘上;3、有一个标准接口。

最后和大家分享一本书:《码农翻身》,用故事的形式讲述技术,更容易理解。

好了,今天就聊到这了,以后会继续和大家分享。

猜你喜欢

转载自blog.csdn.net/weixin_40106067/article/details/81750278