啥是消息队列?为啥要用消息队列?有那些常用的消息队列?一文解答你的疑问

Posted z啵唧啵唧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了啥是消息队列?为啥要用消息队列?有那些常用的消息队列?一文解答你的疑问相关的知识,希望对你有一定的参考价值。

文章目录

一:为什么要使用消息队列

1.使用同步的通信方法解决多个服务之间的通信

  • 在电商支付的一个案例当中,下一个订单可能包含很多个步骤:为数据库创建订单,减库存,加积分…

  • 如果使用同步的方式就如下图所示存在的问题就是说,造成系统开销比较大,同步的过程要保证所有的服务都顺利执行完成,整个链路执行完毕才能使下一个订单执行成功,如果在执行的途中网络出现问题,那么就会导致成功率受到影响,导致用户体验较差

  • 解决同步的出现的问题可以使用异步,采用消息队列

2.使用消息队列异步解决多个服务之间的通信

  • 使用异步的方式可以让我们创建订单这个业务的话可以解决提交系统的吞吐量,因为我们在创建订单的时候,发送一个消息到消息队列当中之后就可以去创建这个订单
  • 然后后续要继续执行业务再异步的到对应的消息队列当中去进行拿到消息去执行即可
  • 怎么保证能够让后续的服务都执行成功呢?因为创建订单成功的话,那么附带的业务都必须成功,但是这是异步的,订单已经创建成功了,怎么保证其他的业务也都能够创建成功呢?这个就要用到这个分布式事务来保证了!这个就叫做业务执行的最终一致性.

  • 所以可以总结出消息队列解决的问题就是服务之间的通信问题!
  • 很多资料说到消息队列的目的是通过将消息的发送和接收分离来实现应⽤程序的异步和解偶,这个给⼈的直觉是MQ 是异步的,⽤来解耦的,但是这个只是MQ的效果⽽不是⽬的。MQ真正的⽬的是为了通讯,屏蔽底层复杂的通讯协议, 定义了⼀套应⽤层的、更加简单的通讯协议。

二:消息队列的流派

  • 市面上常用的消息队列:
    • rabbitMQ:内部功能较多可玩性比较强,比较简单
    • rocketMQ:阿里内部的大神,根据Kafka底层原理手写的一个消息中间件,性能比肩Kafka,在Kafka的基础上封装了更多的功能
    • kafka:全球消息队列当中性能最好的!!!消息处理最快的一款MQ
    • zeroMQ

1.有broker的消息队列

  • borker:这个borker的作用就是用来进行消息的中转⽣产者把消息发送给它就结束⾃⼰的任务了,broker 则把消息主动推送给消费者(或者消费者主动轮询)

  • 重topic

整个broker又是依据topic进行消息的转发的,在重topic消息队列当中就必然需要topic的存在了

Kafka,RocketMQ,ActiveMQ等就是重topic的消息队列

  • 轻topic

topic只是一种中转模式,不一定采用

RabbitMQ是一种轻topic类型的消息队列

2.无broker的消息队列

  • ⽆Broker的MQ 的代表是zeroMQ。该作者⾮常睿智,他⾮常敏锐的意识到——MQ 是更⾼级的 Socket,它是解决通讯问题的。所以 ZeroMQ 被设计成了⼀个“库”⽽不是⼀个中间件.

以上是关于啥是消息队列?为啥要用消息队列?有那些常用的消息队列?一文解答你的疑问的主要内容,如果未能解决你的问题,请参考以下文章

到底啥是消息队列?Java中如何实现消息队列

天天在用消息队列,却不知道为啥要用 MQ ,这就尴尬了

到底啥是消息队列?Java中如何实现消息队列

常用的消息队列

天天都用消息队列,却不知道为啥要用MQ,这就有点尴尬了!

RabbitMQ面试题:啥是延迟队列? --- 2022-04-03