本地消息表这种实现方式应该是业界使用最多的,其核心思想是将分布式事务拆分成本地事务进行处理,这种思路来源于eBay
工作流程:
1、消息生产方,需要额外一个消息表,并记录消息发送状态。消息表和业务数据要在一个事务里提交。也就是说他们要在一个数据库里面。然后消息会经过MQ发送到消息的消费方。如果消息发送失败,会进行重新发送。
2、消息消费方,需要处理这个消息,并完成自己的业务逻辑。此时如果本地事务处理成功,表明已经处理成功了,如果处理失败,那么就会重试执行。如果是业务上面的失败,可以给生产方发送一个业务补偿消息,通知生产方进行回滚等操作。
3、生产方和消费方定时扫描本地消息表,把还没处理完成的消息或者失败的消息再发送一遍。