目录

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 的开销

[RabbitMQ--1] MQ简介相关推荐

  1. 【MQ】【day1】软件安装+MQ简介

    一.软件安装 (留档,网络配置选择) 二.MQ基础 1.中间件 应用-中间件-系统 2.消息中间件 适用于任何需要进行网络通信的系统,负责建立网络通信的通道,进行数据或文件发送.消息中间件的一个重要作 ...

  2. php消费rabbitmq消息QoS,简介Rabbitmq的几种消费模式

    前言 在日常开发中,消息队列能帮我们解决系统的异步问题,流量的控制和服务解耦,不同的消息队列有不同的消费模型 思考 redis也可以实现消息队列(list和stream),也称为轻量级消息队列,lis ...

  3. RabbitMQ(一):简介和基本概念

    一.简介 RabbitMQ是一个消息代理,可以将其视为邮局,它接受和转发消息. RabbitMQ和邮局之间的主要区别在于它不处理纸张,而是接受.存储.转发二进制blob数据 - 消息. 二.队列 队列 ...

  4. RabbitMQ (一) MQ介绍以Linux下RabbitMq环境安装

    1,MQ 相关介绍 1.1 什么是MQ MQ(Message Queue)消息队列,是基础数据结构中"先进先出"的一种数据结构.一般用来解决应用解耦,异步消息,流量削锋等问题,实现 ...

  5. RabbitMQ——simple MQ

    Simple MQ 在此之前,先安装rabbitMQ,我是在docker上直接部署的,docker-compose.yml如下: version: '3' services:rabbitmq:imag ...

  6. RabbitMQ入门(简介、搭建环境、五种工作模式)介绍

    1. RabbitMQ介绍 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消 ...

  7. RabbitMQ(mq) 如何处理高并发、负载均衡、消息幂等性、丢失、消息顺序错乱问题?

    目录 介绍: 1.连接器(connection): 2.信道.通道(channel): 3.交换机(exchange): 4.队列(queue): 以下通过两个例子,让我们先来对rabbitmq 有个 ...

  8. MQ的常用场景及常见的MQ简介

    MQ(Message Queue)是一个常用的消息中间件,在各种场景都能见到MQ的身影,其最主要的三个场景分别是异步.解耦.削峰. 异步:当一个交易的链路涉及多个系统的互相调用时,系统处理完毕,返回结 ...

  9. SpringBoot高级消-息-RabbitMQ基本概念简介

    首先对RabbitMQ做一个简单的介绍,和快速入门,RabbitMQ是我们的AMQP,就是我们高级消息队列的一个实现产品,他的稳定性和可靠性呢非常高,也是我们现在一个非常流行的一个消息中间件,那么我们 ...

最新文章

  1. 【OpenCV 4开发详解】窗口交互操作
  2. 关于导入springboot配置文件相关问题
  3. POJ2299 Ultra-QuickSort
  4. C# 使用反射设置某个对象的属性或读取某个对象的属性
  5. 图文并茂的带你彻底理解悲观锁与乐观锁
  6. 其实跑步花不了多少时间
  7. *【POJ - 3659】Cell Phone Network (树形dp,最小支配集)
  8. 给javascript初学者的24条最佳实践
  9. 执行ios命令_MEDUZA:一款针对iOS应用程序的通用SSL解绑工具
  10. linux服务器开发板,linuxnfs服务器的建立,虚拟机、开发板间的通信
  11. swoole开发 php爬虫,PHP使用swoole实现多线程爬虫
  12. 一文详解 React 组件类型
  13. 【ASM】udev简介及配置、多路径(multipath)等
  14. Bailian4148 生理周期【枚举+中国剩余定理】
  15. 分布式存储系统设计的关键问题
  16. 「版本升级」MyEclipse CI 2018.12.0正式发布
  17. 构建freeswitch, make cd-moh-install提示文件错误
  18. 计算机基础知识总结(一)
  19. 如何让 MacBook 最适化 macOS Big Sur 和 Monterey 电池
  20. P1129 [ZJOI2007]矩阵游戏 (匈牙利算法)

热门文章

  1. 目标检测的评价指标P,R,mAP
  2. windows10如何开机自动运行bat文件
  3. 文献阅读:SNCSE: Contrastive Learning for Unsupervised Sentence Embedding with Soft Negative Samples
  4. review 9.29 viv 逃命 递归数列
  5. Python 网络编程之网络协议(未完待续)
  6. IOS 版 Opera 已不再更新
  7. ’Hive快速入门课程视频【菜鸟窝出品】
  8. 二、docker 镜像容器常用操作(让我们用docker 溜得飞起)
  9. Java——反射机制(下)
  10. 电脑pin码忘了登录不进系统_关windows10PIN码是什么?如何取消windows10系统的pin码?...