所做项目一直也是用RocektMQ来解耦合,把一些比较耗时的操作都用消费程序来处理,奇怪的是不知道为啥没有遇到过啥分布式事务的问题,两个程序也好像不用怎么考虑生产者事务是否成功,然后消费者事务是否成功的问题?
原来是我迷糊了,分布式事务只会存在在多个数据库的情况,我所做的项目数据库就只有一个,生产者和消费者都链接同一个数据库,当然不会有事务问题,就算要考虑生产者有没有提交也不需要用分布式事务,只需要业务逻辑上控制即可,比如消费程序直接根据消息体中的Id去数据库中查看记录是否存在,若是不存在那么就返回消费失败,等生产者那边事务提交了,数据库中有记录了后重新消费即可促发,也可以生产者提交事务后再登记消息,如果怕因为网络或者其他问题导致登记不了消息,那么完全可以捕获异常,如果发送失败就记录发送的主题和内容,用一个补偿程序来发送即可,如果要考虑记录数据库又发生异常的情况,那么因为本来发送失败的概率就很小了,还要数据库记录失败,那么概率应该小到不能再小了,可以打印日志走故障了,毕竟一个系统可用性高达了四个9就很不错了。