RabbitMQ第一章(MQ基础与RocketMQ使用手册)

文章目录

一、为什么使用MQ?MQ的优点

消息Broker,目前常见的实现方案就是消息队列(MessageQueue),简称为MQ.

MQ主要干三件事:解耦、异步、削峰。

解耦:一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但

是其实这个调用是不需要直接同步调用接口的,如果用 MQ 给它异步化解耦。

异步:A 系统接收一个请求,需要在自己本地写库,还需要在 BCD 三个系统写库,自己本地写库要

3ms,BCD 三个系统分别写库要 300ms、450ms、200ms。最终请求总延时是 3 + 300 + 450 + 200 =

953ms,接近 1s,用户感觉搞个什么东西,慢死了慢死了。用户通过浏览器发起请求。如果使用

MQ,那么 A 系统连续发送 3 条消息到 MQ 队列中,假如耗时 5ms,A 系统从接受一个请求到返回响应

给用户,总时长是 3 + 5 = 8ms。

削峰:减少高峰时期对服务器压力。

二、消息队列有什么优缺点?RabbitMQ有什么优缺点?

优点上面已经说了,就是在特殊场景下有其对应的好处,解耦、异步、削峰。

缺点有以下几个:
系统可用性降低

本来系统运行好好的,现在你非要加入个消息队列进去,那消息队列挂了,你的系统不是呵呵了。因

此,系统可用性会降低;
系统复杂度提高

加入了消息队列,要多考虑很多方面的问题,比如:一致性问题、如何保证消息不被重复消费、如何保

证消息可靠性传输等。因此,需要考虑的东西更多,复杂性增大。
一致性问题

A 系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是 BCD 三个系统那

里,BD 两个系统写库成功了,结果 C 系统写库失败了,咋整?你这数据就不一致了。

所以消息队列实际是一种非常复杂的架构,你引入它有很多好处,但是也得针对它带来的坏处做各种额

外的技术方案和架构来规避掉,做好之后,你会发现,妈呀,系统复杂度提升了一个数量级,也许是复

杂了 10 倍。但是关键时刻,用,还是得用的。

目比较常见的MQ实现:

ActiveMQ是老牌的消息中间件,国内很多公司过去运用的还是非常广泛的,功能很强大。

但是问题在于没法确认ActiveMQ可以支撑互联网公司的高并发、高负载以及高吞吐的复杂场景,在国

内互联网公司落地较少。而且使用较多的是一些传统企业,用ActiveMQ做异步调用和系统解耦。

国内各大互联网公司落地大规模RabbitMQ集群支撑自身业务的case较多,国内各种中小型互联网公司使用RabbitMQ的实践也比较多。

RabbitMQ的开源社区很活跃,较高频率的迭代版本,来修复发现的bug以及进行各种优化。

RcketMQ是大厂自研平常接触不到,kafka通常做日志管理较多。

三、RocketMQ

RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的消息中间件

常用于一下场景:

(1)服务间异步通信

(2)顺序消费

(3)定时任务

(4)请求削峰

3.1 RabbitMQ基本概念

Broker: 简单来说就是消息队列服务器实体

Exchange: 消息交换机,它指定消息按什么规则,路由到哪个队列

Queue: 消息队列载体,每个消息都会被投入到一个或多个队列

Binding: 绑定,它的作用就是把exchange和queue按照路由规则绑定起来

Routing Key: 路由关键字,exchange根据这个关键字进行消息投递

VHost: vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server。其内部均含有独立的

queue、exchange 和 binding 等,但最最重要的是,其拥有独立的权限系统,可以做到 vhost 范

围的用户控制。当然,从 RabbitMQ 的全局角度,vhost 可以作为不同权限隔离的手段(一个典

型的例子就是不同的应用可以跑在不同的 vhost 中)。

Producer: 消息生产者,就是投递消息的程序

Consumer: 消息消费者,就是接受消息的程序

Channel: 消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话

任务

由Exchange、Queue、RoutingKey三个才能决定一个从Exchange到Queue的唯一的线路。

四、使用手册

相关推荐
qq_529835354 小时前
RabbitMQ的消息可靠传输
分布式·rabbitmq
gtestcandle10 小时前
rabbitmq 的多用户、多vhost使用
分布式·rabbitmq
幼稚园的山代王14 小时前
RabbitMQ 4.1.1-Local random exchange体验
分布式·rabbitmq
紫璨月1 天前
rabbitMQ读取不到ThreadLocal消息的bug
rabbitmq·bug·java-rabbitmq
DavidSoCool3 天前
RabbitMQ使用topic Exchange实现微服务分组订阅
分布式·微服务·rabbitmq
Bug退退退1234 天前
RabbitMQ 高级特性之重试机制
java·分布式·spring·rabbitmq
Bug退退退1234 天前
RabbitMQ 高级特性之死信队列
java·分布式·spring·rabbitmq
m0_474606784 天前
RabbitMQ使用延迟插件实现延迟消息
java·rabbitmq
幼稚园的山代王4 天前
RabbitMQ 4.1.1初体验-队列和交换机
分布式·rabbitmq·ruby