什么是消息队列?什么是消息队列?您使用的是哪种消息队列?这些是常见的求职面试问题。简单来说,消息队列是第一个问题。先进先出的方法。导出和存储消息的容器。
基本组成部分
基本消息队列主要由生产者、代理和消费者组成。
Producer:消息的生产者,消息的调用者,主要负责实例化消息携带的信息,特定队列的发起者Agent:队列的大脑,主要处理单元,负责消息的存储、投递、消息的各个方面附加队列函数实现是消息队列的核心组件,是消息队列的终端,具体处理各种业务逻辑。现在市场上常用的MQ中间件基本上都是基于这三个主要基础组件进行扩展的,特别是延迟队列、主题等扩展代理。
使用场景
消息队列的使用场景很多,常见的场景包括异步处理、应用隔离、削峰填谷等。
异步处理 异步处理主要用于实时性要求不严格的场景,例如注册用户、发送验证码、订单通知、优惠券等。服务A只需将协商好的消息发送到消息队列,其余的消息消费服务就可以处理该消息,而无需等待消费服务返回结果。
应用解耦 应用解耦可以被认为是连接相关但非高度耦合的系统。例如,订购系统与WMS和EHR系统相关,但联系并不紧密。仅需要同意的消息。它还解决了每个系统可以使用不同架构和语言实现的问题,大大增加了大型系统的整体灵活性。
流量调峰 流量调峰常用于流量入口较大、短时间内无法满足业务需求的服务中心。大量并行任务提交到MQ来平衡高可用性。基于MQ的存储和投递能力,顺利处理后续操作,起到大规模流量缓冲区的作用。
常见消息队列
如今流行的消息队列包括ActiveMQ、RabbitMQ、Kafka 和RocketMQ。不过后三种在实际项目中并不经常使用。一般来说,作为教程来理解原理比较好。此外,请注意下面的比较表并不完整。例如,RabbitMQ 支持死信队列,RocketMQ 支持事务性消息,Kafka 的等效Pulsar 则未列出。对于每个MQ,我们建议您去查看官方信息。
特征
主动消息队列
兔子MQ
卡夫卡
火箭MQ
生产者和消费者
支持
支持
支持
支持
发布-订阅
支持
支持
支持
支持
请求和响应
支持
支持
-
支持
API完整性
昂贵的
昂贵的
昂贵的
低(静态配置)
多语言支持
支持,但推荐JAVA
独立于语言
支持,但推荐JAVA
支持
单机吞吐量
10,000级
10,000级
100,000 个级别
单机级别10000级
消息延迟
-
微秒级
毫秒级
-
可用性
高(主从)
高(主从)
非常昂贵(分布式)
昂贵的
消息丢失
-
低的
理论上是不可能丢失的。
-
重复消息
-
可控的
理论上会存在重复
-
文件完整性
昂贵的
昂贵的
昂贵的
中间
提供快速启动
有
有
有
没有任何
初期实施困难
-
低的
中间
昂贵的
总结
消息队列(MQ) 几乎是当前项目的标准中间件,无论是TO C 还是TO B。了解这个原理是一个好主意,这样您就可以了解每个消息中间件之间的差异。这使您可以根据您的业务需求场景更有效地部署正确的中间件。知识的积累在于沉淀。我们将共同进步,成为新时代的农民工。
版权声明:本文转载于今日头条,版权归作者所有。如有侵权,请联系本站编辑删除。