BoringMQ 1.0.0-设计思路及开发心得~

2 篇文章 0 订阅

一、业务流程图

    这里展示了Queue的创建和监听:
Queue的创建和监听
    上图介绍了Queue消息的创建过程,和监听消费过程。但是没有画消息发送的流程(笔者忘了,不想补,懒- -!),这里文字补充一下吧。生产者发送消息以后,服务端保存成功以后,会告知生产者消息是否保存成功,生产者根据服务器返回的结果做对应的处理。
    至于Topic消息的流程,大致上和Queue消息的差不多,这里就教给大家自己思考了。主要是Topic消息发送给消费者以后,目前的设计是服务器不会管消费者是否消费成功。后期会加上消费者主动向服务器Pull消息。

二、1.0版本网络通讯架构。

    目前使用的是NIO技术,应该不会换成netty吧,毕竟自己撸还是很爽的。
在这里插入图片描述
    从上图可以看成1.0版本的通讯模型还是很简单的,除了生产者发送消息是更加生产者本身是单线程还是多线程来决定的,其他都是单线程操作。因此笔者设计了下图的优化版本:
在这里插入图片描述
    目前是这样设计的,通过使用线程池的方式来达到多线程的操作,队列监听的方式保证消息的顺序性。当然目前不确定方案的可行性,欢迎大佬们来评论一下~

三、1.0版本开发思路

  1. 首先笔者没使用过MQ,但是有开发物联网项目的经验,但是第一版也是使用的nio,然后换成了netty。但是时隔这么久了,nio早就忘了,就先写了个NIO通讯,能发送和接收消息就行。
  2. 第二步就是测试通讯期间的各种异常了,比如服务器挂了怎么办,客户端能否不断重连(已实现),消息是否能持久化(以后再说)。
  3. 上面两个没问题以后,就是设计消息通过什么传输了,想了想还是用最原始的TCP吧,毕竟数据体自己可控,用http的话总感觉不好。报文格式就设计成请求头(两字节)+报文长度(四字节,整个报文长度)+版本域(两字节)+命令码(两字节)+数据域(N字节,请求头至命令码区间所有字节10进制的和摸以256)+效验域(两字节)+结束域(两字节)组成。
  4. 开始设计各种数据类,画流程图,分析代码怎么写。
  5. 开始写Queue的创建和Queue消息发送,期间就是Client端写写,服务端写写,冒的什么问题。Topic消息一样,差不多。
  6. 开始写Queue和Topic消息的监听,期间就遇到了上图中的等待逻辑,需要靠线程之间的通讯来解决,期间差点把自己绕晕,嘿嘿o( ̄︶ ̄)o。
  7. 最后就是自己测试一下在各种场景下的异常,然后修修补补,最后就完成了一个最简单的1.0版本了。

    题外话:

  1. 要不把通讯的单体抽取出来,弄个想Netty,Tio之类的网络框架?
  2. 要不把上次哪个分布式id生产方案弄个jar包出来?
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值