[RabbitMQ--1] MQ简介

article/2025/10/22 4:52:49

目录

1.MQ 的相关概念

1.1.什么是 MQ?

1.2.为什么要用MQ?MQ的应用场景

1.2.1.流量消峰:

1.2.2.任务异步处理:

1.2.3.应用解耦

2.AMQP和JMS 

3.MQ 的分类

1.ActiveMQ

2.Kafka

3..RocketMQ

4..RabbitMQ

4.RabbitMQ

1.四大核心概念

生产者

交换机

队列

消费者

RabbitMQ的工作原理


1.MQ 的相关概念

1.1.什么是 MQ?

MQ(message queue):消息队列

“消息队列”是在消息的传输过程中保存消息的容器。它是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。

1.2.为什么要用MQ?MQ的应用场景

1.2.1.流量消峰:

举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正 常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限 制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分 散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体 验要好。

1.2.2.任务异步处理:

高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达MySQL,直接导致无数的行锁表锁,甚至最后请求会堆积过多,导致数据库崩溃。

通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。减少了应用程序的响应时间。

1.2.3.应用解耦

MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合,如果程序耦合度很高,其中一个模块出现异常可能会导致整个程序无法继续运行

以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合 调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常。当转变成基于 消息队列的方式后,系统间调用的问题会减少很多,比如物流系统因为发生故障,需要几分钟来修复。在 这几分钟的时间里,物流系统要处理的内存被缓存在消息队列中,用户的下单操作可以正常完成。当物流 系统恢复后,继续处理订单信息即可,中单用户感受不到物流系统的故障,提升系统的可用性。

2.AMQP和JMS 

MQ是消息通信的模型,并发具体实现。现在实现MQ的有两种主流方式:AMQP、JMS。

两者间的区别和联系:

  • JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式

  • JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。

  • JMS规定了两种消息模型;而AMQP的消息模型更加丰富

3.MQ 的分类

1.ActiveMQ

        优点:单机吞吐量万级,时效性 ms 级,可用性高,基于主从架构实现高可用性,消息可靠性较 低的概率丢失数据

        缺点:官方社区现在对 ActiveMQ 5.x 维护越来越少,高吞吐量场景较少使用。

2.Kafka

大数据的杀手锏, 百万级 TPS 的吞吐量,在数据采集、传输、存储的过程中发挥着举足轻重的作用。

        优点: 性能卓越,就是吞吐量高。kafka 是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用,在日志领域比较成熟,

         缺点:Kafka 单机超过 64 个队列/分区,Load 会发生明显的飙高现象,队列越多,load 越高,发送消 息响应时间变长,使用短轮询方式,实时性取决于轮询间隔时间,消费失败不支持重试;支持消息顺序, 但是一台代理宕机后,就会产生消息乱序,社区更新较慢;

3..RocketMQ

RocketMQ 出自阿里巴巴的开源产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了自己的一 些改进。被阿里巴巴广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog 分发等场景。

        优点:单机吞吐量十万级,可用性非常高,分布式架构,消息可以做到 0 丢失,MQ 功能较为完善,支持 10 亿级别的消息堆积,不会因为堆积导致性能下降

        缺点:支持的客户端语言不多,目前是 java 及 c++,其中 c++不成熟;社区活跃度一般,没有在 MQ 核心中去实现 JMS 等接口,有些系统要迁移需要修改大量代码

4..RabbitMQ

2007 年发布,是一个在 AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最 主流的消息中间件之一。

        优点:由于 erlang 语言的高并发特性,性能较好;吞吐量到万级,MQ 功能比较完备,跨平台、支持多种语言,支持 AJAX 文档齐全;社区活跃度高;更新频率相当高 

        缺点:商业版需要收费,学习成本较高

4.RabbitMQ

RabbitMQ 是一个消息中间件:它接受并转发消息。

1.四大核心概念

生产者

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

交换机

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

队列

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

消费者

        消费与接收具有相似的含义。消费者大多时候是一个等待接收消息的程序。请注意生产者,消费 者和消息中间件很多时候并不在同一机器上。同一个应用程序既可以是生产者又是可以是消费者。

RabbitMQ的工作原理

组成部分说明:

  • Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue
  • Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
  • Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的
  • Producer:消息生产者,即生产方客户端,生产方客户端将消息发送
  • Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。
  • Connection:生产者,消费者和 broker 之间的 TCP 连接
  • Channel:信道、Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销


http://chatgpt.dhexx.cn/article/V4v4PZFv.shtml

相关文章

什么是RabbitMq?其原理?

什么是RabbitMq? RabbitMQ是一个实现了AMQP(Advanced Message Queuing Protocol)高级消息队列协议的消息队列服务,用Erlang语言。 rabbitmq原理 1.Producer:即数据的发送方。创建消息并将其发布(发送)到代理服务器 一…

RabbitMQ原理详解

RabbitMQ:我们通常谈到消息队列,就会联想到这其中的三者:生产者、消费者和消息队列,生产者将消息发送到消息队列,消费者从消息队列中获取消息进行处理。对于RabbitMQ,它在此基础上做了一层抽象,…

你应该知道的 9 种 前端设计模式

本篇文章给大家介绍 9 种 前端设计模式。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 什么是设计模式? 设计模式是对软件设计开发过程中反复出现的某类问题的通用解决方案。设计模式更多的是指导思想和方法论&#xff…

前端需要了解的设计模式

什么是设计模式? 设计模式是对软件设计开发过程中反复出现的某类问题的通用解决方案。设计模式更多的是指导思想和方法论,而不是现成的代码,当然每种设计模式都有每种语言中的具体实现方式。学习设计模式更多的是理解各种模式的内在思想和解…

前端设计模式应用

前端设计模式应用 什么是设计模式 软件设计中常见问题的解决方案模型: 历史经验的总结与特定语言无关 设计模式背景 模式语言:城镇、建筑、建造 (A Pattern Language:Towns, Buildings,Construction)1977设计模式:可复用面向对象软件的基础 (Design Patterns: Elements of …

web端设计和web前端开发的区别

Web前端开发技术主要包括三个要素:HTML、CSS和JavaScript! 它要求前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化、SEO和服务器端的基础知识,而且要学会运用各种工具进行辅助开发以及理论层面的知识,包括…

前端开发中常用设计模式-总结篇

本文是向大家介绍前端开发中常用的设计模式,它使我们编写的代码更容易被复用,也更容易被人理解,并且保证代码的稳定可靠性。 1.什么是设计模式 通俗来讲,就是日常使用设计的一种惯性思维。 因为对应的这种思维,以及对…

前端的设计模式有哪些呢

谈谈设计模式~ 文章目录 什么是设计模式设计模式分类1. 结构型模式2. 创建型模式3. 行为型模式具体使用 什么是设计模式 设计模式,是对软件设计开发过程中反复出现的某类问题的通用解决方案。设计模式是指一种思想和方法论,先有设计思想,才能…

【面试】最新web前端经典面试题试题及答案(持续更新)-html/css、js、vue、http、web安全、前端性能、浏览器、js算法

author: aSuncat JavaScript知识点大全:https://www.yuque.com/webfront/js 所有最新最全面试题,持续更新在语雀。见 语雀-前端面试题,欢迎点击关注~ 阅读目录 html/ css:https://blog.csdn.net/aSuncat/article/details/88789368…

为什么说前端一定要学好设计模式?

设计模式(Design Pattern)大家一定不陌生。通俗地讲,它是前辈们对代码开发经验的总结,让你写出可扩展、可读、可维护的高质量代码,还能让你在遇到相似的问题、场景时,快速找到更优的解决方案。 也许你会说&…

前端JS设计模式

什么是设计模式 软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 比…

前端开发中常用的几种设计模式有哪些

设计模式概览 设计模式是对软件设计开发过程中反复出现的某类问题的通用解决方案。设计模式更多的是指导思想和方法论,而不是现成的代码,当然每种设计模式都有每种语言中的具体实现方式。学习设计模式更多的是理解各种模式的内在思想和解决的问题&#…

前端需要了解的9种设计模式

前端需要了解的9种设计模式 什么是设计模式? 设计模式是对软件设计开发过程中反复出现的某类问题的通用解决方案。设计模式更多的是指导思想和方法论,而不是现成的代码,当然每种设计模式都有每种语言中的具体实现方式。学习设计模式更多的是…

前端设计模式

作为一个前端新人,学习了设计模式以后,希望能从源头上,用浅显易懂的语言来解释它。当然不一定是正确的,只是我个人对设计模式的一点浅显理解。 创建型设计模式 创建型设计模式:故名思意,这些模式都是用来创…

web前端设计模式

文章目录 浅谈设计模式1.设计模式是什么2.为什么要学设计模式3.SOLID设计原则4.设计模式的核心思想—封装变化5.23种常见设计模式 创建型一、工厂模式(Factory Pattern)简单工厂1.解决的问题:2.构造器3.使用步骤4.举例 抽象工厂 (…

前端常用的8种设计模式

文章目录 1.引入2.单例模式3.装饰器模式3.适配器模式4.观察者模式(发布订阅模式)5.策略模式6.模板模式7.代理模式8.外观模式9.面试点 1.引入 简介: 设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计…

前端JavaScript中常见设计模式

1、为啥会有这一篇 ? 前两天有个同学问我,然后组内同学也即将分享相关实践内容,此处 在他之前发出(早一天发布的发布会),good! 2、是何物? 组件化是前端非常重要的一块内容,现在流…

你必须要会的4种Web前端设计模式

在软件工程领域,设计模式是为了解决特定问题而产生的一些可复用的方法、模板。每一种设计模式都针对性解决某一类场景的问题。设计模式被认为是开发者解决通用问题的最佳实践。 通常我们学习的设计模式,大多数与面向对象的语言相关,比如Java。…

前端开发中常用的几种设计模式

设计模式概览 设计模式是对软件设计开发过程中反复出现的某类问题的通用解决方案。设计模式更多的是指导思想和方法论,而不是现成的代码,当然每种设计模式都有每种语言中的具体实现方式。学习设计模式更多的是理解各种模式的内在思想和解决的问题&#…

图像金字塔原理

一、图像缩小 先高斯模糊,再降采样,需要一次次重复,不能一次到底 二、图像扩大 先扩大,再卷积或者使用拉普拉斯金字塔 三、金字塔类型 1、高斯金字塔 用于下采样。 高斯金字塔是最基本的图像塔。 原理:首先将原图…