温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
消息队列事务性消息的原理浅析。首先我们了解一下事务性消息的基本概念,授信消息是指根据消息发布者的数据库事务状态决定是否将消息透递给订阅者。开发中常见的一个场景,系统A经过最终的数据库操作,需要通通过队列通知到系统B进行相应的业务处理。那么在这个阶段呢,我们需要保证数据库操作和队列操作的一致性。从而能够保证系统A和B之间的一个稳定交互。那么上述需求常见的思路是,首先我们会进行DB的操作,DB操作完成后呢,我们会发送消息给到消息队列,发消息呢,我们会进行失败重试,但是同样也会有可能产生发消息失败的情况,那么DB操作成功,那发消息失败同样会产生一致性的问题。所以一般情况下呢,我们会将DB操作和发消息放到同一个本地事物内,这样在发消息后会有一步事物提交的操作,也就相当于如果消息发送失败,事务会回滚,那同样会产生另外的问题,比如说事物即将超时。
01:18
那也就相当于消息发送成功,但是DB操作没有正确的进行提交,所以同样会产生一致性的问题。所以最后我们看一下事务性消息的一致性方案,首先发布者会发布事务性消息,事务性消息会首先到队列的R上,然后由队列的broker去帮我们判断当前本地事务的状态,如果本地事务提交成功,那么则将消息呢就投递给订阅者,那如果失败呢,也就丢弃该条消息,不会进行发送。那么现阶段呢,比如说ET MQ rocket MQ以及其他的一些主流的MQ也都支持这种授性消息的方案,我们可以直接拿过来进行直接使用。
我来说两句