RabbitMQ面试问题

本文探讨了RabbitMQ在面试中常遇到的问题,包括如何避免消息堆积、防止消费者重复消费、确保消息不丢失、消息顺序一致性和死信队列的原理及应用。同时,还讨论了消息幂等性问题,提供了重试策略和避免重复消费的解决方案。
摘要由CSDN通过智能技术生成

1、MQ如何避免消息堆积,使MQ提高消费者的速度?

  提高消费者速率(集群)、消费者批量获取消息。

2、MQ如何避免消费者重复消费(幂等问题)

    基于Redis的setNx命令。

    基于数据库表字段的唯一性约束。

3、MQ服务器宕机之后,如何保证消息不丢失?

  持久化机制

4、MQ接收到生产者投递消息,如果消费者不在的情况下,该消息是否会丢失?

  不会,消息确认机制。必须要消费者成功消费消息,再通知给MQ服务器端删除该消息。当消息在指定时间内,没有被消费掉,会将消息转移到死信交换机分发给死信队列,给死信消费者进行消费。

5、MQ如何保证消息顺序一致性?

  绑定同一个消费者和队列

6、MQ推与取架构模型 

  MQ 服务器与消费者建立长连接后,MQ 服务器会主动推数据给到消费者

  当消费者第一次启动的时候,会主动找MQ 服务器拉数据 

7、MQ如何实现高并发思想?

  MQ消费者根据自身能力情况 ,拉取mq服务器端消息消费。默认的情况下是取出一条消息,可根据能力设置一次获取的消息数量。

8、MQ死信队列原理?

8.1 死信队列产生的背景

       1)消息投递到MQ中存放的消息已经过期 ,消费者没有及时的消费消息,即消息存放到MQ服务器中过期,会转移到(备胎)死信队列存放。
  2)队列达到最大的长度 (队列容器已经满了),会转移到备胎死信队列存放。
  3)消费者消费多次消息失败,就会转移存放到死信队列中。

8.2 死信队列的架构原理

        死信队列和普通队列区别不是很大,都有自己独立的交换机和路由key、队列和消费者。
        1)生产者投递消息先投递到我们普通交换机中,普通交换机在将该消息投到普通队列中缓存起来,普通队列对应有自己独立普通消费者。
        2)如果生产者投递消息到普通队列中时,出现8.1中的几种情况,会将该消息转移到死信(备胎)交换机中,死信(备胎)交换机将消息分发给对应的死信(备胎)队列,再由对应的死信(备胎)消费者进行消费。

8.3 RabbitMQ应用场景

        基于RabbitMQ设计订单30分钟超时处理

        基于死信队列。消息生产者发送消息时,设置消息有效时间为30分钟,如果30分钟内消息没有被消费,消息将被转移到死信交换机,分发给死信队列,死信消费者对消息进行消费。

8.4 实现方式

1)配置文件application.yml

spring:
  rabbitmq:
    ####连接地址
    host: 127.0.0.1
    ####端口号
    port: 5672
    ####账号
    username: guest
    ####密码
    password: guest
    ### 地址
    virtual-host: /meiteVirtualHosts
server:
  port: 8080
 
###模拟演示死信队列
mayikt:
  dlx:
    exchange: mayikt_dlx_exchange
    queue: mayikt_order_dlx_queue
    routingKey: dlx
  ###备胎交换机
  order:
    exchange: mayikt_order_exchange
    queue: mayikt_order_queue
    routingKey: mayikt.order

 2)引入依赖


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值