ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MQ 学习汇总

2021-08-25 13:00:09  阅读:149  来源: 互联网

标签:队列 汇总 RabbitMQ 学习 MQ 消息 https net


MQ 学习汇总

什么是MQ

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

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

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

MQ的劣势请添加图片描述

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

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

组成部分说明:

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完成消息接收

标签:队列,汇总,RabbitMQ,学习,MQ,消息,https,net
来源: https://blog.csdn.net/qq_43121074/article/details/119908712

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有