当前位置:网站首页>消息队列概述
消息队列概述
2022-08-10 09:24:00 【51CTO】
什么是消息队列
MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。
为什么使用MQ
在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
开发中消息队列通常有如下应用场景:
1、任务异步处理
将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。
2、应用程序解耦合
MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。
3、削峰填谷
如订单系统,在下单的时候就会往数据库写数据。但是数据库只能支撑每秒1000左右的并发写入,并发量再高就容易宕机。低峰期的时候并发也就100多个,但是在高峰期时候,并发量会突然激增到5000以上,这个时候数据库肯定卡死了。
消息被MQ保存起来了,然后系统就可以按照自己的消费能力来消费,比如每秒1000个数据,这样慢慢写入数据库,这样就不会卡死数据库了。
但是使用了MQ之后,限制消费消息的速度为1000,但是这样一来,高峰期产生的数据势必会被积压在MQ中,高峰就被“削”掉了。但是因为消息积压,在高峰期过后的一段时间内,消费消息的速度还是会维持在1000QPS,直到消费完积压的消息,这就叫做“填谷”。
AMQP 和 JMS
MQ是消息通信的模型;实现MQ的大致有两种主流方式:AMQP、JMS。
AMQP
AMQP是一种协议,更准确的说是一种binary wire-level protocol(链接协议)。这是其和JMS的本质差别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式。
JMS
JMS即Java消息服务(JavaMessage Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
AMQP 与 JMS 区别
- JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式
- JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。
- JMS规定了两种消息模式;而AMQP的消息模式更加丰富
消息队列产品
市场上常见的消息队列有如下:
ActiveMQ:基于JMS
ZeroMQ:基于C语言开发
RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好
RocketMQ:基于JMS,阿里巴巴产品
Kafka:类似MQ的产品;分布式消息系统,高吞吐量
特性 | ActiveMQ | RabbitMQ | RocketMQ | kafka |
---|---|---|---|---|
开发语言 | java | erlang | java | scala |
单机吞吐量 | 万级 | 万级 | 10万级 | 10万级 |
时效性 | ms级 | us级 | ms级 | ms级以内 |
可用性 | 高(主从架构) | 高(主从架构) | 非常高(分布式架构) | 非常高(分布式架构) |
功能特性 | 成熟的产品,在很多公司得到应用;有较多的文档;各种协议支持较好 | 基于erlang开发,所以并发能力很强,性能极其好,延时很低;管理界面较丰富 | MQ功能比较完备,扩展性佳 | 只支持主要的MQ功能,像一些消息查询,消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用广。 |
本文内容到此结束了,
如有收获欢迎点赞收藏关注️,您的鼓励是我最大的动力。
如有错误疑问欢迎各位大佬指出。
主页: 共饮一杯无的博客汇总保持热爱,奔赴下一场山海。
边栏推荐
- PTA Exercise 2.2 Rotate an Array Left
- 初识Flink 完整使用 (第一章)
- qrcode-----生成二维码
- ARM Architecture 2: Processor Core and Assembly Instruction Set
- Flink快速上手 完整使用 (第二章)
- js-----数组转换成树形结构
- 打工人的第27天-平凡但不平淡的日子
- Spotify expresses its architectural design using the C4 model
- shell------常用小工具,sort,uniq,tr,cut
- 【API架构】使用 JSON API 的好处
猜你喜欢
Defending risks with technology and escorting cloud native | Tongchuang Yongyi X Boyun held a joint product launch conference
「微服务架构」编曲与编舞——让系统协同工作的不同模式
DAY25:逻辑漏洞
shell之函数和数组
关于判断单峰数组的几种方法
凭借这份阿里架构师的万字面试手册,逆风翻盘,斩获阿里offer
UE4 Sequence添加基础动画效果 (04-在序列中使用粒子效果)
10 【异步组件 组合式函数(hooks)】
FPGA时钟篇(三) MRCC和SRCC的区别
FPGA的虚拟时钟如何使用?
随机推荐
日期类(暑假每日一题 19)
Shell functions and arrays
[Data Architecture] Distributed Data Grid as a Solution for Centralized Data Monolith
DAY25: Logic Vulnerability
13 【script setup 总结】
Controller层代码这么写,简洁又优雅!
用高质量图像标注数据加速AI商业化落地
【数据架构】分布式数据网格作为集中式数据单体的解决方案
Basic concepts of concurrency, operations, containers
打工人的第27天-平凡但不平淡的日子
PTA Exercise 2.1 Simple Calculator
【元宇宙欧米说】听兔迷兔如何从虚拟到现实创造潮玩新时代
J9数字论:Web3.0+互联网电商会引起怎样的火花?
对称加密与非对称加密的区别
FPGA时钟篇(三) MRCC和SRCC的区别
JVM探究
[Metaverse Omi Says] See how UCOUCO integrates performance art into the Metaverse
J9 Digital Theory: What kind of sparks will Web3.0+ Internet e-commerce cause?
DAY25: Logic vulnerability recurrence
Static关键字及应用,继承的概念