消息队列入门学习

简介: 消息队列(Message Queue,简称 MQ)。是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统

消息中间件是什么


消息队列(Message Queue,简称 MQ)。是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统。

c0fbf216789a9dceda8e84df83fc7e02_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_11,color_FFFFFF,t_70,g_se,x_16.png

中间件的意思就是相当于一个中介,实际上就是生产者要给消费者发送消息,但是不是直接通知,而是借住消息中间件去通知。


消息中间件具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,也成为异步RPC的主要手段之一。


ActiveMQ


ActiveMQ 是由 Apache 出品的一款开源消息中间件,基于JMS,旨在为应用程序提供高效、可扩展、稳定、安全的企业级消息通信。


JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。


它的设计目标是提供标准的、面向消息的、多语言的应用集成消息通信中间件。所以ActiveMQ支持多种语言的客户端和协议。


RabbitMQ


由 Erlang 语言开发的基于 AMQP 协议的消息队列。轻量级,快速,部署使用方便,带有可视化的后台管理界面。


AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。


ActiveMQ和RabbitMQ都是老牌的消息中间件。


RocketMQ


RocketMQ 是阿里巴巴一个开源的消息队列,使用 Java 实现。前身是MetaQ,后来随着业务的激增,借鉴了 Kafka 的设计并做了很多改进,于是就出现了RocketMQ,现阿里已经将RocketMQ 捐赠给Apache基金会,意味着它将开源和有活跃的社区维护。


天生为金融互联网领域而生,对于可靠性要求很高的场景,尤其是电商里面的订单扣款,以及业务削峰,在大量交易涌入时,后端可能无法及时处理的情况。


KafKa


Kafka是Scala和Java开发的,对批处理和异步处理做了大量的设计,因此Kafka可以得到非常高的性能,尤其是大数据和云计算领域。


它的异步消息的发送和接收是三个中最好的,但是跟RocketMQ拉不开数量级,每秒处理几十万的消息。如果是异步消息,并且开启了压缩,Kafka最终可以达到每秒处理2000w消息的级别。


Kafka需要配合zookeeper进行元数据管理。


MQ作用


解耦

未解耦前,有一天需要接入A系统,然后在代码里面调用了A,接下来又需要接入B、C系统,又改了代码;忽然有一天,说A系统不需要接入了,又改了代码把它注释。

// 不需要调用A系统了,注释
// service.informA(message);
service.informB(message);
service.informC(message);


反复进行这样的工作,不仅效率低下,还十分麻烦。


而此时使用MQ,我就可以把消息交给mq去处理了,不用每次都要改我的代码了。

970b4e0b7011c48f3a0309d0fd4508de_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_19,color_FFFFFF,t_70,g_se,x_16.png

在淘宝这种核心交易系统,每笔交易订单数据的产生会引起几百个下游业务系统的关注,包括物流、购物车、积分、阿里妈妈、流计算分析等等,整体业务系统庞大而且复杂,架构设计稍有不合理,将直接影响主站业务的连续性;


通过 MQ 的异步化设计,即便下游子系统(如物流、积分等)出现不可用甚至宕机,都不会影响到核心交易系统的正常运转;而且通过 MQ 的异步化设计,也能随时接入新的系统,适应业务的变化。

b90e8f95e1b1d0216bde076041535c2d_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_15,color_FFFFFF,t_70,g_se,x_16.png


削峰

诸如秒杀、抢红包、企业开门红等大型活动时皆会带来较高的流量脉冲,或因没做相应的保护而导致系统超负荷甚至崩溃,或因限制太过导致请求大量失败而影响用户体验,削峰填谷是解决该问题的最佳方式;


通过 MQ 超高性能的消息处理能力可以承接流量脉冲而不被击垮,在确保系统可用性同时,因快速有效的请求响应而提升用户的体验。


可以把请求丢到MQ、服务器处理完了再去取请求。

a2b54beea1940c9fb510624699c03bb6_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_15,color_FFFFFF,t_70,g_se,x_16.png


顺序消息

如证券交易过程时间优先原则,交易系统中的订单创建、支付、退款等流程,航班中的旅客登机消息处理等等。与FIFO原理类似,MQ提供的顺序消息即保证消息的先进先出;

a58a2ac124fbea61f9439d1d32a19553_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_14,color_FFFFFF,t_70,g_se,x_16.png


分布式事务消息

阿里巴巴的交易系统、支付红包等场景需要确保数据的最终一致性,大量引入 MQ 的分布式事务,既可以实现系统之间的解耦,又可以保证最终的数据一致性;

4f4c14b8a50e333d965cd8d4c969a6e9_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_19,color_FFFFFF,t_70,g_se,x_16.png

相关文章
|
5月前
|
消息中间件 负载均衡 NoSQL
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
71 0
|
4月前
|
消息中间件 新零售 弹性计算
云消息队列 RabbitMQ 版入门训练营,解锁对比开源优势与零基础实战
欢迎加入「云消息队列 RabbitMQ 版入门训练营」。
164 13
|
4月前
|
消息中间件
云消息队列RabbitMQ版入门训练营 打卡领好礼
云消息队列RabbitMQ版入门训练营 打卡领好礼
55 3
|
3月前
|
消息中间件
快来体验 消息队列RabbitMQ版入门训练营 打卡学习领好礼
快来体验 消息队列RabbitMQ版入门训练营 打卡学习领好礼
62 0
|
6月前
|
消息中间件 存储 负载均衡
消息队列学习之RabbitMQ
【4月更文挑战第3天】消息队列学习之RabbitMQ,一种基于erlang语言开发的流行的开源消息中间件。
58 0
|
6月前
|
消息中间件 存储 负载均衡
消息队列学习之kafka
【4月更文挑战第2天】消息队列学习之kafka,一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台。
61 2
|
6月前
|
消息中间件 存储 缓存
消息队列学习之rocketmq
【4月更文挑战第1天】消息队列学习之rocketmq
45 0
|
6月前
|
消息中间件 存储 负载均衡
简单入门:消息队列的概念和应用
在复杂的系统架构中,组件间的通信是至关重要的问题。消息队列作为一种解决方案,能够使组件之间的通信更加高效、可靠。本文将从简单到复杂,逐步向您介绍消息队列的概念、使用场景以及如何实现。
290 3
|
6月前
|
消息中间件 存储 Kafka
MQ消息队列学习入门
MQ消息队列学习入门
119 0
|
消息中间件 大数据 Kafka
MQ 学习日志(二) 为什么使用消息队列,mq有什么优点和缺点
为什么使用消息队列,mq有什么优点和缺点
127 0
MQ 学习日志(二) 为什么使用消息队列,mq有什么优点和缺点