0%

MQ消费者补偿

场景

1、网络抖动导致消费异常;
2、并发请求,锁冲突重试。

架构图

image.png

补偿表设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE `message_compensation` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '消息体',
`service_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '消费者方法名',
`retry_count` tinyint(4) NOT NULL DEFAULT '0' COMMENT '重试次数',
`has_consume_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '重试标志,0待重试,1失败,2成功',
`exception_msg` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '消费异常信息',
`create_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建人id',
`create_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
`update_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '更新人id',
`update_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_delete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=293 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='消费失败补偿表';