为初学者而来~手工最简MQ设计篇

Posted ESOO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为初学者而来~手工最简MQ设计篇相关的知识,希望对你有一定的参考价值。

为初学者而来~手工最简MQ(一)设计篇
为初学者而来~手工最简MQ(二)Broker
为初学者而来~手工最简MQ(三)Client

为什么重复造轮子

MQ(Message Queue)是互联网公司绕不过去的一个技术,核心功能就是进行消息的收发管理,已达到某些特殊功能,比如流量削峰,异步执行,日志聚合等。
介于这个原因,看了很多mateQ,kafka,roccketMQ的资料,虽然算是一点点的入门了,依然感觉隔着层窗户纸,后来经过考虑,觉得mq经过多年的演变,已经是一个复杂的事物,对于初学者,不利于理解,我决定根据自己的理解,自己手写一个最简单mq,以帮助自己理解,也给后来者提供一个简单的参考。
如有大神,可直接看源码:git-soomq

首先给大家放一张图,便于初学者理解:

术语说明
Producer消息的生产者,用户将消息发送给消息队列服务器
Broker消息队列的服务器,用于存储消息
Consumer消息的消费者,用户读取消息服务器上的消息,用于自己的业务处理
Topic消息分组的组名,用于区分不同的业务类型
Message传递的内容,也就是常说的消息

设计篇

1,服务端

服务端的设计就非常简单了,最核心的就是消息的存取,以及响应生产者和消费者的网络请求
分为2部分:

1.1 消息文件

消息的存储我们参考kafka,并简化其逻辑,因为是最简单的mq,我们只考虑单机的情况的就行,每个topic存储2个文件

topicname.index
topicname.data

.index 文件存储格式为:
消息顺序号:消息截止位置
.data 文件按照顺序存储具体的消息

1.2 网络编程

利用netty 开放端口,响应生产者与消费者,每个消息包装成一个commod,commod类型

  • 消息类型(消费/生产)
  • 消息topic
  • 消息体(生产时用)
  • 消息顺序号(消费时用)
  • 处理结果(成功/失败)
  • 处理消息(失败时添加原因)

2,client

2.1 连接管理

通过netty与mq服务器进行连接,并相应生产者与消费者的请求,通过netty自带的序列化工具,将消息序列化未byte字节进行传输

2.2 生产者

获取服务连接后,将消息发送给消息队列服务器
参数:

  • 消息类型:生产
  • 消息topic
  • 消息体

2.3 消费者

获取服务连接后,从服务端获取消息
参数:

  • 消息类型:消费
  • 消息topic
  • 消息顺序号

下一篇:
为初学者而来~手工最简MQ(二)Broker
为初学者而来~手工最简MQ(三)Client

开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于为初学者而来~手工最简MQ设计篇的主要内容,如果未能解决你的问题,请参考以下文章

为初学者而来~手工最简MQ设计篇

为初学者而来~手工最简MQBroker

为初学者而来~手工最简MQBroker

为初学者而来~手工最简MQBroker

为初学者而来~手工最简MQClient

为初学者而来~手工最简MQClient