★消息队列16篇

1 领域模型

Apache RocketMQ 是一款典型的分布式架构下的消息中间件产品,使用异步通信方式和发布订阅的消息传输模型。 Apache RocketMQ 产品具备异步通信的优势,系统拓扑简单、上下游耦合较弱,主要应用于异步解耦,流量削峰填谷等场景。

说明:以上图片来自官网

如上,RocketMQ 中消息的生命周期主要分为消息生产、消息存储、消息消费这三部分:

  • 生产者生产消息并发送至 Apache RocketMQ 服务端
  • 消息被存储在服务端的主题中
  • 消费者通过订阅主题消费消息

1.1 消息生产

生产者(Producer):RocketMQ 中用于产生消息的运行实体,一般集成于业务调用链路的上游。

1.2 消息存储

  • 主题(Topic):RocketMQ 消息传输和存储的分组容器,主题内部由多个队列组成,消息的存储和水平扩展实际是通过主题内的队列实现的。
  • 队列(MessageQueue):RocketMQ 消息传输和存储的实际单元容器,类比于其他消息队列中的分区,流式顺序性存储特征。
  • 消息(Message): RocketMQ 的最小传输单元。消息具备不可变性,在初始化发送和完成存储后即不可变。

1.3 消息消费

  • 消费者分组(ConsumerGroup):

    Apache RocketMQ 发布订阅模型中定义的独立的消费身份分组,用于统一管理底层运行的多个消费者(Consumer)。同一个消费组的多个消费者必须保持消费逻辑和配置一致,共同分担该消费组订阅的消息,实现消费能力的水平扩展。

  • 消费者(Consumer):

    Apache RocketMQ 消费消息的运行实体,一般集成在业务调用链路的下游。消费者必须被指定到某一个消费组中。

  • 订阅关系(Subscription):

    Apache RocketMQ 发布订阅模型中消息过滤、重试、消费进度的规则配置。订阅关系以消费组粒度进行管理,消费组通过定义订阅关系控制指定消费组下的消费者如何实现消息过滤、消费重试及消费进度恢复等。

    RocketMQ 的订阅关系除过滤表达式之外都是持久化的,即服务端重启或请求断开,订阅关系依然保留。

2 通信方式介绍

分布式系统架构思想下,将复杂系统拆分为多个独立的子模块,例如微服务模块。此时就需要考虑子模块间的远程通信,典型的通信模式分为以下两种,一种是同步的RPC远程调用;一种是基于中间件代理的异步通信方式。

2.1 同步RPC调用模型



同步RPC调用模型下,不同系统之间直接进行调用通信,每个请求直接从调用方发送到被调用方,然后要求被调用方立即返回响应结果给调用方,以确定本次调用结果是否成功。

2.2 异步通信模型



异步消息通信模式下,各子系统之间无需强耦合直接连接,调用方只需要将请求转化成异步事件(消息)发送给中间代理,发送成功即可认为该异步链路调用完成,中间件会确保任务执行完成。他有如下优势:

  • 系统拓扑简单:统一的中间代理通信,系统是星型结构,易于维护和管理。
  • 上下游解耦 :上下游可以独立升级和变更,不会互相影响。
  • 容量削峰填谷:避免高峰带来过载

3 消息传输模型介绍

主流的消息中间件的传输模型主要为点对点模型和发布订阅模型,RocketMQ也不例外。

3.1 对点模式(Point To Point)

在点对点模式下,每个消息只能被一个消费者消费,一旦消息被消费,它就会从队列中删除。这种模式下,消息的生产者和消费者之间没有依赖性,生产者发送消息后,无论是否有消费者接收,都不会影响下一次发送消息。点对点模式适用于需要确保每条消息只被消费一次的场景,例如订单处理、支付确认等‌。

3.2 发布订阅模式(BroadCast)

在发布订阅模式下,每个消息可以被多个消费者消费。消息生产者将消息发布到主题(Topic)上,所有订阅该主题的消费者都能接收到这条消息。这种模式下,生产者不需要关心有多少消费者,只需要发送消息即可。发布订阅模式适用于需要广播消息给多个消费者的场景,例如实时通知、日志收集等‌。

3.3 适用场景和优缺点

‌点对点模式‌:适用于需要确保每条消息只被消费一次的场景,优点是消息传递可靠,缺点是扩展性较差,不适合大量消费者同时消费的情况。

‌发布订阅模式‌:适用于需要广播消息给多个消费者的场景,优点是扩展性好,可以支持大量消费者同时消费,缺点是消息可能会被重复消费,需要额外的机制来处理这种情况‌。

3.4 实际应用案例

‌点对点模式‌:在订单处理系统中,每个订单的创建、支付等操作可以看作是一个独立的消息,确保每个订单的处理过程不会相互影响。

‌发布订阅模式‌:在实时通知系统中,当有新的事件发生时,可以将消息发布到主题上,所有订阅该主题的客户端都能实时接收到通知。

通过了解这两种模式的定义、区别和适用场景,可以更好地选择适合自己需求的消息队列模式。

5 总结

了解RockectMQ的基本组成、通信方式、消息传输模型

RocketMQ系列2:领域模型和技术概念的更多相关文章

  1. RocketMQ系列(一)基本概念

    RocketMQ是阿里出品的一款开源的消息中间件,让其声名大噪的就是它的事务消息的功能.在企业中,消息中间件选择使用RocketMQ的还是挺多的,这一系列的文章都是针对RocketMQ的,咱们先从Ro ...

  2. Intel系列CPU的流水线技术的发展

    Intel系列CPU的流水线技术的发展 CPU(Central processing Unit),又称“微处理器(Microprocessor)”,是现代计算机的核心部件.对于PC而言,CPU的规格与 ...

  3. Hadoop 系列(一)基本概念

    Hadoop 系列(一)基本概念 一.Hadoop 简介 Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构,它可以使用户在不了解分布式底层细节的情況下开发分布式程序,充分利用集群 ...

  4. Storm 系列(一)基本概念

    Storm 系列(一)基本概念 Apache Storm(http://storm.apache.org/)是由 Twitter 开源的分布式实时计算系统. Storm 可以非常容易并且可靠地处理无限 ...

  5. Zookeeper 系列(一)基本概念

    Zookeeper 系列(一)基本概念 https://www.cnblogs.com/wuxl360/p/5817471.html 一.分布式协调技术 在给大家介绍 ZooKeeper 之前先来给大 ...

  6. Hbase 系列(一)基本概念

    Hbase 系列(一)基本概念 HBase 是 Apache 旗下一个高可靠性.高性能.面向列.可伸缩的分布式存储系统.利用 HBase 技术可在廉价 PC 服务器上搭建起大规模的存储化集群.使用 H ...

  7. RocketMQ系列-搭建Namesrv源码调试环境

    RocketMQ系列-搭建Namesrv源码调试环境 在学习任何一个技术框架的时候,我们通常都是先了解是什么,有什么作用.解决什么问题.设计亮点和设计思想是什么:当然对于技术学习上来说,这只是纸上谈兵 ...

  8. 单元测试系列之六:JUnit5 技术前瞻

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6868495.html   JUnit ...

  9. 数据挖掘系列 (1) 关联规则挖掘基本概念与 Aprior 算法

    转自:http://www.cnblogs.com/fengfenggirl/p/associate_apriori.html 数据挖掘系列 (1) 关联规则挖掘基本概念与 Aprior 算法 我计划 ...

  10. 【FICO系列】SAP FICO 基本概念

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP FICO 基本概念   ...

随机推荐

  1. JavaScript – Proxy

    参考 阮一峰 – Proxy 介绍和使用 Proxy 的作用是代理对象, 消费者不直接使用对象, 而是使用代理对象. 一般上做代理的目的就是想拦截对象访问做一些别的事情. 比如当对象改变以后, 同步 ...

  2. CSS – Variables

    参考: Youtube – CSS Variables - CSS vs Sass - variables inside media queries Why we prefer CSS Custom ...

  3. 一款超级给力的弱网测试神器—Qnet(附视频)

    一.APP弱网测试背景 App在使用的过程中,难免会遇到不同的弱网络环境,像在公车上.在地铁.地下车库等.在这种情况下,手机常常会出现网络抖动.上行或下行超时,导致APP应用中出现丢包延迟,从而影响用 ...

  4. Axios——异步框架

    Axios--异步框架(简化AJAX代码书写)    Axios 请求方式别名   

  5. 【linux】【docker】Docker默认网段配置导致无法访问

    背景 集团有N个基地,所有基地的网络使用的是172.x.x.x网段,这本身没有什么问题!但Docker默认的桥接网段也是172.17.x.x的,如果不修改docker的默认配置会导致个别基地无法访问! ...

  6. [TK] HH的项链 离线树状数组解法

    实际上这题很难和树状数组联系起来,我感觉效率也不是很高,感觉不是正解 怎么使用树状数组 这道题我们很容易想到一点:同种物品在一个区间内只能出现一次,先不考虑别的问题,我们想出下面这种使用树状数组的思路 ...

  7. VulnStack-红日靶机二

    红日靶机二 环境搭建 只需要把虚拟机的 host-only(仅主机)网卡改为 10.10.10.0 网段,如下配置 把 NAT 网卡,改为 192.168.96.0 网段,如下 首先恢复到 v1.3 ...

  8. 剪枝的应用,bfs判重 蚱蜢跳——蓝桥p642

    **问题描述 总共有九个盘子,八只蚱蜢,且每个盘子中只能容下一只蚱蜢,蚱蜢的编号为1~8,如果蚱蜢所在的盘子紧邻着空盘子,那么该蚱蜢可以从自己的盘子跳到空盘子中,也可以隔一个盘子跳到空盘子中,问一开始 ...

  9. Hugging Face + JuiceFS:多用户多节点环境下提升模型加载效率

    Hugging Face 的 Transformers 是一个功能强大的机器学习框架,提供了一系列 API 和工具,用于预训练模型的下载和训练.为了避免重复下载,提高训练效率,Transformers ...

  10. linux内核调试痛点之函数参数抓捕记

    1.linux内核调试工具crash并不能直接显示函数参数,而这个对调试又非常重要 下面是工作中一个实际的问题,我们的进程hang在如下一个内核栈中了,通过栈回溯可知是打开了一个nfs3的网盘文件或者 ...