前几天有水友提问:通过消息队列(MsgQueue,MQ)发送任务和消息,万一MQ重启了怎么办?能否保证MQ不丢消息?今天就聊聊MQ的消息必达性架构与流程。不丢消息,MQ架构设计的核心方向是什么?MQ要想消息必达,架构上有两个核心设计点:(1)消息落地;(2)消息超时、重传、确认;为了实现上述两个核心点,MQ架构如何?上图是一个MQ的核心架构图,可以分为三大块:(1)发送方 -> 左侧粉色部分;(2)MQ核心集群 -> 中间蓝色部分;(3)接收方 -> 右侧屎黄色部分;粉色发送方又由两部分构成:(1)业务调用方;(2)MQ-client-sender;其中后者向前者提供了两个核心API

(1)SendMsg(bytes[] msg);

(2)SendCallback();

蓝色MQ核心集群又分为四个部分:

(1)MQ-server

(2)zk;

(3)db;

(4)管理后台web;

黄色接收方也由两部分构成:(1)业务接收方;(2)MQ-client-receiver;其中后者向前者提供了两个核心API

(1)RecvCallback(bytes[] msg);

(2)SendAck();

MQ是一个系统间解耦的利器,它能够很好的解除发布订阅者之间的耦合,它将上下游的消息投递解耦成两个部分,如架构图中的1箭头和2箭头:

箭头1:发送方将消息投递给MQ,上半场;箭头2:MQ将消息投递给接收方,下半场;MQ消息可靠投递核心流程如何?MQ既然将消息投递拆成了上下半场,为了保证消息的可靠投递,上下半场都必须保证消息必达。MQ消息投递上半场,MQ-client-sender到MQ-server流程见上图1-3:(1)MQ-client将消息发送给MQ-server;画外音:此时业务方调用API:SendMsg。(2)MQ-server将消息落地,落地后即为发送成功;(3)MQ-server将应答发送给MQ-client;画外音:此时回调业务API:SendCallback。MQ消息投递下半场,MQ-server到MQ-client-receiver流程见上图4-6:(4)MQ-server将消息发送给MQ-client;画外音:此时回调业务API:RecvCallback。(5)MQ-client回复应答给MQ-server;画外音:此时业务方主动调用API:SendAck。(6)MQ-server收到ack,将之前已经落地的消息删除,完成消息的可靠投递;如果消息丢了怎么办?MQ消息投递的上下半场,都可以出现消息丢失,为了保证消息可达性,MQ需要进行超时和重传。上半场如何实施超时与重传?MQ上半场的1或者2或者3如果丢失或者超时,MQ-client-sender内的timer会重发消息,直到期望收到3,如果重传N次后还未收到,则SendCallback回调发送失败,需要注意的是,这个过程中MQ-server可能会收到同一条消息的多次重发。下半场如何实施超时与重传?MQ下半场的4或者5或者6如果丢失或者超时,MQ-server内的timer会重发消息,直到收到5并且成功执行6,这个过程可能会重发很多次消息。画外音:一般采用指数退避的策略,先隔x秒重发,2x秒重发,4x秒重发,以此类推。需要注意的是,这个过程中MQ-client-receiver也可能会收到同一条消息的多次重发。总结MQ是系统之间的解耦利器,MQ为了保证消息必达,架构设计方向为:(1)消息收到先落地;(2)消息超时、重传、确认保证消息必达;遗留问题:上半场,MQ-server可能收到重复的消息;下半场,MQ-client-receiver,也就是消息接收方可能收到重复的消息,怎么办?画外音:如何去重,如何幂等设计,听玄姐直播为你解答。事件:《RocketMQ企业级应用及定制化开发实践》人物:奈学教育CEO,玄姐时间:6.4、6.5、6.6三天,20:00-22:00画外音:每天两小时直播,免费,有没有诚意?如何参加?

扫码加小助手,获取直播地址,送架构师成长地图

内容大纲如何?

(1)MQ企业级应用场景分析

(2)常见MQ选型对比

(3)MQ高可用及水平扩展架构;

(4)MQ存储原理深度剖析;

(5)MQ服务注册与服务发现深度剖析;

(6)MQ负载均衡架构深度剖析;

(7)MQ事务消息实现原理;

(8)MQ延时消息架构原理;

(9)RocketMQ定制化开发实践;

(10)作业题及讲解

连续3天(6.4/6.5/6.6),每天2小时(20:00-22:00),玄姐免费直播,MQ,干货多多,阅读原文,获取直播地址,只能帮你到这里了,一起学习吧。

udp怎么保证不丢包_MQ不丢消息,究竟是怎么实现的?相关推荐

  1. linux6.5系统间歇性丢包,路由器经常丢包、掉线解决方法大全

    路由器老掉线是经常出现的问题,你上网都可能遇到:丢包.上网慢.掉线.上不去网.不能浏览网页.卡.信号差.误码率高.信号延迟.连接失败.不稳定.上不去.死机.无故中断等现象,这到底是怎么回事,如何解决这 ...

  2. linux查看mysql丢包_Linux 网卡丢包严重

    annotatedClasses和component-scan冲突吗 annotatedClasses:配置在sessionFactory下面表示的是,哪些实体需要映射,代码如下: [BZOJ2793 ...

  3. linux 系统 UDP 丢包问题分析思路

    转自:http://cizixs.com/2018/01/13/linux-udp-packet-drop-debug?hmsr=toutiao.io&utm_medium=toutiao.i ...

  4. Linux系统 UDP 丢包问题分析思路和修改网卡缓存

    最近工作中遇到某个服务器应用程序 UDP 丢包,在排查过程中查阅了很多资料,我在排查过程中基本都是通过使用 tcpdump 在出现问题的各个环节上进行抓包.分析在那个环节出现问题.针对性去排查解决问题 ...

  5. UDP 分片 与 丢包,UDP 真的比 TCP 高效吗?

    关注.星标公众号,直达精彩内容 素材来源:https://blog.csdn.net/LearnLHC/article/details/115268028 整理:技术让梦想更伟大 | 李肖遥 一.UD ...

  6. UDP 分片 与 丢包,UDP 真的比 TCP 高效吗?UDP 的应用场景

    目录 一.UDP 报文格式 二.UDP 分片 1.UDP 有发送缓存区吗? 1>.先说结论: 2>.逐步分析: 2.UDP 分片 1>.UDP 包最佳传输大小 2>.分片问题 ...

  7. UDP的Socket发送数据,出现连续丢包现象(一)

    UDP丢包原因 一.主要丢包原因 1.接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失.对于这种 ...

  8. udp丢包原因和解决

    一.主要丢包原因 1.接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失.对于这种情况可以修改接收 ...

  9. UDP主要丢包原因及具体问题分析

    转载:https://www.cnblogs.com/Zhaols/p/6105926.html 一.主要丢包原因 1.接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时 ...

最新文章

  1. Paddle Lite端侧部署
  2. Linux wc命令详解
  3. python对MySQL进行添加修改删除以及字符串的操作
  4. jQuery源码学习视频
  5. RPL的故事 ——《x86汇编语言:从实模式到保护模式》读书笔记31
  6. VirtualBox虚拟机安装CentOS 7
  7. HEVC/H265 HM10.0 分析(三)TAppDecTop.cpp
  8. 留给华为、小米、OPPO 们的时间不多了!
  9. laravel改代码没变化_菜鸡程序员是如何写代码的?
  10. cognos报表制作学习(一)cognos如何新建普通的reportstudio报表
  11. 源码剖析panic与recover,看不懂你打我好了!
  12. S7-200 SMART间接寻址功能说明(指针的使用)
  13. 微信公共平台 首次关注 自动回复消息
  14. 使用PRSice进行多基因风险评分分析
  15. Sencha Cmd 优化 Sencha Ext JS/7.5.12
  16. matlab均方根误差
  17. Win10桌面布局-透明剧中任务栏
  18. Infragistsitcs NetAdvantage WebCombo 控件
  19. Python学习——02-Python基础——【4-文件处理与三元运算】
  20. mongodb4.0学习总结二(read concern)

热门文章

  1. 独家对话谢宝友:做一款类似于 Linux 的国产操作系统 | 人物志
  2. 英特尔、阿里巴巴全方位深化技术创新,共同引领数智未来
  3. 直面 Jira,Worktile CTO 为何自信满满?
  4. 儿童节教你用 Python 画出童年回忆
  5. 疫情肆虐之下,阿里巴巴的攻与防!
  6. 无障碍的 Web 环境应该如何打造?
  7. 超分辨率在移动实时音视频的应用实践
  8. Java 程序员中位数薪资达 1.45 万,但面试屡屡被拒?
  9. 谷歌称已实现量子霸权;iOS 捷径功能被诉侵权;Chrome 78 Beta 发布 | 极客头条
  10. 微软全球执行副总裁沈向洋:人工智能的机遇和挑战