有了上一节的协议定义,本节来思考下如何实现。客户端的实现非常容易,先考虑服务端 整个MQ需要具有以下几个部分 1:消息接收 2:消息持久话 3:消息的分发,需要根据tv参数,发送给所有关注了此消息的消费者 4:需要个后台配置系统用来配置MQ的消息使用者 消息接受与消息持久化接收到发送发送的消息将其持久化起来,只要按照之前定义的规范接收dt和tv参数生成消息ID(消息id必须为全局唯一,或者系统内唯一)存储到数据库中,一般会数据库增删改查的都可以实现,插入成功后返回 {"code":200,"msg":""} 或失败后code为500 数据库设计也是十分简单的一张表
create table message_info
(
mq_id bigint not null comment '消息ID',
tv varchar(20) not null comment '频道名称',
content text not null comment '消息内容',
create_time datetime not null comment '创建时间',
primary key (mq_id)
);
alter table message_info comment '消息信息表';
消息的分发收到消息后根据消息的频道找到对应的所有消费者,把消息进行复制后分发出去。说白了就是把一条数据复制成N份发送到不同的url去 需要考虑的是消息的处理状态,消费主机正在维护停止服务了,所以后面需要引入健康检查。但是挤压消息多的话也要注意流控,不能把消费主机给压死这些都是自己研发MQ的好处,需要什么功能就加吧:) 数据库设计需要存储消息和对应的消费者地址,另一张表用来存储消息的状态,失败次数。

配置系统应该是最简单的一个,使用两张表或一张表来记录对应的关系
一个频道可以被多个消费者关注,关注后所有发往该频道的收据都应该被接收到