一、前言
RabbitMQ我们经常的使用,但是它有很多高级的特性我们也需要熟练的掌握才能应对现实场景中复杂的业务逻辑。
二、面试
面试官:小奇是吧,我们开始面试吧
我:快点吧,早就饥渴难耐了
面试官:有用过RabbitMQ吗
我:用过
三、RabbitMQ怎么实现消费的可靠投递
面试官:RabbitMQ消息生产者发送消息后怎么知道消费者有没有收到消息呢
我:生产者可以通过setConfirmCallback方法设置回调函数,判断方法中的ack,如果ack为true则表示发送成功,如果ack为false则表示发送失败,这里是生产者向路由器发送消息的时候失败。
我:我们还可以通过setReturnCallback方法设置回调函数,这里是路由器向队列发送消息失败,比如该条消息根据路由键没有找到要发送到哪个队列中去。
面试官:那消费端这里怎么判断是否收到消息了呢
我:消费端这里可以通过channel.basicAck()方法来确认收到消息。
面试官:那消费端这里处理收到的消息的时候发生异常怎么办?
我:可以使用channel.basicNack()方法来拒绝消息,让MQ重新发送消息
面试官:我们消费端每次处理完消息都需要手动确认消息吗
我:可以配置手动确认,也可以配置自动确认消息,在配置文件中配置
面试官:那一共有几种确认方式呢
我:一共有三种确认方式。
1、自动确认:acknowledge=none
2、手动确认:acknowledge=manual
3、根据异常情况确认:acknowledge=auto
面试官:可以呀小伙子,这块掌握的不错
我:还行还行,都是日常的积累
面试官:小伙子真厉害啊,一下子就把RabbitMQ怎么实现消费的可靠投递讲明白了,你面试通过了,明天上岗吧
我:啊,这么急吗,我后面还有好多东西没有讲呢。
面试官:不着急,进来了以后慢慢听你讲,加班让你跟我讲
我:啊。。。这也太难了吧
四、总结
这里关于RabbitMQ还没有整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。