博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lind.DDD.LindMQ的一些想法
阅读量:7112 次
发布时间:2019-06-28

本文共 1841 字,大约阅读时间需要 6 分钟。

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

LindMQ设计架构图

关于MQ系统的三大对象

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

Producer

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

Broker

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

Consumer

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

关于消息的上下文

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

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

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

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

 

转载地址:http://vsghl.baihongyu.com/

你可能感兴趣的文章
Problems at works
查看>>
Dell服务器系统安装后无法正常进入系统
查看>>
深入理解asp.net里的HttpModule机制
查看>>
java基础学习_常用类03_StringBuffer类、数组高级和Arrays类、Integer类和Character类_day13总结...
查看>>
Asp.net MVC Session过期异常的处理
查看>>
python ThreadPoolExecutor线程池使用
查看>>
IPTABLES 规则(Rules)
查看>>
关于URL编码
查看>>
深度学习的可解释性研究(一):让模型「说人话」
查看>>
QT5提示can not find -lGL的解决方法
查看>>
Silverlight/Windows8/WPF/WP7/HTML5周学习导读(9月17日-9月23日)
查看>>
Tap-Ahead:让移动搜索更加便捷的解决之道
查看>>
Windows Server2016 Hyper-v Cluster部署
查看>>
juniper路由器配置
查看>>
jQuery一点一滴系列教程(第三点)
查看>>
ARP解决方法/工具 真假ARP防范区别方法 ARP终极解决方案
查看>>
系统数据权限的实现方案
查看>>
华为vlan划分,单臂路由以及静态路由
查看>>
UCD 2010百度工作坊
查看>>
ssh2免密码登录
查看>>