当前位置: 首页 > article >正文

《RabbitMQ篇》基本概念介绍

MQ功能

  1. 解耦
    MQ允许不同系统或组件之间松散耦合。发送者和接收者不需要直接连接,从而提高了系统的灵活性和可维护性。
  2. 异步处理
    使用MQ可以实现异步消息传递,发送者可以将消息放入队列后立即返回,不必等待接收者处理。这提高了系统的响应速度和吞吐量。
  3. 流量控制
    消息队列可以帮助平衡生产者和消费者之间的负载。当生产者发送消息的速度快于消费者处理的速度时,消息会在队列中积压,从而防止系统过载。
  4. 消息持久性
    许多MQ系统支持将消息持久化到磁盘,这确保了即使在系统崩溃的情况下,也能保证消息不会丢失。
  5. 延迟处理
    MQ可以设置延迟队列,使消息在特定时间后才被消费。这对于某些需要延时处理的场景非常有用。
  6. 可靠性
    通过消息确认机制,接收者可以确认已成功处理消息,未确认的消息可以重新发送。这增加了系统的可靠性。
  7. 分布式系统支持
    MQ非常适合分布式系统中的服务间通信,能够有效管理不同服务之间的消息传递。
  8. 事务支持
    一些消息队列支持事务,可以确保一组操作要么全部成功,要么全部失败,这对于确保数据一致性很重要。

基本概念

生产者

产生数据发送消息的程序是生产者

交换机

交换机是rabbitmq非常重要的一个部件,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中,交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或者是把消息丢弃,这个得有交换机类型决定。

队列

队列是rabbitmq内部使用的一种数据结构,尽管消息流经rabbtmq和应用程序,但它们只能存储在队列中,队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据,这就是我们使用队列的方式

消费者

消费与接收具有相似的含义,消费者大多时候是一个等待接收消息的程序。请注意生产者,消费

者和消息中间件很多时候并不在同一机器上。同一个应用程序既可以是生产者又是可以是消费者。

工作过程

Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker

Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 创建 exchange/queue 等

Connection:publisher/consumer 和 broker 之间的 TCP 连接

Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection 的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 thread 创建单独的 channel 进行通讯,AMQP method 包含了 channel id 帮助客户端和 message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销

Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发 消息到 queue 中去。常用的类型有:direct (point-to-point),topic (publish-subscribe) and fanout (multicast)

Queue:消息最终被送到这里等待 consumer 取走

Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key,Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据


http://www.kler.cn/news/328030.html

相关文章:

  • 用于多模态MRI重建的具有空间对齐的深度展开网络|文献速递--基于多模态-半监督深度学习的病理学诊断与病灶分割
  • 基于C++和Python的进程线程CPU使用率监控工具
  • 【Linux 报错】“make: ‘xxxx‘ is up to date.” 解决办法
  • 红米k60至尊版工程固件 MTK芯片 资源预览 刷写说明 与nv损坏修复去除电阻图示
  • 第四届高性能计算与通信工程国际学术会议(HPCCE 2024)
  • 工程安全监测分析模型与智能算法模型方案
  • Shp2pb:Shapefile转Protocol Buffers的高效工具
  • 深度学习:DCGAN
  • 微信小程序——婚礼邀请函
  • 仪器数码管数字识别系统源码分享
  • 如何查看Linux系统类型
  • 当微服务中调度返回大数据量时如何处理
  • IP和功能變數名稱的基礎知識-okeyproxy
  • UE(网络)
  • 基于Node.js+Express+MySQL+VUE科研成果网站发布查看科研信息科研成果论文下载免费安装部署
  • cf 975 div2 C(结论)E (树+思维)
  • 避免学术欺诈!在ChatGPT帮助下实现严格引用并避免抄袭
  • UE4_Niagara基础实例—6、蓝图与粒子系统的通信
  • Linux下的驱动开发一
  • 【无人机设计与技术】四旋翼无人机的建模
  • 舵机在无人机中的应用
  • Reactor 反应堆模式
  • 一文讲明白大模型分布式逻辑(从GPU通信原语到Megatron、Deepspeed)
  • 鸿蒙开发(NEXT/API 12)【硬件(注册智慧出行连接状态的监听)】车载系统
  • 咸鱼sign逆向分析与爬虫实现
  • IvorySQL 3.4:如何实现兼容Oracle风格的序列功能?
  • PHP爬虫APP程序:打造智能化数据抓取工具
  • 人工智能与机器学习原理精解【27】
  • Web APIs 6:正则表达式
  • AutoSar 通信服务架构,CAN通信诊断详解