[RabbitMQ--1] MQ简介

[RabbitMQ--1] MQ简介,第1张

[RabbitMQ--1] MQ简介

目录

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和QueueExchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的Producer:消息生产者,即生产方客户端,生产方客户端将消息发送Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。Connection:生产者,消费者和 broker 之间的 TCP 连接Channel:信道、Channel 作为轻量级的 Connection 极大减少了 *** 作系统建立 TCP connection 的开销

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5717169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存