问题场景:A服务更新数据库然后发送mq,
B服务消费做业务逻辑查询A服务的数据库是更新前的数据。
可能原因:1:A服务中数据库食物未提交,消息发出并且被消费,导致B服务查到历史数据。
解决办法:1消费端sleep几秒等A服务事务提交(最简单的处理但是不是很合适)
2生产端做事务提交后发送mq ,如果用rocketMq他有事务消息。如果其他mq那么做一个代理将发送mq做成预发,缓存到threadLoccal中,然后事务代理处理完,这一层代理去拿mq消息和topic去发送(threadlocal最好先remove下)
3生产者直接将修改的内容作为消息题直接发送过来。
2:A服务缓存问题,发送mq之前未清理缓存
解决办法:先请缓存然后发送mq