江苏SEO网站建设,评价一个网站设计项目的好坏,低价网站制作企业,简约网站模板html概念
本地消息表是一种常见的解决分布式事务问题的方法。其核心思想是将分布式事务拆分成本地事务来处理#xff0c;通过消息队列来保证各个本地事务的最终一致性。
实现步骤 创建本地消息表#xff1a;在数据库中创建一个本地消息表#xff0c;用于存储待发送的消息以及消…概念
本地消息表是一种常见的解决分布式事务问题的方法。其核心思想是将分布式事务拆分成本地事务来处理通过消息队列来保证各个本地事务的最终一致性。
实现步骤 创建本地消息表在数据库中创建一个本地消息表用于存储待发送的消息以及消息的发送状态和相关信息。表结构通常包含字段如 message_id消息唯一标识、message_body消息内容、status消息状态如待发送、已发送等、create_time消息创建时间等 业务处理与消息记录在业务逻辑中当需要发送消息时首先将消息插入到本地消息表中设置状态为待发送。然后执行业务逻辑并将业务变更信息与消息记录插入操作放在同一个本地事务中 消息发送创建一个后台线程或定时任务定时扫描本地消息表中状态为待发送的消息并将这些消息发送到消息队列。在成功发送到消息队列后将消息表中对应的状态修改为已发送 消息消费消费者监听消息队列解析消息内容并执行相应的业务逻辑处理。此步骤必须保证幂等性即多次消费相同的消息不会导致数据不一致 消息状态确认当消息消费完成后进行状态变更。如果消费失败需要根据失败原因进行重试或人工处理 注意事项
消息的幂等性消费者必须保证接口的幂等性以防止消息重复处理导致的数据不一致本地消息表的设计需要考虑到消息状态、重试次数、创建时间等字段以便实现消息的跟踪和管理定时任务和重试机制实现定时任务或者重试机制来确保消息的可靠发送和处理
缺点及解决方式
消息堆积、扫表效率慢可以通过索引优化、分页查询、分库分表、多线程分段查询等方法提高效率定时任务扫表延迟问题可以通过异步发送MQ改为同步调用接口、发送MQ延迟消息、分布式定时任务等方法减少延迟
应用场景
本地消息表适用于金融、电商等领域尤其适用于涉及多个服务交互的复杂交易场景如资金转账、订单创建等。通过其强大功能可以确保在分布式环境中实现事务的一致性和可靠性有效防止数据不一致的问题。
通过上述方法可以在不使用开源框架的情况下利用本地消息表实现分布式事务保证数据的一致性和系统的稳定性。
实际使用
下面是一个消息表的设计
CREATE TABLE mq_notify ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 自增主键, payment_no varchar(30) NOT NULL COMMENT 订单号, message varchar(1000) DEFAULT NULL COMMENT mq message, retry tinyint(4) NOT NULL COMMENT 发送剩余次数, status tinyint(4) NOT NULL COMMENT 状态, yn tinyint(4) NOT NULL COMMENT 是否有效, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 修改时间,PRIMARY KEY ( id ) ,KEY idx_status ( status )
) ENGINE InnoDB COMMENT mq消息表在插入消息表时可以设置重试的最大次数比如 3。
在定时任务扫描时筛选retry 0 且 status init 的消息记录发送mq成功status 更新为finish,发送mq失败retry 次数减一。
如果消息发送 3 次还没有成功此时就需要报警人工介入了。