C# .NET CORE 面试题【RabbitMq篇】

心之所向,勇往直前!
简单归纳消息队列相关的面试题

正文

   MQ的作用是什么?

     解耦、异步、削峰

 

   2. 如何保证消息队列的幂等性?

    a. 消费操作时可以先校验数据是否重复再写入

    b. 数据表设置唯一索引

    c. 丢到redis里(分布式锁)

 

   3. 如何保证RabbitMQ的可靠性?

    a. Confirm模式/启用事务

    b. 启用持久化

    c. ACK应答机制

    d.将消息持久化入库,在a、b、c均执行成功后修改数据库状态,再利用定时任务将失败任务定时补偿发送

 

   4. 你是如何解决RabbitMQ死信问题的?

     a. Rabbitmq可以设置死信交换机

    b. 可以自行实现一个缓存区,将死信消息先丢到缓存区,再跑定时任务检测重新发送

 

   5. RabbitMQ什么情况下消息会进入死信队列?

     a. 消息被拒收

     b. 消息过期

     c. 队列最大长度满了

 

   6. RabbitMQ怎么实现延时队列?

     使用TTL + 死信队列实现

 

   7. RabbitMQ设置TTL的方式有几种,分别是什么

     有两种方式,基于队列设置、基于消息设置。如果同时使用了两种方式,则优先时间最小的

 

   8. RabbitMQ如何保证消息的顺序消费?

     出现乱序的可能是1个queue有多个consumer,或者只有1个consumer时使用了多线程处理

    a. 保证一个queue只有1个消费者

    b. 如果存在多个消费者,就拆分多个queue将属于同一个业务id的操作推送到1个queue,以此确保每个queue都是只有1个消费者。

 

   9. 出现消息大量积压如何处理?

     a. 可以增加多个consumer进行消费

    b. 扩容模式

      - 1. 暂停原有的consumer(如果存在代码问题则先修复)

      - 2. 新建Topic以及多个队列

      - 3. 新增一个consumer用于消费原队列,将消息转发到Topic的队列中进行消费

      

   10. RabbitMq有些类型的Exchange?

     a. Direct:路由模式,Router Key匹配的消息才会转发

     b. Topic:路由匹配模式,可以根据匹配符进行选择性转发,*代表一个单词,#代表一个或多个

     c. Fanout:广播模式,转发交换机上所有的队列

     d. Headers:标头模式,不检查路由键,匹配Header的会转发,Header是一个键值对

 

 

 

结语

  本篇到此结束,如果有任何疑问或者指正,请发表在评论区。

posted @ 2022-06-23 10:28  技术只能混口饭吃  阅读(970)  评论(1编辑  收藏  举报