【RabbitMQ】MQ相关概念

一、MQ的基本概念

  • 定义:MQ全称为Message Queue,是一种提供消息队列服务的中间件,也称为消息中间件。它允许应用程序通过读写队列中的消息来进行通信,而无需建立直接的连接。
  • 作用:主要用于分布式系统之间的通信,通过异步处理的方式,减少系统的响应时间,提高系统的吞吐量和稳定性。

二、MQ的工作原理

1. 消息生产者(Producer)

  • 消息发送:生产者将需要传递的消息发送到消息队列中。在发送之前,生产者通常会连接到消息代理(Broker),并通过特定的协议(如AMQP、MQTT、Kafka的Protocol等)与消息代理进行通信。
  • 消息内容:消息可以包含文本、二进制数据等多种类型的信息,并且通常会附带一些元数据(如消息ID、优先级、时间戳等)。
  • 消息确认:某些MQ系统支持消息发送后的确认机制,即生产者发送消息后,消息代理会返回一个确认信号,表示消息已成功接收并存储在队列中。

2. 消息队列(Queue)

  • 存储消息:消息队列是消息的存储容器,它按照特定的规则(如FIFO)保存生产者发送的消息。
  • 队列管理:消息队列通常由消息代理进行管理,包括队列的创建、删除、查询以及队列中消息的存储、检索等。
  • 持久化:为了保证消息的可靠性,许多MQ系统支持将消息持久化到磁盘上,以防止系统崩溃或重启时数据丢失。

3. 消息消费者(Consumer)

  • 消息拉取:消费者主动从消息队列中拉取消息进行处理。在某些MQ系统中,也支持推送模式,即消息代理主动将消息推送给消费者。
  • 并发消费:为了提高消费效率,一个消息队列可以支持多个消费者同时消费消息。这些消费者通常可以组成消费者组(Consumer Group),以实现负载均衡和消息的分发。
  • 消息确认:消费者处理完消息后,需要向消息代理发送确认信号,表示消息已被成功消费。在某些MQ系统中,如果消费者在处理消息时失败或崩溃,消息代理可能会将消息重新放回队列中,等待其他消费者重新消费。

4. 消息代理(Broker)

  • 消息路由:消息代理负责将生产者发送的消息路由到正确的队列中,并根据需要将消息推送给消费者。
  • 安全认证:为了保护消息的安全性,消息代理通常会对生产者和消费者进行身份认证和授权。
  • 监控和管理:消息代理提供了丰富的监控和管理功能,如队列状态查询、消息统计、日志记录等,以帮助用户了解系统的运行状况并进行故障排查。

5. 消息传递模式

  • 点对点模式(PTP, Point-to-Point):在这种模式下,消息生产者将消息发送到特定的队列中,只有一个消费者可以消费该队列中的消息。这种模式通常用于实现任务分配和异步处理。
  • 发布/订阅模式(Pub/Sub, Publish/Subscribe):在这种模式下,消息生产者将消息发布到一个或多个主题(Topic)中,订阅了这些主题的消费者都可以接收到发布的消息。这种模式通常用于实现消息的分发和广播。

三、MQ的优缺点

优点

  1. 解耦
    • MQ允许系统组件之间的松散耦合。
    • 生产者只需将消息发送到队列,而无需知道谁来消费这些消息。
    • 消费者只需从队列中接收消息,而无需知道这些消息来自哪里。
    • 这种解耦降低了系统间的依赖,提高了系统的可维护性和可扩展性。
  2. 异步处理
    • MQ支持异步消息传递,生产者发送消息后可以继续执行其他任务,而无需等待消费者处理完毕。
    • 显著提高系统的响应速度和吞吐量,尤其是在处理耗时操作(如数据库操作、文件IO、网络请求等)时。
  3. 流量削峰
    • 在高并发场景下,MQ可以作为系统的缓冲层,暂存无法及时处理的消息,从而减轻系统的压力。
    • 当系统负载降低时,再逐步处理这些消息,以实现流量的平滑处理。
  4. 可靠性
    • 许多MQ系统支持消息的持久化存储,即使系统崩溃或重启,也能保证消息不丢失。
    • MQ还提供了消息确认机制,确保消息被正确消费。
  5. 灵活性和可扩展性
    • MQ支持多种消息传递模式和协议,可以灵活地适应不同的应用场景。
    • MQ系统通常具有良好的可扩展性,可以随着业务的发展而扩展。

缺点

  1. 系统复杂性增加
    • 引入MQ会增加系统的复杂性。
    • 开发者需要了解MQ的工作原理、配置和使用方法,以及如何处理消息丢失、重复消费等问题。
  2. 性能开销
    • MQ的引入会带来一定的性能开销,包括消息的序列化/反序列化、网络传输、消息存储等。这些开销在消息量较小时可能不明显,但在高并发场景下可能会对系统性能产生影响。
  3. 一致性问题
    • 在分布式系统中,使用MQ进行异步通信可能会导致数据一致性问题。
    • 特别是当消息传递失败或消费者处理失败时,需要额外的机制来保证数据的一致性。
  4. 运维成本
    • MQ系统的运维成本相对较高。
    • 需要定期监控MQ的性能和状态,及时发现并解决问题。
    • 需要对MQ进行定期维护和升级,以确保其稳定性和安全性。
  5. 学习曲线
    • 对于不熟悉MQ的开发者来说,学习和掌握MQ技术需要一定的时间和精力。特别是对于复杂的MQ系统(如Kafka、RabbitMQ等),其配置和使用方法可能相对复杂。

四、常见的MQ产品

1. RabbitMQ

  • 特点
    • 基于AMQP(高级消息队列协议)的开源消息代理软件。
    • 提供了灵活的路由和消息传递功能,支持多种消息传递模式。
    • 适用于多种编程语言,具有广泛的社区支持和丰富的插件生态。
    • 支持集群和镜像队列,确保高可用性和数据持久性。
  • 适用场景:适用于需要灵活路由、广泛语言支持及良好社区生态的项目,特别是在对实时性要求不是特别高的通用场景中表现良好。

2. Kafka

  • 特点
    • 分布式流处理平台,具有高吞吐量和低延迟的特点。
    • 支持消息的持久化存储和分区,保证数据的可靠性和顺序性。
    • 适用于大数据处理和流计算场景,如实时日志收集、流式数据处理等。
    • 分布式架构和水平扩展能力,支持大规模消息处理需求。
  • 适用场景:适合大数据处理、流计算场景,以及对吞吐量、持久化有极高要求且愿意投入资源进行运维的项目。

3. RocketMQ

  • 特点
    • 阿里巴巴开源的消息中间件,具有高性能和低延迟的特点。
    • 支持分布式事务消息,确保在分布式系统中的消息发送与业务操作要么全部成功,要么全部回滚。
    • 适用于金融、电商等对性能、事务处理要求严苛的场景。
    • 经历过双十一等极端场景考验,具有大规模生产环境验证。
  • 适用场景:尤其适合金融、电商等对性能、事务处理要求严苛,且愿意投入精力学习和维护的大型分布式系统。

4. ActiveMQ

  • 特点
    • 历史悠久的消息队列产品,社区成熟,稳定性良好。
    • 支持多种消息协议(JMS、AMQP、STOMP等),易于与其他系统集成。
    • 相较于其他MQ产品,ActiveMQ在资源消耗上较为轻量,适合小型项目或对资源敏感的场景。
  • 适用场景:适用于小型项目、资源有限或对消息队列功能需求较简单的场景。但需要注意的是,ActiveMQ的单机吞吐量相对较低,不适合大规模消息处理。

5. ZeroMQ

  • 特点
    • 高性能、低延迟的消息库,提供了多种消息传递模式。
    • 适用于需要高速、低延迟消息传递的场景。
    • 支持多种编程语言和平台,但相对于其他MQ产品,其社区支持和文档可能较为有限。

五、MQ的应用场景

1. 异步通信

  • 异步下单、支付:在电商系统中,用户下单或支付时,可以将订单或支付请求发送到MQ,由后台服务异步处理,从而提高系统响应速度和用户体验。
  • 异步日志处理:将系统日志发送到MQ,由专门的日志处理服务异步处理,避免日志处理对主业务的影响。

2. 分布式系统

  • 分布式任务调度:在分布式系统中,可以利用MQ进行任务的分发和调度,确保任务能够被正确执行。
  • 分布式事务处理:MQ可以作为分布式事务的中间件,通过消息的最终一致性来保证分布式事务的一致性。例如,在支付系统中,可以将支付请求和支付结果通过MQ进行传递,确保支付过程的可靠性和一致性。

3. 系统解耦

  • 模块间解耦:通过MQ将系统的不同模块解耦,使得模块之间可以独立进行开发、测试和部署,降低系统间的依赖和复杂度。
  • 日志收集、异常监控:利用MQ收集各个系统的日志和异常信息,由专门的监控服务进行处理和分析,提高系统的稳定性和可维护性。

4. 流量削峰

  • 秒杀、活动抢购:在高并发场景下,通过MQ将请求存储到队列中,由后台服务异步处理,从而削平流量峰值,避免系统崩溃或响应变慢。
  • 限流保护:通过MQ对请求进行限流保护,防止系统因请求过多而崩溃。

5. 消息通知

  • 订单状态变更通知:在电商系统中,当订单状态发生变化时,可以通过MQ将状态变更信息发送给用户或相关系统。
  • 短信验证码发送:在用户注册、登录等场景中,通过MQ将短信验证码发送给用户,提高系统的安全性和用户体验。

6. 数据同步

  • 缓存同步:在分布式缓存系统中,可以利用MQ将缓存更新信息同步到各个缓存节点,确保缓存数据的一致性。
  • 库存同步:在电商系统中,当商品库存发生变化时,可以通过MQ将库存更新信息同步到各个相关系统,确保库存数据的准确性。

7. 消息广播

  • 实时消息推送:在新闻、社交等应用中,可以利用MQ将实时消息推送给用户,提高用户粘性和活跃度。
  • 系统通知:在系统维护、升级等场景中,可以通过MQ将系统通知发送给相关人员或系统,确保信息的及时传递和处理。

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

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

相关文章

vulntarget-b

实际部署之后centos7 的ip有所变动分别是 :192.168.127.130以及10.0.20.30 Centos7 老规矩还是先用fscan扫一下服务和端口,找漏洞打 直接爆出来一个SSH弱口令…,上来就不用打了,什么意思??? 直接xshell…

STM32--HAL库--定时器篇

一:如何配置定时器 打开对应工程串口配置好的工程(上一篇博客)做如下配置: 定时器的中断溢出时间计算公式是: 由图得T100*1000/100MHz 注:100MHz100000000 所以溢出时间等于1ms 关于上图4的自动重装…

【网络安全】文件上传黑白名单及数组绕过技巧

不安全的文件上传(Unsafe FileUpload) 不安全的文件上传是指Web应用程序在处理用户上传的文件时,没有采取足够的安全措施,导致攻击者可能利用这些漏洞上传恶意文件,进而对服务器或用户造成危害。 目录 一、文件上传…

Unity横板动作游戏 - 素材导入和整理

导入素材 编辑器布局 点击每个窗口右上角的三个点可以有更多的窗口选项。 在屏幕的右上角有一个菜单可以保存布局或读取已经报错的布局。 工具按钮 编辑器上的工具按钮在启动的时候是蓝色的,在不启动的时候是灰色的。 这个按钮将会决定场景中的物体是以锚点显示还…

Oracle配置TCPS加密协议测试

文章目录 一、环境信息二、配置过程1.创建证书2.监听配置2.1.配置sqlnet.ora2.2.配置listener.ora文件2.3.配置tnsnames.ora文件2.4.重载监听 3.数据库本地测试3.1. tcps登录测试3.2.日志监控 一、环境信息 操作系统:Linux 版本信息:Oracle 19c 参考文档…

EXCEL自动公式计算始终为0

如果你的数据单元格的左上角存在绿色的三角小箭头,那么就会造成这种问题: 你的数字是以文本形式存入的单元格 解决办法: 选中数据列,数据->分列 直接选择完成 此时就可以进行公式计算了

pytest结合allure-pytest插件生成测试报告

目录 一、安装allure-pytest插件 二、下载allure 三、生成allure报告 四、效果展示 一、安装allure-pytest插件 二、下载allure 下载之后解压,解压之后还要配置环境变量(把allure目录下bin目录配置到系统变量的path路径),下…

企业化运维(8)Docker容器技术

###1.Docker介绍### 什么是Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间…

2024后端开发面试题总结

一、前言 上一篇离职贴发布之后仿佛登上了热门,就连曾经阿里的师兄都看到了我的分享,这波流量真是受宠若惊! 回到正题,文章火之后,一些同学急切想要让我分享一下面试内容,回忆了几个晚上顺便总结一下&#…

全栈嵌入式C++、STM32、Modbus、FreeRTOS和MQTT协议:工业物联网(IIoT)可视化系统设计思路(附部分代码解析)

项目概述 随着工业4.0时代的到来,工业物联网(IIoT)在提高生产效率、降低运营成本和实现智能制造方面得到了广泛应用。本项目旨在开发一个全面的工业物联网监控系统,能够实时监测设备的温度、压力、振动和电流等参数,并…

谷粒商城实战踩坑笔记-Service循环依赖

文章目录 1. 使用 Lazy 注解2. 使用 PostConstruct 注解3,补充循环依赖相关知识循环依赖的原因举例说明 4,Lazy 的工作原理 启动项目失败,原因是出现了循环依赖。 The dependencies of some of the beans in the application context form a …

PP 6 成本中心 活动类型 以及两者的关联

成本中心创建:KS01 保存即可 活动类型:KL01 (有准备,机器,工时等) 保存 KP26:活动类型和成本中心的关联

如何在Net8.0平台下开发AOT项目,项目实战分析

1. 前言 前面的文章我们讨论过什么是AOT,以及AOT适用于什么场景, dotnet开发编译之争:Ahead-of-Time(AOT) vs Just-in-Time(JIT)谁才是未来最佳编译选择?,那么如何在Net8.0平台下开发AOT项目。 2. 先决条件 在安装的…

搞懂数据结构与Java实现

文章链接:搞懂数据结构与Java实现 (qq.com) 代码链接: Java实现数组模拟循环队列代码 (qq.com) Java实现数组模拟栈代码 (qq.com) Java实现链表代码 (qq.com) Java实现哈希表代码 (qq.com) Java实现二叉树代码 (qq.com) Java实现图代码 (qq.com)

【讲解下ECMAScript和JavaScript之间有何区别?】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

swagger-ui.html报错404

问题1:权限受限无法访问 由于采用的Shiro安全框架,需要在配置类ShiroConfig下的Shiro 的过滤器链放行该页面:【添加:filterChainDefinitionMap.put("/swagger-ui.html", "anon");】 public ShiroFilterFact…

C# dataGridView 去掉左边多出来空列

1.问题 在使用winform做界面程序时,dataGridView控件创建好后,左侧会多出一列为空,如何删除呢 2.解决方法 你可以在属性窗口中进行设置 如图: 将RowHeadersVisible 属性设置为False 或者代码设置 this.dataGridView1.RowHea…

算力共享:如何理解、标识与调控多层次算力资源的异构性和复杂性,实现智能算力网生态诸要素有效互操作?

目录 鹏程云主机和NPU计算服务器关系 NPU计算服务器 两者关系 结论 两种不同类型的处理器或计算单元 FPGA MLU NS3(Network Simulator version 3) 一、基本属性 二、主要功能与特点 三、应用与前景 对象存储和HDD存储 一、定义与特点 二、应用场景 三、总结 对…

基于深度学习网络的USB摄像头实时视频采集与水果识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 将usb摄像头对准一个播放不同水果图片的显示器,然后进行识别,识别结果如下: 本课题中…

【2025留学】德国留学真的很难毕业吗?为什么大家不来德国留学?

大家好!我是德国Viviane,一句话讲自己的背景:本科211,硕士在德国读的电子信息工程。 之前网上一句热梗:“德国留学三年将是你人生五年中最难忘的七年。”确实,德国大学的宽进严出机制,延毕、休…