Lind.DDD.LindMQ的一些想法

时间:2024-01-18 23:11:08

回到目录

很久就想写一套属于自己的消息队列组件,前段时候看了汤雪华同学的EQueue,感觉还是不错的,他也是看了rabbitMQ之后写的Equeue,在设计上与前者有类似的地方,而大叔这次准备写一个LindMQ,当前整体架构都差不多,无非是生产者,管道,消费者三个角色,而核心部分就是管道Broker这个东西了,为生产者提供了push操作;而为消费者又提供了Pull操作;为了解耦考虑,他们之前没有直接的引用关系,通讯采用tcp的方式,Broken的消息存储介质我们使用redis,生产者和消费者与Broker的通讯我们采用FastSocket这个组件。

LindMQ设计架构图

aaarticlea/png;base64,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" alt="" />

关于MQ系统的三大对象

以下三大对象其实都有各自的实现,各自的平台,各自也都需要一个宿主!

Producer

生产者,用来将消息从源平台发送到目标队列中,目标队列用到存储消息,这里一般指Broker,它可以是一种集群环境,它会封装对存储消息介质的入队与出队的基本操作,而对于真实的存储介质,生产者是不需要知道的!

Broker

消息处理者,用来处理消息,加工消息,存储消息等,它会公开基本的推消息接口和拉消息接口!

Consumer

消费者,用来处理Broker里的消息,它一般通过长连接,定时向Broker里拉消息的方法实现,基于实时性考虑,又出现了pub/sub这种发布与订阅模式,当消费方订阅了某种消息主题(topic)之后,有这种消息产生时,broker会把消息自动推到消息方!

关于消息的上下文

消息上下文,我们可以把它看成是承载消息的对象,它会有topic主题,queueId消息队列索引,queueOffset内容索引,body消息体组成,它相关于是producer,broker和consumer之间定义的一种数据协议,他们之间通讯使用这种公开的协议,在LinqQueue里面消息协议我们称为LindMQ,下面看一下协议的内容

    /// <summary>
/// 消息协议
/// </summary>
[Serializable]
public class LindMQ
{
/// <summary>
/// 消息所属Topic,每种Topic有一种类型的Body
/// </summary>
public string Topic { get; set; }
/// <summary>
/// 消息内容,Redis里存储为Json
/// </summary>
public string Body { get; set; }
/// <summary>
/// 消息所属的队列ID
/// </summary>
public int QueueId { get; internal set; }
/// <summary>
/// 消息在所属队列的序号
/// </summary>
public long QueueOffset { get; internal set; }
/// <summary>
/// 消息的存储时间
/// </summary>
internal DateTime CreateTime { get; set; }
/// <summary>
/// 将消息对象序列化成字符
/// </summary>
/// <returns></returns>
public override string ToString()
{
return Utils.SerializeMemoryHelper.SerializeToJson<LindMQ>(this);
}
}

通过上面代码我们可以看到,Topic,QueueId,QueueOffset,Body等字段,这也是一个消息协议也需要的主要信息了,Topic是消息主题,我们可以这样认为,一种主题就是一类消息,QueueId它位于Topic消息主题下面,一个topic可以包括多个queue,而QueueOffset是每个queue里的消息索引,类似你的消息在消息队列里排在第几位;而body就是我们的消息体了,它使用二时制流表示,这样有利于网络传输!

好了,今天主要是对LinqQueue做一个简单的介绍,下次我再继续介绍LindQueue!

回到目录