面试中部分RabbitMQ问题

rabbitMQ问题1:为什么要使用rabbitMQ?

   1、任务异步处理(不重要并且耗时长的操作,需要异步处理)
   2、应用程序解耦合
   3、削峰填谷(对并发量而言,如数据库并发量)

rabbitMQ问题2:rabbitMQ的使用场景?

   用户注册时,短信提醒;
   用户下单快超时,邮件提醒;
   用户确认评价功能,后续需添加赠送积分功能;
   金牛的下单计算佣金

rabbitMQ问题3:rabbitMQ的实现方式?

   AMQP: 一种链接协议
   JMS: JavaMessage Service,应用程序接口
   区别: AMQP是通过定义协议来统一数据交互的格式;JMS是一组接口,对消息操作进行统一
       AMQP不限制实现方式,可跨语言;JMS只适用于java语言
       AMQP的消息模式更加丰富;JMS只有两种消息模式

rabbitMQ问题4:rabbitMQ的工作模式?

   1、简单模式(一生产一消费)
   2、工作队列模式(一生产多消费)
   3、订阅模式(发布与订阅模式,具有交换机,还有路由标识符;一生产一交换多队列多消费)
     1)广播模式
     2)定向模式
     3)通配符模式

rabbitMQ问题5:rabbitMQ的过期时间TTL?

   概念: 超出过期时间还未被消费,则会被投递到死信队列;无法再被消费
   设置: 1、可针对队列设置;2、可针对消息设置;3、同时设置的话,以较小的时间为准

rabbitMQ问题6:rabbitMQ的死信队列?

   死信的触发条件: 1、消息被拒绝接收;2、消息超过过期时间;3、消息超过队列设置的最大数量
   死信交换机(DLX): 一个普通的交换机,只是被用来转发消息至死信队列

rabbitMQ问题7:rabbitMQ的延时队列?

   实现: 通过过期时间和死信队列(死信交换机)实现

rabbitMQ问题8:rabbitMQ的消息确认机制?

   1、发布确认(无论是成功确认还是失败确认,都需要各自配置)
   2、事务支持(需配置,与发布确认只能二选一)

rabbitMQ问题9:rabbitMQ的消息追踪?

   需要使用rabbitMQ的Trace实现;会记录每一次发送的消息,以vhost(虚拟主机)为单位

rabbitMQ问题10:rabbitMQ的集群监控?

   1、管理界面监控:需开启插件rabbitmq_management
   2、tracing日志监控
   3、定制自己的监控系统
   4、Zabbix(企业级开源解决方案)监控

rabbitMQ问题11:rabbitMQ的集群架构模式?

   1、主备模型: 一主一备;主负责读写,备在主挂了时进行顶替;
   2、远程模式: 实现双活,一个地域集群压力较大的时候,将数据复制到另一个地域集群处理(近端同步确认,远端异步确认)
   3、镜像队列模式: 使用高可用的负载均衡,分发至其中一个镜像队列,该队列就会将消息复制到另外两个镜像队列
   4、多活模式: 与远程模式类似,但远程模式实现更加复杂,推荐使用多活模式;结合镜像队列使用较好
   总结: 主备模式适用于并发和数据不多的情况;远程模式已经几乎不再使用;
       镜像队列模式可实现100%的消息不丢失,结合Haproxy来实现高并发业务,企业中使用最多;

rabbitMQ问题12:rabbitMQ的消息堆积?

   产生原因: 1、生产者突然产生大量的消息;2、消费者消费失败;
         3、消费者出现性能瓶颈;4、消费者挂掉了;
   影响: 1、可能导致新消息无法进入队列;
       2、可能导致旧消息无法被消费;
       3、消息等待消费的时间过长,超出业务容忍范围
   解决办法: 1、排查消费者的消费性能瓶颈
         2、增加消费者的多线程处理
         3、部署增加多个消费者
         4、事后,将队列中的消息移动到另一个队列慢慢消费

rabbitMQ问题13:rabbitMQ的消息丢失?

   发生的场景: 1、在生产者到MQ过程中丢失
          2、在MQ中丢失(MQ宕机、重启)
          3、在消费者消费过程中丢失
   解决的办法: 1、使用消息确认机制(最好是异步确认,不影响主线程)
          2、持久化交换机、队列、消息
          3、不采用自动回复,而是在真正消费完后手动回复

rabbitMQ问题14:rabbitMQ的消息消费乱序?

   概念: 针对消息消费顺序有要求的情况,是不允许出现消费乱序问题的
   发生的场景: 1、工作队列模式下,多个消费者获取各自消息进行消费后,消费时长并不固定
          2、简单队列模式下,为了提高消费效率,采用多线程消费;不同线程消费不同消息时长不固定
   解决的办法: 1、采取多队列对应多消费者模式,生产者根据数据取余,分发给不同的队列,再给不同消费者
          2、消费者获取消息后,将消息数据取余,压入不同的内存队列(list等),再给不同的线程

rabbitMQ问题15:rabbitMQ的消息重复消费?

   概念: 为了防止消息在消费端丢失,消费端采用手动回复方式;那么在消费过程中,消费端与MQ的连接意外断开,MQ未收到手动回复时,就会出现重复消费
   解决办法: 如果是消费业务是幂等性操作,重复消费就没问题(幂等性:执行几次都不会影响结果)
         如果消费业务非幂等性操作,可在消费时保存个标识到redis中,重复消费时进行判断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值