RabbitMQ面试题(三)

  1. 什么是消息持久化?
    答:把消息保存到物理介质上,防止消息的丢失,就是消息的持久化。

  2. RabbitMQ消息的持久化有几种?
    答:RabbitMQ的持久化分为:交换机的持久化、队列的持久化和消息的持久化。

  3. RabbitMQ默认使用哪种交换机?
    答:Direct交换机。

  4. RabbitMQ接收到消息之后就必须被消费么?
    答:不是必须的,在消息确认消费之前,可以拒绝消息消费,通过channel.basicReject(消息编号,true)方法,消息就会被分配给其他的订阅者。设置为死信队列,这个队列是专门用来存放被拒绝的消息队列的。

  5. RabbitMQ的哪种交换机可以获取历史消息?
    答:Direct交换机,因为Fanout和Topic类型的交换机都是广播形式的,所以无法获取到历史消息。

  6. 如何避免消息重复投递?
    答:在消息生产时,RabbitMQ内部针对每条生产者发送的消息生成一个inner-msg-id,作为去重的依据(消息投递失败并重传),避免重复的消息进入队列。

  7. 如何避免消息重复消费?
    答:在消息消费是,消息体中需要有一个全局唯一的id来作为去重的依据,避免消息被重复消费。

  8. 如何确保消息接收方消费了消息?
    答:在消费者把消息相关的逻辑业务都处理好后,才通知RabbitMQ可以删除消息,而不是一收到就发送确认消息,而这里也不使用超时机制,只要RabbitMQ和消费者的连接不中断,就给足时间让消费者消费消息,直到确认消息结果返回才删除,保证数据的最终一致性。

  9. routing_key(路由键)和binding_key(绑定键)的最大长度是多少?
    答:255字节。

  10. 要保证消息持久化成功的条件有哪些?
    答:
    声明队列必须设置持久化durable设置为true。
    消息推送投递模式必须设置持久化,deliveryMode设置为2(持久)。
    消息已经到达持久化交换机。
    消息已经到达持久化队列。

发布了289 篇原创文章 · 获赞 302 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/104823225
今日推荐