上图是之间讨论确定的系统架构(后续内容会按照这个架构来叙述),其中:

  1. 客户端包含Producer和Consumer两大块

  2. 客户端需要和NameServer交互来获取元数据

  3. 客户端需要和Broker交互来读写消息

Client模块划分

1. 网络模块

第一个仍然是网络模块。Client需要获取元数据,需要读写消息,网络模块是必不可少的。 和Broker不同的是,Client的网络模块要简单一些。Broker需要向NameServer汇报数据,同时还要处理来自Client的请求,而Client更多的只是发出请求:

  • 向NameServer获取元数据

  • 向Broker写入消息

  • 从Broker获取消息

2. 编解码模块

Client需要将消息写到Broker,同时也需要从Broker获取消息,这两个过程会涉及到消息的编解码。

3. 元数据相关

Client相关的元数据有Topic、消费进度、Group(之前介绍过的概念,可以看之前的文章),另外还需要感知其他的客户端的存在(叫Member信息或者Client Instance信息吧),所以需要Member数据。那么元数据相关大概是以下组件:

  • TopicManager

  • PositionManager

  • GroupManager

  • MemberManager

4. 发送相关

Producer API

对于Client而言,很重要的一个模块就是暴露出去的发送和消费的API,这是使用方唯一能接触到的地方(写代码时,任何暴露出去的API已经要谨慎谨慎再谨慎)。

对于发送的API,从不同的角度可以分为:

  • 从发送方式上有同步发送和异步发送

  • 从发送消息量上有单条发送和批量发送

路由模块

对于发送而言,一条消息最终需要落到某一个确定的分区上。所以客户端会包含一个路由模块来根据消息的属性和Topic的元信息来选择分区。

5. 消费相关

Consumer API

消费相关的API会比发送的复杂一些,因为消费需要提供更多的模式。另外为了保证顺序性、减少消息的重复等,消费还需要引入租约等组件。租约和Consumer的各种模式已经是比较细节的问题了,在设计阶段在进行介绍。

分区分配模块

发送方需要选择将消息写入到哪个分区,而消费方需要决定自己消费哪些分区,所以对应于发送方的路由模块,消费方会有分区分配的模块。

缓存模块

为了保证性能,Consumer从Broker获取消息和使用方消费消息是异步的,中间需要Buffer来缓存消息,所以Consumer相对于Producer会多一个缓存模块。

除了以上模块,还会有LifeCycle这样生命周期相关的基础模块,这个也是上一篇在介绍Broker模块时遗漏的。

总结以上内容,Client包含的模块大概如下:

结语

本篇主要是把Client的几个模块划分出来,为之后的详细设计做准备。 下一篇会整理一下NameServer的模块,然后大概会有一到两篇的篇幅总结一些架构、流程、数据流等。

往期内容:

《什么是分布式消息中间件》

《消息中间件的一些概念》

《业务方对消息中间件的需求》

《消息中间件架构讨论》

《Broker模块划分》

欢迎关注此公众号,将坚持不懈的写MQ相关的技术文章,希望能和更多的朋友交流。

如果本文对您有帮助,点一下右下角的“推荐”

消息中间件Client模块划分相关推荐

  1. Broker模块划分

    上图是之前讨论确定的系统架构(后续内容会按照这个架构来叙述),几点基础: Broker采用主从结构 Broker负责持久化元数据并汇报到NameServer Client从NameServer获取元数 ...

  2. 模块怎么用_IC设计方法:模块划分与overdesign

    今天讲一个非常简单的设计思想,这个东东也是IC设计方法里的基本矛盾之一:模块划分与overdesign. 模块划分乃是IC设计最基本也最经典的概念之一.该步骤出现在芯片架构设计之初.多方设计人员一起讨 ...

  3. ds18b20温度转换指令_学习心得 | 温度检测工程模块划分总结与案例分析

    本文为明德扬原创文章,转载请注明出处! 很多朋友在学习FPGA的时候会发现模块划分很令人头大,今天我就通过明德扬温度检测工程来与大家分享一下本人的划分思路. 明德扬温度检测工程是基于FPGA的一个实用 ...

  4. 从零到一搭建基础架构(2)-如何构建基础架构模块划分

    Hello,这里是爱 Coding,爱 Hiphop,爱喝点小酒的 AKA 柏炎. 本篇是手把手搭建基础架构专栏的第二篇. 在第一篇<从零到一搭建基础架构(1)-玩转maven依赖版本管理> ...

  5. 千兆以太网工程模块划分总结与分析

    很多朋友在工程模块划分的时候总会遇到很多问题,比如不知道如何下手.模块划分不合理等:我开始也是这样的,在学习了明德扬的几项工程以后,按照老师分享的思路,也对模块划分有了一定的小经验,今天通过案例的方式 ...

  6. 18 模块划分4步骤——EDD

    模块划分思路 自顶向下: 水平切分思路--分层. 垂直切分思路--功能模块. 自底向上: 先识别类.后归纳出模块的思路--用例驱动. 拍脑袋: 需要大量灵感外加一些经验 水平切分与垂直切分 水平切分称 ...

  7. 交易系统模块划分,模块拆分,设计,重构实战.状态

    父文章 技术设计金字塔  包含了实体设计文章 相关文章 如何梳理和重构_含复杂性度量 相关文章,代码级:  如何写可维护的代码 - 万物ddd ddd primitive . 封装,对象来实现可维护代 ...

  8. 计算机信息高新技术鉴定级别,全国计算机信息高新技术考试模块划分及鉴定标准.doc...

    全国计算机信息高新技术考试模块划分及鉴定标准 全国计算机信息高新技术考试模块划分及鉴定标准全国计算机信息高新技术考试内容主要是计算机信息应用技术.考试采用了一种新型的国际通用的专项职业技能鉴定方式.根 ...

  9. 传统网络游戏(偏重MMORPG)的模块划分

      之所以用"模块划分"而没有用架构等词汇,因为本篇文章并没有细化到架构的程度.我希望先从最宏观的角度说一下游戏有哪些部分构成,让初入行业的游戏从业者,或者不是技术人员的游戏玩家都 ...

最新文章

  1. iOS之性能优化·优化App界面的渲染与流畅度
  2. jQuery 源码分析笔记(3)
  3. AI最后--热门游戏引擎(CN地区)
  4. 怎样用Jquery实现拖拽层,并实现网站自定义化模块功能?
  5. linux 生成和使用动态链接库和静态链接库的Makefile编写
  6. java读取csv文件
  7. boost::factory实现对象工厂设计模式
  8. html背景音乐自动播放embed,HTML中添加音乐video embed audio
  9. python 执行linux rm命令_Linux rm命令:删除文件
  10. 计算机去基金公司好,电子、通信、计算机 基金更看好哪个行业?
  11. linux vi面板如何复制一行
  12. Android添加手机黑名单,手机来电拦截实现详解与Demo,一个不错的练手项目,涵盖Android四大组件。
  13. 音乐、房产可一键投资:资产证券化才是区块链的最大想象力?
  14. 鼠标右键打开命令行cmd(管理员身份)
  15. 电商实时交易风控系统
  16. DOM常用操作与Demo
  17. 【收藏资源】Git分支模型(master/hotfix/develop/feature/release)
  18. SYN 洪水攻击如何工作?
  19. 让swfobject.js 支持透明的flash
  20. 【支付宝沙箱支付】麻瓜教程——申请----代码----修改测试----问题解决

热门文章

  1. jquery实现页面提示,数据正在加载中。(
  2. 约瑟夫环(丢手绢问题)
  3. OpenSSL编写SSL,TLS程序
  4. h5支付不能打开支付宝 ios_iOS WKWebview中无法调起支付宝/微信客户端支付问题的解决方法...
  5. Linux ubuntu对于cmake的版本更新
  6. Android Studio发布项目到jcenter
  7. 使用Lucid Virtu在有独立显卡的情况下使用Intel硬件加速H.264编码
  8. 贡献开源项目没那么简单,你要负责到底
  9. 广东48.6万人资产超600万 华东超600万人群最多
  10. 如何基于FFMPEG和SDL写一个少于1000行代码的视频播放器