关于mq:系统学习消息队列RabbitMQ的基础概念

5次阅读

共计 2660 个字符,预计需要花费 7 分钟才能阅读完成。

1. 什么是 MQ

2. 为什么要应用 MQ

3.MQ 的分类和抉择

4.RabbitMQ 的根底概念

5.RabbitMQ 的装置

1. 什么是 MQ
MQ(message queue),全名为音讯队列,接下来咱们从数据结构、操作系统和日常开发的角度来解释一下这个概念。
从数据结构的角度上来看:
MQ 是一个队列,领有先进先出个性的一种数据结构。

从操作系统的角度上来看:
操作系统上有一个概念,叫做管道通信。所谓管道,就是连贯一个读线程和一个写线程,以实现它们之间的通信的一个共享文件。有了管道,就意味着两个线程能够一边写,一边读,既不必放心读写管制的问题,也能够防止写过程忙碌 / 读过程闲暇或者写过程闲暇 / 读过程忙碌造成的阻塞,使两个过程有一个很好的解耦。

从日常开发的角度上来看:
咱们在日常开发的时候,常常会须要有排队、异步、限流等操作,有了 mq 当前,音讯只须要发送给 mq,不必依赖其它服务。

2. 为什么要应用 MQ
咱们应用 mq 个别有三个目标:削峰填谷,利用解耦,异步解决,咱们来挨个解释一下这三个概念。

2.1)削峰填谷
假如当初有一个电商零碎,一秒钟能解决一万个申请,在失常的时间段,零碎的生产能力齐全能够消化。然而在秒杀 / 流动 / 热品的顶峰期间,如果一瞬间有两万个申请,那么这个时候操作系统是解决不了的,当初有了 MQ,咱们就能够把所有的音讯放在 MQ 里,而后让零碎能生产的速度进行解决,就达到了流量的一个削峰。

在服务器应用顶峰后,往往会有一段低谷,就把生产不过去的那一部分订单丢到零碎应用低谷期间进行解决,这就是削峰填谷。

2.2)利用解耦
咱们假如还是一个电商零碎,其中会有领取,订单,库存,物流等零碎,当用户下单时,上游零碎挨个调用上游零碎,然而任何一个子系统呈现了故障,下单都会失败,用户体验不佳。当零碎调用形式变为音讯队列的时候,咱们只须要把音讯发送给其它零碎,就算其它零碎出了故障,也能够保障本人的零碎胜利,在故障复原之后,因为音讯还能够保留在 mq 当中,能够持续生产,两头用户感知不到某些零碎的异样,晋升零碎可用性。

2.3)异步解决
比方咱们当初有一个注册性能,有输出邀请码和不输出邀请码两个选项,如果输出邀请码,邀请者会取得处分。此时,咱们就能够让音讯队列来进行实现,把处分的逻辑放在队列的消费者外面,音讯生产者只须要实现注册逻辑,再发送一条音讯给队列,就能够大大减少逻辑的解决工夫,无需阻塞。

3.MQ 的分类和抉择

3.1)ActiveMQ

长处:单机吞吐量万级,时效性 ms 级,可用性高,基于主从架构实现高可用性,音讯可靠性较
低的概率失落数据

毛病: 官网社区当初对 ActiveMQ 5.x 保护越来越少,高吞吐量场景较少应用。

3.2)Kafka

长处: 性能卓越,单机写入 TPS 约在百万条 / 秒,最大的长处,就是吞吐量高。时效性 ms 级可用性十分高,kafka 是分布式的,一个数据多个正本,多数机器宕机,不会失落数据,不会导致不可用, 消费者采纳 Pull 形式获取音讯, 音讯有序, 通过管制可能保障所有音讯被生产且仅被生产一次; 有优良的第三方 KafkaWeb 治理界面 Kafka-Manager;在日志畛域比拟成熟,被多家公司和多个开源我的项目应用;性能反对:性能较为简单,次要反对简略的 MQ 性能,在大数据畛域的实时计算以及日志采集被大规模应用

毛病:Kafka 单机超过 64 个队列 / 分区,Load 会产生显著的飙高景象,队列越多,load 越高,发送音讯响应工夫变长,应用短轮询形式,实时性取决于轮询间隔时间,生产失败不反对重试;反对音讯程序,然而一台代理宕机后,就会产生音讯乱序,社区更新较慢;

3.3)RocketMQ

长处: 单机吞吐量十万级, 可用性十分高,分布式架构, 音讯能够做到 0 失落,MQ 性能较为欠缺,还是分布式的,扩展性好, 反对 10 亿级别的音讯沉积,不会因为沉积导致性能降落, 源码是 java 咱们能够本人浏览源码,定制本人公司的 MQ

毛病:反对的客户端语言不多,目前是 java 及 c++,其中 c++ 不成熟;社区活跃度个别, 没有在 MQ 外围中去实现 JMS 等接口, 有些零碎要迁徙须要批改大量代码

3.4)RabbitMQ

长处: 因为 erlang 语言的高并发个性,性能较好;吞吐量到万级,MQ 性能比拟齐备, 强壮、稳固、易用、跨平台、反对多种语言 如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,反对 AJAX 文档齐全;开源提供的治理界面十分棒,用起来很好用, 社区活跃度高;更新频率相当高

毛病:商业版须要免费, 学习老本较高

咱们采纳最近比拟火的 RabbitMq 作为切入点进行学习。

4.RabbitMQ 的根底概念
RabbitMQ 作为一款音讯队列,领有四大外围概念,咱们做一个初步的解说,后续会在实战中一直利用。

4.1)生产者
生产数据,往队列外面发信息的是生产者。

4.2)交换机
交换机在 Rabbitmq 中的作用是一个中转站的作用,一方面承受来自生产者的音讯,一方面将音讯推到队列中。交换机的工作十分重要,要把音讯转发到哪几个队列中,什么时候推,都由交换机决定。

4.3)队列
队列是 Rabbitmq 的主体局部,次要用于存储音讯,是一个音讯的缓冲区。许多生产者能够发送音讯到一个队列,一个队列也能够被多个消费者生产,应用相当自在。

4.4)消费者
从队列外面取音讯进行生产的是消费者。

架构图:

Broker:用于接管和发送音讯,是 mq 的外围

Connection:是生产者 / 消费者与 rabbitMq 之间的 tcp 链接。

Exchange:message 发送到队列的第一个节点,有不同的散发规定。罕用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout(multicast)

Binding:exchange 和 queue 之间的虚构连贯,binding 中能够蕴含 routing key,Binding 信息被保留到 exchange 中的查问表中,用于 message 的散发根据

Queue: 音讯保留的中央,音讯发送到这里筹备让 customer 生产

Channel:服务器和客户端之间的连贯,如果在大量生产者和消费者存在的时候,Connection 的开销是微小的。通常是由一个线程解决多个客户端的连贯,Channel 作为轻量级的 Connection 极大缩小了操作系统建设 TCP connection 的开销。

5.RabbitMQ 的装置

装置能够参考:https://blog.csdn.net/tirster…

正文完
 0