当前位置: 首页 > ops >正文

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

文章目录

  • 一、为什么使用MQ?MQ的优点
  • 二、消息队列有什么优缺点?RabbitMQ有什么优缺点?
  • 三、RocketMQ
    • 3.1 RabbitMQ基本概念
  • 四、使用手册

一、为什么使用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的唯一的线路。
在这里插入图片描述

四、使用手册

在这里插入图片描述

http://www.xdnf.cn/news/14910.html

相关文章:

  • EXCEL链接模板无法自动链接到PowerBI?试试这个方法
  • 数据分析-58-SPC统计过程控制的8个判异准则
  • 解决Maven“无法将类 XXXXX 中的构造器 XXXXXX 应用到给定类型”错误
  • WPA2 与 WPA3:深入解析Wi-Fi安全协议
  • 第0章:开篇词 - 嘿,别怕,AI应用开发没那么神!
  • Linux命令的命令历史
  • 安卓10.0系统修改定制化____recovery-from-boot.p文件的具体作用 在定制项目中的关联
  • stm32--SPI原理应用W25Q64(二)
  • 【力扣(LeetCode)】数据挖掘面试题0002:当面对实时数据流时您如何设计和实现机器学习模型?
  • vue openlayer 找出直线上的某一个点 , 点距离直线 最短路径的点 WKT坐标转换为GeoJSON坐标
  • xbox one controller DSLogic 逻辑分析仪截包
  • 商品中心—库存分桶高并发的优化文档
  • 谢飞机的Java高级开发面试:从Spring Boot到分布式架构的蜕变之旅
  • C++11标准库算法:深入理解std::none_of
  • Docker 将镜像打成压缩包将压缩包传到服务器运行
  • 创客匠人创始人IP打造实录:从行业观察者到生态构建者
  • Rust 所有权系统:深入浅出指南
  • MapReduce 学习
  • 【K线训练软件研发历程】【日常记录向】1.K线滑动窗口
  • DVWA | SQL Injection 数据库注入
  • Flutter 入门
  • ubuntu server系统 安装宝塔
  • 【算法训练营Day09】栈与队列part1
  • 内网使用rustdesk搭建远程桌面详细版
  • Angular V20 新特性
  • 初始图形学(11)
  • 揭秘C++继承机制:从基础到菱形继承全解析----《Hello C++ Wrold!》(13)--(C/C++)
  • 解决jenkins的Exec command命令nohup java -jar不启动问题
  • 每天一个前端小知识 Day 23 - PWA 渐进式 Web 应用开发
  • 异步Websocket构建聊天室