RocketMQ的架构及概念

2023-11-17

RocketMQ就是一个消息中间键用于实现异步传输解耦

那什么是消息中间键呢?

消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色大致也有Producer(生产者)、Consumer(消费者)

RocketMQ就是一种中间键 ,如下图所示为MQ的架构:

在上图中整体可以分为4个角色,分别是:NameServer, Broker, Producer, Consumer 

  • Broker(邮递员):
    • Broker是RocketMQ的核心,负责消息的接受,存储,投递等功能        
  •  NameServer(邮局):
    • 消息队列的协调者,Broker向它注册路由信息,同时Producer和Consumer向其获取路由信 息
  • Producer(寄件人): 
    • 消息的生产者,需要从NameServer获取Broker信息,然后与Broker建立连接,向Broker发 送消息
  • Consumer(收件人): 
    • 消息的消费者,需要从NameServer获取Broker信息,然后与Broker建立连接,从Broker获 取消息
  • Topic(地区): 
    • ​​​​​​​用来区分不同类型的消息,发送和接收消息前都需要先创建Topic,针对Topic来发送和接收 消息
  • Message Queue(邮件):
    •  为了提高性能和吞吐量,引入了Message Queue,一个Topic可以设置一个或多个Message Queue,这样消息就可以并行往各个Message Queue发送消息,消费者也可以并行的从多个 Message Queue读取消息
  • Message: 
    • ​​​​​​​消息的载体

MQ里面肯定包含了我们的消息生产者(producer)和消息消费者(consumer),对我们来说这就是两个服务,即两个应用程序,这两个应用程序之前要传信息都是直传,但是直传都是同步传输且耦合性较高。

所以我们引入了中间件MQ,MQ中它首先包含一个NameServer 的核心对象,这个NameServer不需要我们人工来进行创建,MQ只要一跑通就识别有了。NameServer就相当于所有快递站点的管理者(即一个总的快递站点),是一个协调调度者,是整个MQ最核心的一个全局对象,用来管理所有的快递站点。

Broker就相当于一个真实的快递站点或是一个快递员,未来它会帮你创建好快递站点并按照你的消息数据委派给对应的快递员进行数据的传递。那我们可以有多个Broker ,那么多个Broker之间我们要来进行数据的传递和数据的管理,就要用NameServer来进行管理,Broker是真正用来实现快递传输的。

在Broker的下一级还有几个角色,例如Topic,可以理解为我们的地区,一个快递员或一个站点可以负责一个或多个地区,所以一个Broker可以有多个Topic。

Topic里面有Message queue,这个可以理解为一个消息包裹,Topic一个地区可以有多个包裹,而一个Message queue里面又包含了很多message,很多信息。

消息的发送和接收 

发送同步消息:

这种可靠性同步地发送方式使用的比较广泛,比如:重要的消息通知,短信通知

消息发送步骤:

1. 创建消息生产者, 指定生产者所属的组名

2. 指定Nameserver地址

3. 启动生产者

4. 创建消息对象,指定主题、标签和消息体

5. 发送消息

6. 关闭生产者

发送异步消息: 

异步消息通常用在对响应时间敏感的业务场景,即发送端不能容忍长时间地等待Broker的响应。

单向发送消息: 

这种方式主要用在不特别关心发送结果的场景,例如日志发送。

 消费消息:

1. 负载均衡模式(默认方式)

消费者采用负载均衡方式消费消息,多个消费者共同消费队列消息,每个消费者处理的消息不同

2. 广播模式 消费者采用广播的方式消费消息,每个消费者消费的消息都是相同的

//广播模式消费
consumer.setMessageModel(MessageModel.BROADCASTING);
发送方式 发送TPS 发送结果反馈 可靠性
同步发送 不丢失
异步发送 可能丢失
单向发送 可能丢失

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RocketMQ的架构及概念 的相关文章

随机推荐

  • Springboot 集成 RabbitMq 实现消息确认机制

    消息确认主要分为两种 发送确认 发送确认包含两种情况 一种是消息是否到达交换机 一种是消息是否到达队列 接收确认 一 发送方消息确认 1 ConfirmCallback 接口 配置文件需要开启配置 publisher confirm typ
  • Linux系统中如何彻底隐藏一个TCP连接?

    前面的文章中 我稍微描述了一下如何隐藏一个TCP连接 https blog csdn net dog250 article details 105372214 在上文中 我采用了 传统 的做法 即hook住proc的 proc net tc
  • [Kubernetes]谈谈容器跨主机网络

    继上篇文章 Kubernetes 浅谈容器网络 自己给自己挖的坑 这篇文章来谈谈容器跨主机网络 要理解容器 跨主通信 的原理 就要来谈谈 Flannel 这个项目 Flannel 项目是 CoreOS 公司主推的容器网络方案 提供容器网络功
  • C#后端代码处理excel,按条件给单元格设置格式

    有时候在一些自定义场景下我们需要给excel表格打上标签格式 比如说财务想给每个月花费最高和最低员工打上标记 在输出表格时内容就已经处理完毕 准备工作 首先 下载Spire xls功能类库 点击这里下载 然后 在后端代码引入命名空间 usi
  • hive的压缩存储格式

    1 5种存储格式 Apache Hive支持Apache Hadoop中使用的几种熟悉的文件格式 如TextFile RCFile SequenceFile AVRO ORC和Parquet格式 Cloudera Impala也支持这些文件
  • Fsm1s

    This is a Moore state machine with two states one input and one output Implement this state machine Notice that the rese
  • C++实现设计模式之观察者模式

    什么是观察者模式 观察者模式是一种一对多的以来关系 当一个对象的状态发生改变时 所有依赖于他的对象都得到通知并被自动更新 它的主体是通知的发布者 发出通知时并不需要知道谁是它的观察者 可以有任意数目的观察者订阅并接收通知 将观察者和被观察的
  • docker 打包镜像部署

    dockerfile 直接复制粘贴 把jar包位置改一下就行 设置本镜像需要使用的基础镜像 FROM java 11 FROM openjdk 11 把jar包添加到镜像中 ADD ip v1 jar app jar 镜像暴露的端口 EXP
  • Ubuntu 更换国内源

    Ubuntu系统自带的源都是国外的网址 国内用户在使用的时候网速比较慢 一个软件的下载是十分痛苦的 这里讲解一下如何将国外源更换为国内源 让你的网速Biu Biu Biu c如果想快速切换国内源强烈推荐 gt gt gt gt Ubuntu
  • 2012年9月开学季CSDN高校俱乐部专家巡讲讲师招募

    基本介绍 CSDN高校俱乐部CSDN高校俱乐部 以下称 俱乐部 是一个非盈利性的 面向全国IT专业大学生的技术组织 辐射全国数百所高校 俱乐部吸引到来自各高校对程序开发怀有强烈热情的大学生 以线上论坛线下活动形式开展学生之间 学生与导师之间
  • [linux命令]zsh: command not found: npm

    问题 zsh command not found npm 解决 重装node js 注意版本
  • 【C语言开源项目】tinyhttpd ——下载、安装、使用

    前言 本系列将带领大家看一些C语言的优秀的开源项目 并逐步深入讲解源码 感兴趣的可以点击关注 收藏 有问题及时在评论区评论 Tinyhttpd 介绍 Tinyhttpd 是一个非常轻量级的 web server 总共只有500多行代码 非常
  • js用正则取${}中的值

    js使用正则表达式获取 变量名 中的变量名 1 需求 从 124fddr32 3532 253 23354 233 k 545xx54 666 233545xxxxx 这类字符串中获取 中的内容 注意 的个数是不确定的 一 使用match的
  • 2021-06-30 nginx 80端口http转发非443端口https

    nginx 80端口http转发非443端口https 图一张 不解之处 图一张 不解之处 没有系统学习过nginx 不懂为何第二种写法不行
  • 用C语言实现一个简单的静态栈

    栈是我们经常会用到的一种数据结构 下面我们就来看一下如何使用C语言来实现一个静态栈 并且使用它来解决一个经典的问题 括号匹配问题 首先我们来看一下栈的自定义类型 我们需要一个数组来存放栈中的元素 并且需要一个数字来表明目前栈顶所在的位置 所
  • mysql同时插入两个字段_mysql 怎么给一个表一次增加多个字段? ?

    DIEA mysql为一个表增加多个字段的语法为 ALTER TABLE 表名 ADD COLUMN 字段名1 数据类型 长度 DEFAULT NULL ADD COLUMN 字段名2 数据类型 长度 DEFAULT NULL 其中 def
  • 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p

    http www cnblogs com rushuizhijing archive 2011 08 26 2154737 html 深入理解const char p char const p char const p const char
  • flutter生命周期

    原文地址 https www jianshu com p 7e8dff26f81a Flutter跟安卓的Activity iOS的ViewController一样拥有自己的生命周期 Flutter中一切都是Widget 渲染方式有点像H5
  • Matlab 随机采样

    Matlab 随机采样 随机采样是统计学和数据分析中常用的一种方法 可以用来生成代表性的样本数据 在 Matlab 中 我们可以通过 rand 函数来实现随机采样 下面我们来介绍几种常见的随机采样方法及其实现 简单随机采样 简单随机采样是最
  • RocketMQ的架构及概念

    RocketMQ就是一个消息中间键用于实现异步传输与解耦 那什么是消息中间键呢 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流 并基于数据通信来进行分布式系统的集成 通过提供消息传递和消息排队模型 它可以在分布式环境下扩展进程间