RocketMQ的架构是什么样的❓

RocketMQ,作为一款强大的分布式消息中间件,广泛应用于各种大规模分布式系统中,为异步消息通信提供了可靠的解决方案。本文将深入探讨RocketMQ的核心组件,包括Producer、Broker、Consumer和NameServer,以及它们在整个架构中的角色和功能。

RocketMQ架构概览

RocketMQ的整体架构由Producer、Broker、Consumer和NameServer四个主要组件组成,各自承担不同的任务,相互协同工作,为分布式消息传递提供了可靠的基础。

Producer(生产者)

角色: 生产者是RocketMQ的消息生产者,负责产生消息并将消息发送到Broker。

功能:

  • 通过调用RocketMQ的API,将消息发送到指定的Topic。
  • 向NameServer注册自身信息,获取Topic的路由信息。
  • 处理消息的发送失败和重试逻辑。
  • 支持指定消息的Tag,以便在消费者端进行更精确的消息过滤。
// 简单的Java示例
DefaultMQProducer producer = new DefaultMQProducer("example_group");
producer.setNamesrvAddr("localhost:9876");
producer.start();Message message = new Message("example_topic", "TagA", "Hello, RocketMQ".getBytes());
SendResult sendResult = producer.send(message);
System.out.println("Message ID: " + sendResult.getMsgId());producer.shutdown();

Broker(消息代理服务器)

角色: Broker是RocketMQ的核心组件,负责消息的存储和传递。

功能:

  • 接收生产者的消息,将消息存储在内部存储引擎中。
  • 根据消息的Topic、Tag等信息将消息分发到对应的队列。
  • 处理来自消费者的消息拉取请求,将消息推送给消费者。
  • 支持主从复制机制,确保消息的高可用性和容错性。
  • 提供消息的查询和统计功能。

Consumer(消费者)

角色: 消费者从Broker拉取消息进行处理。

功能:

  • 向NameServer注册自身信息,获取消息的路由信息。
  • 订阅感兴趣的Topic,从指定的队列中拉取消息。
  • 处理消息的业务逻辑,可能涉及对消息的过滤、转发等操作。
  • 向Broker提交消息的消费状态,确保消息被成功处理。
  • 支持顺序消费,确保消息按照发送的顺序被消费。
// 简单的Java示例
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("example_group");
consumer.setNamesrvAddr("localhost:9876");
consumer.subscribe("example_topic", "*");consumer.registerMessageListener((List<MessageExt> messages, ConsumeConcurrentlyContext context) -> {for (MessageExt message : messages) {System.out.println("Received message: " + new String(message.getBody()));}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
});consumer.start();
System.out.println("Consumer Started.");

NameServer(命名服务器)

角色: NameServer负责维护整个RocketMQ系统的路由信息。

功能:

  • 向Producer和Consumer提供路由信息,帮助它们定位消息的存储位置。
  • 保存和管理Topic的元数据信息,包括每个Topic包含哪些队列。
  • 提供轻量级的服务发现和负载均衡功能,确保Producer和Consumer能够找到可用的Broker。
  • 是一个无状态的组件,可以部署多个实例以提高系统的可用性。

其他比较重要的概念和组件

Filter Server(过滤服务器):
  • 作用: Filter Server 是 RocketMQ 的消息过滤组件,用于支持基于 SQL 表达式的消息过滤。
  • 功能: 允许消费者根据消息的属性、内容进行过滤,仅选择满足特定条件的消息进行消费。
Remoting(远程通信):
  • 作用: Remoting 是 RocketMQ 中的远程通信框架,用于在各个组件之间进行通信。
  • 功能: 提供了底层的网络通信支持,使得不同组件之间可以进行高效的数据传递。
Client(客户端):
  • 作用: Client 指的是 RocketMQ 的客户端,包括 Producer 和 Consumer。
  • 功能: 客户端负责与 Broker 和 NameServer 进行交互,实现消息的发送和拉取。
TopicRouteData(路由信息):
  • 作用: 用于描述 Topic 在 RocketMQ 中的路由信息。
  • 功能: 包括了 Topic 所包含的队列信息以及每个队列的路由信息,消费者通过获取路由信息可以知道从哪些队列拉取消息。
Subscription(订阅关系):
  • 作用: 描述了消费者与 Topic 之间的订阅关系。
  • 功能: 指定了消费者对哪些 Topic 下的消息感兴趣,以及如何进行过滤。
CommitLog(提交日志):
  • 作用: CommitLog 是 Broker 存储消息的主要数据结构。
  • 功能: 每个 Broker 都有自己的 CommitLog,用于持久化存储消息。
Index File(索引文件):
  • 作用: 用于加速消息的检索和查询。
  • 功能: 存储消息在 CommitLog 中的物理偏移量和逻辑队列偏移量的索引信息。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/215224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高中物理电学总结之稳恒电流篇

高中物理电学总结之稳恒电流篇 电流电流的定义对电流的微观分析 电阻欧姆定律电阻的串并联电阻定律 电源的电动势电源电动势 闭合电路欧姆定律闭合电路闭合电路欧姆定律 电流做功与焦耳定律电流做功电功率焦耳定律电源效率 电表改装 电流 电流的定义 电解质溶液中的自由电荷是…

ACwing算法备战蓝桥杯——Day30——树状数组

定义&#xff1a; 树状数组是一种数据结构&#xff0c;能将对一个区间内数据进行修改和求前缀和的这两种操作的最坏时间复杂度降低到O(logn); 实现所需变量 变量名变量数据类型作用数组a[]int存储一段区间数组tr[]int表示树状数组 主要操作 函数名函数参数组要作用lowbit()int…

Linux-RedHat系统-安装 中间件 Tuxedo

安装步聚 一、中间件安装包&#xff1a; tuxedo121300_64_Linux_01_x86 Tuxedo下载地址&#xff1a; Oracle Tuxedo Downloads 二、新建用户&#xff1a; &#xff08;创建Oracle用户时&#xff0c;需要root权限操作&#xff09; 创建用户&#xff1a; # useradd oracle …

es6从url中获取想要的参数

第一种方法 很古老&#xff0c;通过 split 方法慢慢截取&#xff0c;可行是可行但是这个方法有一个弊端&#xff0c;因为 split 是分割成数组了&#xff0c;只能按照下标的位置获取值&#xff0c;所以就是参数位置一旦发生变化&#xff0c;那么获取到的值也就错位了 let user…

利用python将data:image/jpg; base64,格式数据转化下载为图片

在做爬虫爬取图片时&#xff0c;发现有的图片url是用“data:image/jpg;base64” 开头的&#xff0c;例如下图 部分开头样式如下&#xff1a; 1、data:image/jpg; base64, 2、data:image/png; base64, 3、data:image/webp;base64, 利用python进行代码进行图片下载&#xff0c;…

面向对象设计与分析40讲(22)罪恶的单例模式?

单例模式曾经被认为是一种重要的设计模式&#xff0c;但现在已经失去了很多开发者的青睐。虽然单例模式可能仍然适用于某些场景&#xff0c;但它的使用已经不再像过去那样普遍了。 单例模式是创建型设计模式的一种&#xff0c;它限制了一个类的实例化只能为一个实例&#xff0…

先进的Web3.0实战热门领域NFT项目几个总结分享

非同质化代币&#xff08;NFT&#xff09;的崛起为游戏开发者提供了全新的机会&#xff0c;将游戏内物品和资产转化为真正的可拥有和交易的数字资产。本文将介绍几个基于最先进的Web3.0技术实践的NFT游戏项目&#xff0c;并分享一些相关代码。 Axie Infinity&#xff08;亚龙无…

智能优化算法应用:基于猫群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于猫群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于猫群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.猫群算法4.实验参数设定5.算法结果6.参考文献7.MA…

C++ extern “C“ 用法

extern “C” 由于c中需要支持函数重载&#xff0c;所以c和c中对同一个函数经过编译后生成的函数名是不相同的 extern “C” 的主要作用就是为了实现c代码能够调用其他 c 语言代码。 1(不常用) //告诉编译器 show() 函数按c语言的方式进行编译和链接 extern "C" voi…

MySQL数据库概念与实践

MySQL数据库概念与实践 1. 概念 MySQL是一种常用的关系型数据库管理系统&#xff0c;具有丰富的功能和广泛的应用。在本篇博客中&#xff0c;我们将介绍MySQL数据库的一些重要概念和相关知识。 存储引擎 存储引擎是MySQL数据库用于存储、更新和查询数据的技术实现方法。MyS…

Python安装第三方库出错

Python 程序包镜像的国内源如下&#xff1a; 清华大学: https://pypi.tuna.tsinghua.edu.cn/simple/豆瓣(douban): https://pypi.douban.com/simple/阿里云: https://mirrors.aliyun.com/pypi/simple/中国科技大学: https://pypi.mirrors.ustc.edu.cn/simple/ 使用方法&#xf…

件夹和文件比较软件VisualDiffer mac功能介绍

VisualDiffer mac是一款运行在MacOS上的文件夹和文件快速比较工具。VisualDiffer可以对不同文件夹中文件或文档做出比较或者比较两个文件的路径。还可以通过UNIS diff命令快速、标准和可靠的比较出各类不同的文件夹和文件结果&#xff0c;使用不同的颜色直观地显示。 VisualDif…

酷滴科技出席浦发银行第七届国际金融科技创新大赛

12月7日&#xff0c;浦发银行全球金融科技创新大赛在上海展开决赛。本届大会以“科技金融&#xff0c;激发创新力量”为主题&#xff0c;聚焦金融行业数字化转型过程中的痛点与难点&#xff0c;旨在探讨新时代下金融科技的新角色、新机遇以及新挑战。酷滴科技CEO张沈分享了酷滴…

12.11

1.q&#xff0c;w&#xff0c;e亮led1&#xff0c;2&#xff0c;3&#xff1b; a&#xff0c;s&#xff0c;d灭led1&#xff0c;2&#xff0c;3&#xff1b; main.c #include "uar1.h"#include "led.h"void delay(int ms){int i,j;for(i0;i<ms;i){for…

「CocoaPods」Podfile文件模板

前言&#xff1a;在iOS项目中&#xff0c;通常会使用到CocoaPods作为一个第三方库的依赖管理工具&#xff0c;可以简化对组件的依赖、更新的过程&#xff0c;本文将介绍在iOS项目中多Target企业级项目的Podfile文件编写格式 一、podfile介绍 先简单介绍一下podfile文件&#…

基于mdadm创建与管理软raid

环境 VMware workstation 17pro CentOS Linux release 7.9.2009 (Core) ——内存8G&#xff0c;16core ——硬盘系统盘100G ——四块20G硬盘 注意事项 1、在没有操作系统的情况下&#xff0c;可以在装系统时将磁盘做软raid&#xff0c;然后使用软raid作为系统盘 2、在重构时&a…

虚幻商城 道具汇总

文章目录 载具Vehicle Variety Pack(车辆品种包)Vehicle Variety Pack Volume 2(车辆品种包第 2 卷)家具Free Furniture Pack(免费家具包)Old West - VOL 1 - Interior Furniture(旧西部 - 第1卷 - 家具包)Old West VOL.3 - Travel Supplies and Goods(旧西部 - 第3卷…

容器及容器调度(云)

在云计算中&#xff0c;容器是一种轻量级、可执行的软件包&#xff0c;它包含应用程序及其全部依赖项&#xff0c;包括库、二进制文件、配置文件等。容器与虚拟机不同&#xff0c;因为它们不需要包含完整的操作系统&#xff1b;相反&#xff0c;所有容器都共享主机操作系统的内…

SQL中的三值逻辑:TRUE、FALSE 和 UNKNOWN。

在SQL中&#xff0c;通常采用三值逻辑处理条件表达式的真值。这种逻辑是基于三种可能的真值状态&#xff1a;TRUE、FALSE 和 UNKNOWN。 TRUE&#xff08;真&#xff09;&#xff1a; 表示条件为真或成立。 FALSE&#xff08;假&#xff09;&#xff1a; 表示条件为假或不成立。…

7 Linux 内核移植

一、编译 ST 的 Linux 系统 1. 压缩源码 首先先下载 ST 官方源码&#xff0c;之前章节已经下载过了&#xff0c;直接输入以下命令&#xff1a; cd linux/atk-mpl/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.4.31-r0/ 然…