确认一下:假如最后有一步存缓存的操作,抛出异常

来源:9-12 分布式事务02-编码实现

微暖丶温情

2019-08-25

周老师:
	确认一下:假如最后有一步存缓存的操作,抛出异常,RMQ收到的是半消息状态,间隔1分钟之后,查询,发现log表没有日志记录,所以丢弃,对吧?
写回答

1回答

大目

2019-08-25

确认一下:假如最后有一步存缓存的操作,抛出异常,RMQ收到的是半消息状态,间隔1分钟之后,查询,发现log表没有日志记录,所以丢弃,对吧?

最后一步存缓存发生异常,于是本地事务就会回滚了。rmq的半消息会在你listener方法的catch里面rollback,告诉rmq丢弃这条消息。但如果告诉rmq的瞬间,断网了,或者rmq server挂了,或者其他极端场景rmq没有收到让回滚消息的请求;那么就会定时向内容中心发送回查请求。
然后回查的时候,就看有没有日志,如果没有,就认为本地事务执行失败,告诉rmq丢弃消息,如果有消息,那就告诉rmq投递。

简单来说,回查是应对极端场景的。

这个流程如果不理解的话,建议把那个rmq流程图和我的讲解再刷一遍哦。

0
3
微暖丶温情
非常感谢!
2019-08-27
共3条回复

Spring Cloud Alibaba微服务从入门到进阶

面向未来微服务:熟练掌握Spring Cloud Alibaba

3085 学习 · 1324 问题

查看课程