消息中间件面试题总结(基于RabbitMQ的各种常见问题)

什么是消息队列?

  • 消息(Message):传输的数据。

  • 队列(Queue):队列是一种先进先出的数据结构。

  • 消息队列从字面的含义来看就是一个存放消息的容器。

  • 消息队列可以简单理解为:把要传输的数据放在队列中。

  • 把数据放到消息队列叫做生产者

  • 从消息队列里边取数据叫做消费者

消息队列是一种异步的服务间通信方式,是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。使用较多的消息队列有RocketMQ、RabbitMQ、Kafka等。

为什么使用消息队列?

使用消息队列有三个好处:

解耦

耦合性:后台各个系统相互依赖,如果一个系统挂掉了,其他也会导致无法运行

于是消息队列就进行解耦,加入了消息队列之后,不同的后台只需要将自己的数据写进消息队列即可,一个系统挂掉了,他在消息队列中的数据依旧存在,不用担心出现整体无法运行的情况

异步

异步提速:比如说我们原本有3个后台系统要向前端输出数据,每个后台都需要300ms,还要加上访问数据库的时间,如果一个用户访问的后台较多,那么访问的时间也会变得很久,用户体验较差

但如果使用了消息队列的话,不管要访问多少个后台数据,所有的后台只需要把数据都压进消息队列里面就可行了,如何用户再根据自己的需求从消息队列拿,大大减少所需时间

削峰

如果我们有一段时间的请求量非常大,就好比双11的时候,我们的后台只能接受1000个,但一下发过来3000个,这时候后台扛不住,就会崩溃

但是如果使用了消息队列,消息队列会把加载不了的信息丢到消息队列里面去,等后台持续性的加载,这样就不会出现系统崩溃的问题,顶多也只是慢一点

消息队列有什么优点和缺点?

优点就是上面所说的三个: 解耦,异步,削峰

缺点:

系统的可用性降低:我系统引入的外部依赖越多,消息队列就越容易挂掉,不加消息队列之前,我们虽然有耦合的问题,2个系统可能互相关联,一方挂掉导致其他一个也无法正常使用,但是如果加了消息队列,消息队列一旦挂掉,那么所有的系统都会挂掉

系统复杂性变高:硬生生加个 MQ 进来,你怎么保证消息没有重复消费?怎么[处理消息丢失的情况]?怎么保证消息传递的顺序性?头大头大,问题一大堆,痛苦不已

Kafka ,ActiveMQ ,RabbitMQ ,RocketMQ 都有什么优点和缺点?

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值