MQ 学习汇总

MQ 学习汇总

什么是MQ

MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。
MQ的三大主要作用 应用解耦、异步提速、流量削锋
应用解耦
系统的耦合性越高,容错性就越低,可维护性就越低。
MQ 学习汇总
异步提速模拟

MQ 学习汇总
一个下单操作耗时:20 + 300 + 300 + 300 = 920ms 用户点击完下单按钮后,需要等待920ms才能得到下单响应,太慢
MQ 学习汇总
用户点击完下单按钮后,只需等待25ms就能得到下单响应 (20 + 5 = 25ms)。 提升用户体验和系统吞吐量(单位时间内处理请求的数目)。

流量削峰
MQ 学习汇总
使用了 MQ 之后,限制消费消息的速度为1000,这样一来,高峰期产生的数据势必会被积压在 MQ 中,高峰就被“削”掉了,但是因为消息积压,在高峰期过后的一段时间内,消费消息的速度还是会维持在1000,直到消费完积压的消息,这就叫做"填谷"

MQ的劣势MQ 学习汇总

系统可用性降低
系统复杂度提高
一致性问题

既然 MQ 有优势也有劣势,那么使用 MQ 需要满足什么条件呢?
1.生产者不需要从消费者处获得反馈。引入消息队列之前的直接调用,其接口的返回值应该为空,这才让明明下层的动作还没做,上层却当成动作做完了继续往后走,即所谓异步成为了可能。
2.容许短暂的不一致性。
3.确实是用了有效果。即解耦、提速、削峰这些方面的收益,超过加入MQ,管理MQ这些成本。

常见的MQ产品
MQ 学习汇总
RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,也有直接使用 Redis 充当消息队列的案例,而这些消息队列产品,各有侧重,在实际选型时,需要结合自身需求及 MQ 产品特征,综合考虑

RabbitMQ:综合性能最高 万级 微秒级
ActiveMQ:太老
RocketMQ :阿里产品 十万级 毫秒级(最好)
Kafka:十万级 支持MQ基本功能主要用于大数据领域

RabbitMQ的环境配置和安装

资料:
链接:https://pan.baidu.com/s/1iE2R7vF2rGfAV4lcurn0aQ
提取码:k33d

RabbitMQ依靠的开发语言为Erlang,所以如果想使用RabbitMQ服务,首先一定要在系统进行此开发环境的配置。连接中可下载Erlang开发包Windows版和RabbitMQServer端Windows版进行安装。

win+R输入cmd
跳转到 RabbitMQ的sbin目录
cd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.9\sbin

开启管理界面
rabbitmq-plugins enable rabbitmq_management

启动服务
rabbitmq-server.bat start

RabbitMQ在安装好后,可以访问http://ip地址:15672 ;其自带了guest/guest的用户名和密码;如果需要创建自定义用户;那么也可以登录管理界面后,进行更改

角色说明:
1、 超级管理员(administrator)
可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
2、 监控者(monitoring)
可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
3、 策略制定者(policymaker)
可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
4、 普通管理者(management)
仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
5、 其他
无法登陆管理控制台,通常就是普通的生产者和消费者

Virtual Hosts配置
像mysql拥有数据库的概念并且可以指定用户对库和表等操作的权限。RabbitMQ也有类似的权限管理;在RabbitMQ中可以虚拟消息服务器Virtual Host,每个Virtual Hosts相当于一个相对独立的RabbitMQ服务器,每个VirtualHost之间是相互隔离的。exchange、queue、message不能互通。 相当于mysql的db。Virtual Name一般以/开头。
MQ 学习汇总
MQ 学习汇总
MQ 学习汇总
MQ 学习汇总

组成部分说明:

Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue
Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的
Producer:消息生产者,即生产方客户端,生产方客户端将消息发送
Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。
————————————————
版权声明:本文为CSDN博主「kavito」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kavito/article/details/91403659

模式

简答模式
https://blog.csdn.net/qq_38063429/article/details/112325350?spm=1001.2014.3001.5501
工作模式
https://blog.csdn.net/qq_38063429/article/details/112348040?spm=1001.2014.3001.5501
发布订阅模式
https://blog.csdn.net/qq_38063429/article/details/112350952?spm=1001.2014.3001.5501
Routing路由模式
https://blog.csdn.net/qq_38063429/article/details/112359141?spm=1001.2014.3001.5501
Topics通配符模式
https://blog.csdn.net/qq_38063429/article/details/112361254?spm=1001.2014.3001.5501

springboot 整合RabbitMQ

生产端
1. 创建生产者SpringBoot工程
2. 引入start,依赖坐标
``

	<dependency>
        		<groupId>org.springframework.boot</groupId>
        		<artifactId>spring-boot-starter-amqp</artifactId>
 	</dependency>

``

4. 编写yml配置,基本信息配置
5. 定义交换机,队列以及绑定关系的配置类
6. 注入RabbitTemplate,调用方法,完成消息发送

消费端
1. 创建消费者SpringBoot工程
2. 引入start,依赖坐标

``

	<dependency>
        		<groupId>org.springframework.boot</groupId>
        		<artifactId>spring-boot-starter-amqp</artifactId>
 	</dependency>

``
3. 编写yml配置,基本信息配置
4. 定义监听类,使用@RabbitListener注解完成队列监听。

***总结***
SpringBoot提供了快速整合RabbitMQ的方式
基本信息再yml中配置,队列交互机以及绑定关系在配置类中使用Bean的方式配置
生产端直接注入RabbitTemplate完成消息发送
消费端直接使用@RabbitListener完成消息接收
上一篇:消息中间件 - MQ的相关概念


下一篇:C/C++技术常用网站