RabbimMQ简单介绍

简介: RabbimMQ简单介绍

什么是RabbimMQ

MQ(MessageQueue)消息队列,是分布式系统中的通信手段,在消息的传输过程中保存消息的容器,多用于分布式系统之间进行通信 RabbimMQ是MQ众多产品中表现比较优秀的产品之一

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

远程访问直接通信

通过第三方工具间接通信


MQ总结

1 MQ,消息队列.存储消息的中间价

2 分布式系统通信方式有两种:直接远程访问和借助第三方完成间接通信(MQ就属于后者)

3 发送方(生产消息)的称为生产者,接受方(消费)消息称为消费者


  1. MQ的优势和劣势

优势

1 应用解耦(提升系统的容错性和可维护性)

传统分布式系统 如果分布式系统中某个系统出错,会影响整个系统,系统的耦合性越高,容错率就越低,可维护性就越低


image.png


 使用MQ的分布式系统使得应用间解耦,提升容错性和可维护性


image.png


2 异步提速(提升用户体验和系统吞吐量)

传统分布式系统,一个操作要耗时大量时间,响应太慢,用户的体检比较差


image.png


使用MQ的分布式系统,异步处理,MQ只需要告诉用户操作成功或者失败,不需要管其他系统的反馈,提升用户体验和系统吞吐量(单位时间内处理请求的数目)


image.png


3 削峰填谷(提高系统稳定性)

传统的分布式系统,不能保证用户的并发量,如果并发量太大,系统会宕机,用户体检极差

image.png


使用MQ的分布式系统,全部的并发量不会直接访问系统,而是直接由MQ接收,然后再由系

统慢慢从MQ拉取请求进行处理,保证了系统的稳定性


image.png


image.png


劣势

  1 系统可用性降低

系统引入的外部依赖越多,需要维护保证稳定的东西就越多,一旦MQ宕机,就会对业务造成影响

  2 系统复杂度提高

MQ的加入大大的增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ异步调用,需要考虑并解决消息有没有被重复消费,怎么处理消息丢失情况,怎么保证消息传递的顺序性

  3 一致性问题

A系统处理完业务,通过MQ给B,C,D三个系统发消息数据,如果B系统,C系统处理成功,D系统处理失败,如何保证消息数据处理的一致性

  1. 使用MQ需要满足什么样的条件

1 生产者不需要从消费者处反馈,引入消息队列之前的直接调用,其接口的返回值应该为空

2 允许短暂的不一致性

3 确实使用之后有效果,即解耦,提速,削峰这些方面的收益超过加入MQ,管理维护MQ这方面的成本,如果是一个简单的功能,引用MQ之后让系统变得更为复杂,这就没有使用MQ的必要了

  1. 常见的MQ产品

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

RabbitMQ和Spring是一家公司,和Spring可依赖度很高


image.png


  1. RabbitMQ简介

AMQP协议

AMQP,即Advanced Message Queing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制,2006年,AMQP协议发布,类比HTTP协议


2007年,Rabbit技术公司基于AMQP协议标准开发RabbitMQ1.0发布,RabbitMQ采用Erlang语言开发,Erlang语言由Ericson设计,专门为开发高并发和分布式系统的一种语言,在商业广泛使用


RabbitMQ的六种工作模式

RabbitMQ提供了六种工作模式:simple简单模式、work工作模式、publish/subscribe订阅模式、routing路由模式、topic 主题模式、RPC远程调用模式。

JMS

JMS即Java服务(JavaMessageService)应用程序接口,是一个Java平台中关于面向消息中间件的API,它是JavaEE规范的一种,类似JDBC

很多消息中间件都实现类JMS规范,类如:ActiveMQ,但是RabbitMQ官方没有提供JMS的实现包,但是开源社区有,有免费的也有收费的

RabbitMQ总结

1 RabbitMQ是基于AMQP协议使用Erlang语言开发的一款消息队列产品

2 RabbitMQ提供了六种工作模式

3 AMQP是一个协议,类比HTTP

4 JMS是API规范接口,类比JDBC

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
存储 编解码 算法
信道编码概述 |带你读《5G空口特性与关键技术》之六
纠错编码的目的,是通过尽可能小的冗余开销确保接收端能自动地纠正数据传输中所发生的差错。在同样的误码率下,所需要的开销越小,编码的效率也就越高。
12218 2
信道编码概述 |带你读《5G空口特性与关键技术》之六
|
10月前
|
机器学习/深度学习
苹果发布高效双EMA梯度优化方法,适配Transformer、Mamba模型
苹果公司在arXiv上发布论文《The AdEMAMix Optimizer: Better, Faster, Older》,提出了一种基于双指数移动平均(EMA)的新型优化器AdEMAMix。该优化器通过使用快速和慢速EMA,同时利用近期和远期梯度信息,显著提升了模型训练的速度和效果。实验表明,AdEMAMix在语言建模和图像分类等任务上表现出色,尤其在大型语言模型的训练中,相比传统优化器如AdamW,训练效率提高了95%。
211 32
|
存储 缓存 NoSQL
【Java面试题汇总】Redis篇(2023版)
Redis的数据类型、zset底层实现、持久化策略、分布式锁、缓存穿透、击穿、雪崩的区别、双写一致性、主从同步机制、单线程架构、高可用、缓存淘汰策略、Redis事务是否满足ACID、如何排查Redis中的慢查询
【Java面试题汇总】Redis篇(2023版)
|
安全 Android开发 iOS开发
深入解析:安卓与iOS的系统架构及其对应用开发的影响
本文旨在探讨安卓与iOS两大主流操作系统的架构差异,并分析这些差异如何影响应用开发的策略和实践。通过对比两者的设计哲学、安全机制、开发环境及性能优化等方面,本文揭示了各自的特点和优势,为开发者在选择平台和制定开发计划时提供参考依据。
347 4
|
机器学习/深度学习 数据采集 分布式计算
【Python篇】深入机器学习核心:XGBoost 从入门到实战
【Python篇】深入机器学习核心:XGBoost 从入门到实战
1169 3
C 作用域详解
在 C 语言中,作用域决定了变量和函数的可见性和生命周期,包括块作用域、函数作用域、文件作用域和全局作用域。块作用域内的变量仅在块内有效,函数作用域内的变量在整个函数内有效,文件作用域内的全局变量和函数在整个文件内有效,而全局作用域内的变量和函数在整个程序运行期间有效。作用域的优先级遵循局部变量优先的原则,局部变量会遮蔽同名的全局变量。变量的生命周期分为局部变量(函数调用时创建和销毁)、全局变量(程序开始时创建和结束时销毁)以及静态变量(整个程序期间有效)。理解作用域有助于避免命名冲突和错误,提高代码的可读性和可维护性。
|
存储 移动开发 监控
微信支付开发避坑指南
【9月更文挑战第11天】在进行微信支付开发时,需遵循官方文档,确保权限和参数配置正确。开发中应注重安全,验证用户输入,合理安排接口调用顺序,并处理异常。上线后需实时监控支付状态,定期检查配置,关注安全更新,确保系统稳定运行。
255 3
|
Java Spring Maven
Struts 2遇见Spring:这个组合如何颠覆你的Web开发?
【8月更文挑战第31天】在现代Web开发中,Struts 2与Spring的结合使用能显著增强应用的模块化和可维护性。本文将介绍如何整合这两个框架,并提供代码示例。首先,在`pom.xml`中添加Struts 2和Spring的依赖,然后在`struts.xml`中配置Struts 2以识别Spring插件。接着,在Spring配置文件中定义bean,并在Struts 2的Action类中使用`@Autowired`注解进行自动注入。
230 0
|
Java 数据库 Spring
Spring 事务 (编程式 & 声明式, Spring 事务传播机制)
Spring 事务 (编程式 & 声明式, Spring 事务传播机制)
157 1
|
C# Windows
LabVIEW从命令行运行VI
LabVIEW从命令行运行VI
245 1