确认一下:假如最后有一步存缓存的操作,抛出异常
来源:9-12 分布式事务02-编码实现

微暖丶温情
2019-08-25
周老师:
确认一下:假如最后有一步存缓存的操作,抛出异常,RMQ收到的是半消息状态,间隔1分钟之后,查询,发现log表没有日志记录,所以丢弃,对吧?
写回答
1回答
-
确认一下:假如最后有一步存缓存的操作,抛出异常,RMQ收到的是半消息状态,间隔1分钟之后,查询,发现log表没有日志记录,所以丢弃,对吧?
最后一步存缓存发生异常,于是本地事务就会回滚了。rmq的半消息会在你listener方法的catch里面rollback,告诉rmq丢弃这条消息。但如果告诉rmq的瞬间,断网了,或者rmq server挂了,或者其他极端场景rmq没有收到让回滚消息的请求;那么就会定时向内容中心发送回查请求。
然后回查的时候,就看有没有日志,如果没有,就认为本地事务执行失败,告诉rmq丢弃消息,如果有消息,那就告诉rmq投递。简单来说,回查是应对极端场景的。
这个流程如果不理解的话,建议把那个rmq流程图和我的讲解再刷一遍哦。
032019-08-27
相似问题