Rocket MQ 架构介绍

news2024/11/19 1:18:10

文章目录

  • 为什么选择Rocket MQ
  • 基本概念
  • 优点
  • 缺点
  • 架构图
  • 编程模型
    • 发送者发送消息固定步骤
    • 消费者消费消息固定步骤

为什么选择Rocket MQ

  Rocket MQ是阿帕奇顶级的开源项目,由阿里开发并开源。它的研发背景是Active MQ与Kafka不能很好的解决当时的业务场景。官网上是这么描述的:

   在阿里孕育 RocketMQ 的雏形时期,我们将其用于异步通信、搜索、社交网络活动流、数据管道,贸易流程中。随着我们的贸易业务吞吐量
的上升,源自我们的消息传递集群的压力也变得紧迫。
   根据我们的研究,随着队列和虚拟主题使用的增加,ActiveMQ IO模块达到了一个瓶颈。我们尽力通过节流、断路器或降级来解决这个问题,
但效果并不理想。于是我们尝试了流行的消息传递解决方案Kafka。不幸的是,Kafka不能满足我们的要求,其尤其表现在低延迟和高可靠性
方面,详见下文。在这种情况下,我们决定发明一个新的消息传递引擎来处理更广泛的消息用例,覆盖从传统的pub/sub场景到高容量的实时
零误差的交易系统。

基本概念

名词描述
Producer(生产者)消息的生产者,一般是系统中的一个功能模块
Consumer(消费者)消息的消费者,一般是系统中的一个功能模块
Name server 命名空间用于维护Broker与Topic的信息,提供轻量级的Broker路由服务
Broker实际处理消息存储、转发等服务的核心组件
Topic区分消息的种类,用于路由消息
Message QueqeTopic的分区,用于并行发送和接收消息

优点

  • 异步:可以提高系统的响应速度,吞吐量。比如现在的菜鸟驿站/快递柜,快递员只需把快递送到驿站/快递柜即可送下一个快递,不用等A客户拿到快递后,再去给B客户拿快递。
  • 解耦:快递员是一个独立的角色,负责派送包裹,而不需要直接与收件人进行实时交互。快递员可以通过查询系统或从调度中心获取待派送的包裹信息,然后根据包裹上的地址信息进行派送。
  • 削峰:超市618,双十一都会有大促活动。超市可以采用分时段入场、预约购物或提前安排活动等措施,将顾客的到达时间分散在更长的时间段内,从而减少高峰时段的拥堵和排队等待时间。

缺点

  • 系统稳定性降低:引入新的外部依赖,对系统稳定性有影响,如果MQ宕机不可用,会导致整个系统不可用
  • 系统复杂度变高:MQ是异步的,需要考虑消息如何不丢失?消息不重复消费?如何保证顺序消费等
  • 数据一致性问题:假设A系统发出消息,B,C两个系统来消费。B消费成功,C消费失败,此时如何处理?

架构图

image.png

编程模型

发送者发送消息固定步骤

  1. 创建producer,确定生产者组名
  2. 指定name server地址
  3. 启动producer
  4. 创建消息对象,指定主题topic,tag和消息体
  5. 发送消息
  6. 关闭producer

消费者消费消息固定步骤

  1. 创建消费者Consumer,确定消费者组名
  2. 指定name server地址
  3. 订阅主题topic 和 tag
  4. 设置回调函数,处理消息
  5. 启动消费者consumer

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

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

相关文章

【rabbitMQ】Exchanges交换机

上一篇:springboot整合rabbitMQ模拟简单收发消息 https://blog.csdn.net/m0_67930426/article/details/134904766 本篇代码基于上一篇继续写 目录 Fanout 交换机 1. add queue 2. add Exchange 3.绑定队列 Direct 交换机 1. add queue 2. add Exchange 3.…

求职智能分析系统

本项目是一个基于Flask轻量级框架的计算机就业数据可视化分析平台。 采用echarts和ajax等技术进行数据展示和用户交互。

Mybatis是如何进行分页的?

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

【Linux】gdb-调试代码的工具

目录 一、概述 1.1 gdb是什么 1.2 为什么要使用gdb 二、gdb的简单使用 2.1 安装gdb 2.2 软件的debug版本和release版本 2.3 使用gdb 在之前的学习中,我们已经能够用vim编写和gcc/g编译代码了,下面来学习如何调试代码。 一、概述 1.1 gdb是什么 …

扩展学习|商业智能和分析:从大数据到大影响

文献来源:Chen H, Chiang R H L, Storey V C. Business intelligence and analytics: From big data to big impact[J]. MIS quarterly, 2012: 1165-1188. 下载链接:https://pan.baidu.com/s/1JoHcTbwdc1TPGnwXsL4kIA 提取码:a8uy 在不同的组…

【USRP】LFTX / LFRX

LFTX/LFRX 设备概述 LFTX 子板利用两个高速运算放大器来允许 0-30 MHz 的传输。该板仅接受实模式信号。LFTX 非常适合 HF 频段的应用,或使用外部前端来上变频和放大中间信号的应用。LFTX 的输出可以独立处理,也可以作为单个 I/Q 对进行处理。 主要特征…

基于SpringBoot+Vue会员制医疗预约服务管理信息系统(Java毕业设计)

点击咨询源码 大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的…

vue零基础

vue 与其他框架的对比 框架设计模式数据绑定灵活度文件模式复杂性学习曲线生态VueMVVM双向灵活单文件小缓完善ReactMVC单向较灵活all in js大陡丰富AngularMVC双向固定多文件较大较陡(Typescript)独立 更多对比细节:vue 官网:ht…

【人工智能 | 知识表示方法】状态空间法 语义网络,良好的知识表示是解题的关键!(笔记总结系列)

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

漏洞复现--速达进存销管理系统任意文件上传

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

区块链扩容问题研究【06】

1.Plasma:Plasma 是一种基于以太坊区块链的 Layer2 扩容方案,它通过建立一个分层结构的区块链网络,将大量的交易放到子链上进行处理,从而提高了以太坊的吞吐量。Plasma 还可以通过智能合约实现跨链交易,使得不同的区块…

GoLong的学习之路,进阶,微服务之序列化协议,Protocol Buffers V3

这章是接上一章,使用RPC包,序列化中没有详细去讲,因为这一块需要看的和学习的地方很多。并且这一块是RPC中可以说是最重要的一块,也是性能的重要影响因子。今天这篇主要会讲其使用方式。 文章目录 Protocol Buffers V3 背景以及概…

编译 Flink代码

构建环境 JDK1.8以上和Maven 3.3.x可以构建Flink,但是不能正确地遮盖某些依赖项。Maven 3.2.5会正确创建库。所以这里使用为了减少问题选择 Maven3.2.5版本进行构建。要构建单元测试,请使用Java 8以上,以防止使用PowerMock运行器的单元测试失…

SpringBoot集成系列--RabbitMQ

文章目录 一、代码1、添加依赖2、配置RabbitMQ连接3、RabbitMQ配置4、创建生产者5、创建消费者6、测试 二、遇到的问题1、Channel shutdown2、收不到信息3、安装RabbitMQ&#xff0c;无法访问控制台访问 一、代码 1、添加依赖 在pom.xml文件中添加RabbitMQ的相关依赖 <de…

10天玩转Python第2天:python判断语句基础示例全面详解与代码练习

目录 1.课程之前1.1 复习和反馈1.2 作业1.3 今日内容1.4 字符串格式化的补充1.5 运算符1.5.1 逻辑运算符1.5.2 赋值运算符1.5.3 运算符优先 2.判断2.1 if 的基本结构2.1.1 基本语法2.1.2 代码案例2.1.3 练习 2.2 if else 结构2.2.1 基本语法2.2.2 代码案例2.2.3 练习 2.3 if 和…

基于JavaWeb+SpringBoot+Vue在线拍卖系统的设计和实现

基于JavaWebSpringBootVue在线拍卖系统系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 摘 要 1 Abstract 1 1 系统概述 4 1.1 概述 4 1.2课题意义 4 1.3 主要内容 4 2 …

「实用教程」win32spl.dll文件的作用及修复方法分享

本文将为您详细介绍Win32spl.dll文件的作用、丢失原因以及提供5个修复教程&#xff0c;帮助您解决这一问题。 一、Win32spl.dll文件的作用 Win32spl.dll是一个动态链接库文件&#xff0c;它是Windows操作系统中的一个重要组件。该文件主要负责处理系统启动时的一些操作&#…

[笔记] 使用 qemu/grub 模拟系统启动(单分区)

背景 最近在学习操作系统&#xff0c;需要从零开始搭建系统&#xff0c;由于教程中给的虚拟机搭建的方式感觉还是过于重量级&#xff0c;因此研究了一下通过 qemu 模拟器&#xff0c;配合 grub 完成启动系统的搭建。 qemu 介绍 qemu 是一款十分优秀的系统模拟器&#xff0c;…

[MySQL]SQL优化之索引的使用规则

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、索引失效 &#x1f4d5;最左前缀法则 &#x1f4d5;范围查询> &#x1f4d5;索引列运算&#xff0c;索引失效 &#x1f4d5;前模糊匹配 &#x1f4d5;or连接的条件 &#x1f4d5;字符串类型不加 …

《PySpark大数据分析实战》-03.了解Hive

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…