1.概念
“消息队列”(Message Queue,MQ )是一个先进先出(First Input First Output, FIFO )的队列。它主要用于不同进程或者线程之间的通信,用来处理一系列的输入请求。
消息队列采用异步通信机制。即消息的发送者和接收者无须同时与消息队列进行数据交互,消息会一直保存在队列中,直至被接受者读取。每一条消息记录都包含详细的数据说明,包括数据产生的时间、数据类型、特性的输入参数。
常见的消息队列中间件有Kafka 、RocketMQ 、RabbitMQ ,以及各种自研的MQ 。

2.作用
为什么需要消息队列,消息队列都有哪些作用或者说价值呢?为啥Kafka 不是多此一举,而是必备的通用的抽象之后的一个统一解法。
(1 )应用解耦:多个应用可通过消息队列对相同的消息进行处理,应用之间相互独立,互不影响。避免代码的重构带来适配的额外开销,包括出现故障的时候联调上线彼此之间压力特别大。

(2 )异步处理:相比于串行和并行处理,异步处理可以减少处理的时间。既解决了串行方式一旦出故障,用户体验极差,又解决了并行处理过程中对系统侧的压力,进而用异步消息队列让超大规模注册场景也能正常运行,它的诉求并不是要实时送达。牵引注册是营销的一个重要指标,如去年的头条今年的快手猛砸春节联欢晚会抢红包,这样会有几千万上亿人同时注册,异步处理可实现超高并发下的等一等。12306 以前每到春运就挂,加机器也解决不了并发承载能力,最终通过缓存机制排队机制,如等一小时,架构改成排队机制的核心原理叫做异步处理。这就是架构侧的升级,表面上看好像没有及时处理,而实际上能够解决主要矛盾峰值抖动的抗压能力。

(3)数据限流:流量高峰期,可通过消息队列来控制流量,避免流量过大而引起应用系统崩溃,比如常用在促销或“秒杀”等活动中。这就是为什么生产环境中都会有消息中间件。还是接春节联欢晚会抢红包的话题,我们更关注红包的到账效率,而不是红包提现到银行卡的效率。所以,可以把所有服务器的弹性都给到红包到账的异步处理上,提现几乎下线。算力一定情况下,技术架构可以根据业务架构做调整,来应对秒杀场景的极度优化。抓住主要矛盾,不要面面俱到,技术是为业务的实际具象需求而服务的。数据的限流动作也是中间件消息队列中很 重要的应用场景。

(4)消息通信:消息队列具有高效的通信机制,可以实现点对点消息队列或聊天室等。QQ 、微信、飞书、钉钉,不是毫秒级看到,帮我们工作极度提效,邮件也提效,效率最低的是打电话,因为打电话是独占式的串行。微信可以同时处理比如十件事情(六件工作、四件生活),都不耽误,这是消息通讯领域当中的异步传输并行提效的原理。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70015587/viewspace-2882908/ ,如需转载,请注明出处,否则将追究法律责任。