零基础学习RabbitMQ(1)--概述

Rabbit是一个公司名,兔子的意思, MQ 即message Queue(消息队列)。RabbitMQ就是Rabbit公司开发的一个实现了AMQP的消息队列服务,是当前主流的消息中间件之一。

AMQP, 即Advanced Message Queuing Protocol(高级消息队列协议),是一个通用的应用层协议,提供统一消息服务的协议,为面向消息的中间件设计。基于此协议的客户端与消息中间件可以传递消息,并不受客户端或中间件,开发语言等条件的限制。

1. 什么是MQ

MQ (消息队列)从字面上看,本质上是个队列,先进先出,只不过存储的是消息。MQ多用于分布式系统之间进行通信。

系统之间的通信方式有两种:

  1. **同步通信:**直接调用对方的服务,数据从一端发出后立即就可以到达另一端。
  2. **异步通信:**数据从一端发出后,先进入一个容器进行临时存储,当到达某种条件后,再由这个容器发送给另一端。这里的容器就可以使用MQ

2. MQ的作用

MQ主要工作是接收并转发消息,在不同的应用场景下可以展现不同的作用

  1. **异步解耦:**在业务流程中,一些操作可能会非常耗时,但并不需要即时返回结果,可以借助MQ把这些操作异步化,例如用户修改信息后需要系统审核,不必让用户在修改界面等待审核成功而是可以直接去做其它操作。
  2. **流量削峰:**在访问量剧增时,例如秒杀或促销活动,服务器的处理速度跟不上就会崩溃,这时就可以使用MQ来控制量,将请求存储到MQ中,服务器根据自己的处理速度在MQ中获取请求进行处理。
  3. **消息分发:**当多个系统需要对同一数据做出响应时,也可也使用MQ进行消息分发,比如支付成功后,支付系统可以向MQ发送消息,其它系统订阅该消息,无需轮询数据库。
  4. **延迟通知:**在需要在待定时间后发送通知的场景中,可以使用MQ的延迟消息功能,比如在电子商务平台中,如果用户下单后一定时间内未支付,可以使用延迟队列在超时后自动取消订单。

3. 常见的MQ

目前业界有很多的MQ产品,例如RabbitMQ, RocketMQ, ActiveMQ, Kafka,ZeroMQ等,这些消息队列各有侧重,在实际选型时需要结合自身需求以及MQ产品特征,综合考虑

  • **Kafka:**Kafka一开始的目的就是用于日志收集和传输,追求高吞吐量,性能卓越,单机吞吐达到十万级,在日志领域比较成熟,功能较为简单,主要支持简单的MQ功能,如果有日志采集需求,可以首选Kafka
  • **RocketMQ:**RocketMQ采用Java语言开发,由阿里巴巴开源,后来捐赠给了Apache.设计时借鉴了Kafka,并作出了一些自己的改进,在可用性,可靠性,以及稳定性等方面都有出色的表现,适合对于可靠性比较高,且并非比较大的场景,比如互联网金融,但支持的客户端语言不多。
  • **RabbitMQ:**采用Erlang语言开发,MQ功能比较完备,几乎支持所有主流语言,开源提供的界面也非常优化,性能较好,吞吐量达到万级,社区活跃度也比较高,适合中小型公司,数据量没有那么大,且并发没有那么高的场景
相关推荐
武子康3 小时前
Java-82 深入浅出 MySQL 内部架构:服务层、存储引擎与文件系统全覆盖
java·开发语言·数据库·学习·mysql·spring·微服务
Rancemy3 小时前
rabbitmq 03
java·分布式·rabbitmq
黄雪超7 小时前
Kafka——多线程开发消费者实例
大数据·分布式·kafka
阿里巴巴淘系技术团队官网博客7 小时前
面向互联网2C业务的分布式类Manus Java框架
java·开发语言·分布式
霜绛7 小时前
机器学习笔记(三)——决策树、随机森林
人工智能·笔记·学习·决策树·随机森林·机器学习
sniper_fandc8 小时前
RabbitMQ—HAProxy负载均衡
分布式·rabbitmq·负载均衡
站住前面的二哈8 小时前
Cartographer安装测试与模块开发(三)--Cartographer在Gazebo仿真环境下的建图以及建图与定位阶段问题(实车也可参考)
学习·ubuntu
★YUI★8 小时前
学习游戏制作记录(克隆技能)7.25
学习·游戏·unity·c#
你想知道什么?9 小时前
RabbitMQ简述
分布式·rabbitmq
屁股割了还要学9 小时前
【C语言进阶】柔性数组
c语言·开发语言·数据结构·c++·学习·算法·柔性数组