代码块中存在事物,如何保证MQ消息随着事物的提交或回滚正确发送呢
声明事务不好处理的话,那就编程事务
在事务处理代码之后处理MQ
无法保证。
数据库事务和IO操作,要尽量分割开来进行处理。
如果在执行数据库事务的过程中,需要进行IO操作,可以将这个事务的代码进行重构。
将原有事务进行拆分,在IO操作之前,先提交事务,然后,进行IO操作,在IO操作之后,开启新的事务进行后续的数据操作。
总之,可以通过更改业务处理逻辑,将一个跨IO操作的数据库事务,拆分成多个小的事务,每个小的事务当中,都不存在IO操作。