目录
前言
1. 需求分析
1.1 核心概念
1.2 核心API
1.3 交换机类型
1.4 持久化
1.5 网络通信
1.6 消息应答
2. 模块划分
结语
前言
我们在上一个系列对于消息队列有了初步的认识,那我们明白了消息队列的用途之后,我们就开始进行我们的项目了,首先我们的项目是仿照RabbitMQ进行实现的,但是有些功能我们没有实现,毕竟RabbitMQ是一个经典的消息队列,要想自己完全实现,还是有一定程度的难度的.但是我们项目实现的这些功能肯定能帮助我们深刻理解消息队列这个组件的.当我们完成这个项目的时候,回过头来再看别的消息队列,也会有很大的帮助.
本章是对我们的项目做一些前期的准备.主要涵盖需求分析和模块划分两个部分.本项目的配置环境为:SpringBoot2系列以及Java8版本,相关依赖框架会涉及到MyBatis和sqlite数据库.
1. 需求分析
1.1 核心概念
有关消息队列的核心概念,在上节已经简单的总结过了,我们这里再简单的回顾一下.
1. 生产者(Producer)
2. 消费者(Consumer)
3. 中间人(Broker)
4. 发布(Publish)
5. 订阅(Subscribe)
一个生产者一个消费者
多个生产者多个消费者
Broker内部结构,依次为: 消息队列 虚拟主机 交换机 队列 绑定
以上的所有概念,即需要在内存中存储,也需要在硬盘中存储
1. 内存存储: 执行效率快,方便我们使用
2. 硬盘存储: 重启消息队列服务器,数据不会发生丢失,可以恢复到内存中.
1.2 核心API
对于Broker来说,我们要通过这些API来实现消息队列的基本功能.
此外我们这个消息队列支持跨主机进行使用的,那么生产者和消费者是通过网络的方式调用消息队列的这些API的.其中我们对于虚拟主机的设计只设置了一个虚拟主机在消息队列中,而RabbitMQ是支持多个虚拟主机的,同时支持虚拟主机的创建和删除.
1.3 交换机类型
对于交换机我们此项目实现了三种类型的交换机,而原来的RabbitMQ是支持四种交换机类型的:
1. Direct(直接交换机)
2. Fanout(扇形交换机)
3. Topic(主题交换机)
4. Header(头交换机)(未实现:比较复杂,并且用的比较少见)
主题交换机会将message1添加到Queue2中,将message2添加到Queue2中.
1.4 持久化
Exchange,Queue,Binding,Message都有持久化的属性.我们设计的的时候给出持久化属性.
当程序重启后/主机重启,保证数据的不丢失.
1.5 网络通信
生产者和消费者都是客户端的程序,Broker是服务器,我们的程序支持跨主机使用,使用网络进行通信,在网络通信的过程中没客户端要实现API进行远程操作服务器.
我们在Broker的基础上,客户端要增加网络连接Connection和Channel操作
下面网线就能很形象的表示Connection和Channel之间的关系.
1.6 消息应答
为了保证消息是否被消费者消费,消费者需要进行应答.
2. 模块划分
以上是整个消息队列项目所有的模块,其中有关数据的存储,我们会将交换机 队列 绑定 存储在数据库,消息存储在本地文件中.其中对以上信息也存储在内存,在内存中存储的是这些对象的引用,保证我们更快的操作数据.
结语
本节为我们的项目开了个头,做了很多的铺垫工作,我们要明白这些工作是很有必要的,在以后的工作中,我们一定要把整个项目的实现思路捋清楚了,再开始写代码,这样我们的工作会事半功倍的.我们接下来就会进入到代码的部分,请大家多多关注后续系列,谢谢!!!