【云驻共创】年轻人如何入场元宇宙?未来已来!
679
2022-05-30
消息队列是什么,或者说什么是消息队列、你用过哪些消息队列,几乎是在求职面试中经常问到的问题,我自己也经常问面试者这个问题,简单说消息队列是一个能先进先出且存储消息的容器。
基本组成部分
基本的消息队列主要有生产者(Producer)、代理(Broker)、消费者(Consumer)组成。
生产者:消息的产生者,消息的调用端,主要负责消息具体承载的信息的实例化,具体一个队列的发起方
代理:队列的大脑,主要的处理单元,负责消息的存储、投递、及各种队列附加功能的实现,是消息队列最核心的组成部分
消费者:一个消息队列的终端,也是消息的调用端,具体是根据消费的消息承载的信息,处理各种业务业务逻辑
目前市场上常用的MQ中间件基本上都是基于这3个主要的基础组件扩展而成的,尤其是扩展代理,比如延迟队列、主题 等等
使用场景
消息队列使用的场景非常多,常见的有异步处理、应用解耦、流量削峰等等
异步处理
异步处理主要应用于对实时性要求不严格的场景,比如:用户注册发送验证码、下单通知、发送优惠券等等。A服务只需要把协商好的消息发送到消息队列,剩下的有消费消息的服务去处理就好,不用等待消费服务返回结果。
应用解耦
应用解耦可以看作是把相关但耦合度不高的系统联系起来,比如,订单系统与WMS、EHR系统,有关联但又不是哪么紧密,每个系统之间只需要把约定的消息发送到MQ,另外的系统去消费即可,同时也解决了各个系统可以采用不同的架构、语言来实现,极大的增加了整个大系统的灵活性。
流量削峰
流量削峰一般应用在大流量入口且短时间内业务需求处理不完的服务中心,为了权衡高可用,把大量的并行任务发送到MQ中,依据MQ的存储及分发功能,平稳的处理后续的业务,起到一个大流量缓冲的作用。
常见消息队列
目前常见的消息队列有ActiveMQ、RabbitMQ、Kafka、RocketMQ。但真正项目中使用的是后3种,ActiveMQ在实际的项目中并不常用,一般作为教程了解原理还是不错的。另外要说明的是下列对比的表格并不完整,比如:RabbitMQ支持死信队列,RocketMQ支持事务消息,还有跟Kafka对标的的Pulsar,并没有列出,想具体了解每个MQ,建议针去查看官方资料。
总结
在现在的项目中,不管是TO C还是TO B ,消息队列(MQ)几乎是标配的中间件,建议在熟悉原理的基础上,并能清楚每种消息中间件的不同点,这样才能根据业务需求的场景更有效的采用合适的中间件。知识的积累在于沉淀,我们共同进步,做新时代的农民工。
本文整理自华为云社区内容共创活动,消息队列(mq)是什么?,查看活动详情
Java RabbitMQ 分布式消息服务 Kafka 消息通知服务
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。