中间件

RabbitMQ 发送端和消费端的总体设计

言七墨 · 11月29日 · 2019年 · · 199次已读

使用场景:

系统解耦、异步、多服务订阅消息、消息可靠性、消息时序性

发送端:

流程图:

发送端流程图

表结构:

CREATE TABLE `mq_publish` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `group_no` varchar(50) NOT NULL COMMENT '消息组号(用于记录会话id)',
    `message_id` varchar(50) NOT NULL COMMENT '消息id',
    `body` varchar(10500) NOT NULL COMMENT '消息内容',
    `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '消息状态:-1-发送失败;0-未发送;1-发送成功;2-发送中',
    `reason` varchar(200) DEFAULT NULL COMMENT '失败原因',
    `retries` int(11) NOT NULL DEFAULT '0' COMMENT '重试次数',
    `exchange` varchar(50) NOT NULL COMMENT '交换机',
    `routing_key` varchar(50) NOT NULL COMMENT '路由键',
    `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE `unq_messageid` USING BTREE (`message_id`)
) ENGINE = InnoDB CHARSET = utf8mb4 COMMENT 'MQ 发送端表';

消费端:

流程图:

消费端流程图

表结构

CREATE TABLE `mq_consume` (
    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `group_no` varchar(32) NOT NULL COMMENT '同属一个组类别的标识号码,比如:同一个orderNo下的message消息',
    `seq_no` int(10) NOT NULL DEFAULT '0' COMMENT '同一个组下面message的序号,代表其业务顺序',
    `message_id` varchar(32) NOT NULL COMMENT '消息的唯一ID',
    `body` varchar(2000) NOT NULL DEFAULT '' COMMENT '消息体',
    `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '消息消费状态,默认为未消费:-3-异常订单;-2-消费顺序错误;-1-消费异常;-0-未消费;1-已消费',
    `retry_counts` int(11) NOT NULL DEFAULT '0' COMMENT 'JOB重试次数',
    `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY USING BTREE (`id`),
    UNIQUE `uniq_message_id` USING BTREE (`message_id`),
    UNIQUE `uniq_group_no_seq_no` USING BTREE (`group_no`, `seq_no`)
) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARSET = utf8mb4 COMMENT 'MQ 消费端表';
0 条回应