一、MQ的使用场景
先进先出:队列。
发布订阅:发布订阅消息主题。
持久化:存储核心数据,类似数据库。
分布式:支持大流量、大数据的使用场景,高性能中间件。
流量削峰:秒杀、抢购等场景。
日志处理:日志采集、实时监控、流处理管道。
消息通讯:微信消息、聊天室等。
二、RabbitMQ的工作流程
生产者:发送消息到交换机。
交换机:根据绑定的路由规则将消息路由到一个或多个队列。
消费者:从队列中获取消息。
三、RabbitMQ如何防止消息丢失
持久化:将消息和队列标记为持久化。
四、RabbitMQ的消息模型有哪几种(交换机有哪几种)
1、hello world
一个生产者,一个消费者,一个队列。
生产者发送消息到队列,消费者调用。
2、work queue
一个生产者,多个消费者,一个队列。
生产者发送消息到队列,多个消费者都可以调用。
3、广播(fanout)
一个生产者,多个消费者,一个交换机,多个队列。
生产者发送消息到交换机,交换机将收到的消息广播到所有与之绑定的队列,所有消费者都能接收到消息。(广播通知)
4、路由
一个生产者,多个消费者,一个交换机,多个队列。
生产者发送消息到交换机,交换机将消息路由到一个或多个队列,消费者通过指定不同的路由接收消息。
5、Topics
和路由模式差不多,只不过可以在指定路由的时候配置通配符。
- #:匹配一个或多个词
- *:匹配不多不少恰好1个词
五、如何处理消息重复消费
- 使用唯一标识符跟踪消息是否已处理。
六、如何实现延迟队列(如果通过MQ实现订单超时取消)
设置TTL(Time-To-Live)和死信交换机来处理超时消息
七、什么情况下消息会变成死信消息
- 消息被拒绝且不重新入队(
basic.reject
或basic.nack
)。 - 消息过期(TTL过期)。
- 消息被丢弃(队列溢出)。
八、消息的签收模式有哪几种,有什么区别
- 自动签收(消息送达后自动确认,不可回滚)。
- 手动签收(消费者处理完消息后显式确认,用于确保消息已处理)。