文章目录
1.RabbitMQ的五种消费模式
分别是,简单,工作队列,发布/订阅,路由,主题模式。
1.简单模式
消息发送到一个队列,然后这个队列绑定了一个消费者进行处理。
2.工作队列模式
消息发送到一个队列,然后这个队列绑定了多个消费者进行并发的处理。
3.发布/订阅模式
消息发送到交换机,由交换机广播到多个队列。
4.路由模式
消息发送到交换机,由交换机路由到具体的队列。
5.主题模式
就是一种更加灵活的路由模式,支持通配符。
2.延迟消息怎么实现?
1.死信交换机
首先给队列绑定一个死信交换机和死信队列,然后发送一个带过期时间的消息,一旦过期就会成为死信,然后交给死信队列的消费者去消费。
消息成为死信的常见原因:
- 消息过期了
- 消费者达到最大重试次数
- 队列已满
2.延迟消息插件
3.使用场景是什么?
3.RabbitMQ如何保证消息可靠性?
先说一下消息可能丢失的四个场景:
- 消息没有发送到交换机
- 交换机没有正确路由到队列
- 队列中的消息丢失
- 消费者消费失败
一个个来解决
对于消息没有发送到交换机的问题,可以配置一个Confirm Callback,失败了就重试两次。
对于交换机没有正确路由到队列的问题,可以配置一个Return Callback,不过一般没必要,因为一般路由失败都是业务问题。
对于队列中的消息丢失,可以使用消息持久化机制,使用lazyQueue即可,数据会持久化到磁盘,队列中只会保留最近的2048条消息,其实还有另一种持久化方式,不过因为在3.12版本之后默认使用的就是lazyQueue了,所以就没必要了。
对于消费者消费失败的问题,可以使用消费者重试机制,设置最大重试次数,一旦超过了,消息成为死信,可以配置一个死信队列去兜底。
4.如何防止RabbitMQ被重复消费
每条消息中可以携带一个唯一的消息ID,消费者在处理的时候可以使用一个SETNX命令去判断是否处理过,如果处理过就忽略。
5.RabbitMQ的事务机制有了解过吗?
了解过,事务是通过在通道上启用的,与事务相关的有三个方法:
我们可以先开启事务,然后就可以发送消息给MQ了,如果事务提交成功了,就说明消息一定到了MQ,如果出现了异常,就可以捕获异常,进行事务的回滚。