你的位置:首页 > 软件开发 > ASP.net > Lind.DDD.LindQueue的一些想法

Lind.DDD.LindQueue的一些想法

发布时间:2016-11-23 17:00:22
回到目录很久就想写一套属于自己的消息队列组件,前段时候看了汤雪华同学的EQueue,感觉还是不错的,他也是看了rabbitMQ之后写的Equeue,在设计上与前者有类似的地方,而大叔这次准备写一个LindQueue,当前整体架构都差不多,无非是生产者,管道,消费者三个角色,而核心 ...

回到目录

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

LindQueue设计架构图

Lind.DDD.LindQueue的一些想法

消费者,用来处理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 get='_blank'>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);    }  }

原标题:Lind.DDD.LindQueue的一些想法

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录