MQ常见面试题

消息中间件

 

什么是MQ

 

为什么要使用MQ

 

 

1、如何避免消息重复投递和重复消费

在生产数据时,消自体中必须要有一个bizId作为去重依据

在消费一条消息的时候,自己判断一下是否已经消费过了

2、消息丢失,如何保证消息的可靠性传输

消息丢失,可能出现在生产者,MQ,消费者;

生产者丢失:生产者发送数据到MQ的时候,可能因为网络问题半路搞丢了。

可以选择MQ的事务功能,但是会降低吞吐量;

可以使用MQ的发送确认模式,发送消息给MQ之后等待MQ回传确认消息,自己需要维护MQ分配的唯一ID

MQ中丢失:MQ开启持久化,把消息持久化到磁盘

消费者丢失:接收到消息,还没处理,进程挂掉了;

在消息处理完成之后,向MQ发送确认消息。

3、如何保证消息的顺序性

场景:一个queue对应多个consumer,无法保证顺序

保证顺序:一个queue对应一个consumer

 

 

### MQ 见应用场景面试题 #### 1. 消息队列的作用是什么? 消息队列用于解耦应用程序的不同组件,使得这些组件可以通过异步通信方式进行交互。这种方式提高了系统的可扩展性和可靠性[^1]。 ```python import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.queue_declare(queue='hello') def callback(ch, method, properties, body): print(f"Received {body}") channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True) print('Waiting for messages.') channel.start_consuming() ``` #### 2. 解释下什么是死信队列 (Dead Letter Queue)? 当一条消息在正队列中无法被成功处理时(例如超过最大重试次数),该消息会被自动转移到另一个特殊队列——即死信队列。这有助于开发者分析未处理成功的消息并采取相应措施. #### 3. 如何实现分布式事务一致性? 一种见的做法是在两阶段提交协议基础上引入补偿机制。具体来说,在预提交(pre-commit)阶段确认所有参与者都准备好执行操作;一旦收到肯定回复,则进入正式提交(commit),反之则回滚(rollback). #### 4. 生产环境中如何监控消息队列性能指标? 可以关注以下几个方面: - **吞吐量**: 单位时间内发送或接收的消息数量; - **延迟时间**: 从生产者发出到消费者接收到的时间差; - **堆积情况**: 当前等待消费的消息数目; - **错误率**: 发送失败的比例等。 以上各项都可以借助第三方工具如Prometheus配合Grafana来进行可视化展示和告警设置.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值