面试官常问的 微服务 问题71-79
71.如何避免消息重复投递或重复消费?
在消息生产时,MQ 内部针对每条生产者发送的消息生成一个 inner-msg-id,作为去重的依据(消息投递失败并重传),避免重复 的消息进入队列;
在消息消费时,要求消息体中必须要有一个 bizId(对于同一业务全局唯一,如支付 ID、订单 ID、帖子 ID 等)作为去重的依据, 避免同一条消息被重复消费。
72.消息基于什么传输?
由于 TCP 连接的创建和销毁开销较大,且并发数受系统资源限制,会造成性能瓶颈。RabbitMQ 使用信道的方式来传输数据。信道 是建立在真实的 TCP 连接内的虚拟连接,且每条 TCP 连接上的信道数量没有限制。
73.消息如何分发?
若该队列至少有一个消费者订阅,消息将以循环(round-robin)的方式发送给消费者。每条消息只会分发给一个订阅的消费者(前 提是消费者能够正常处理消息并进行确认) 。
通过路由可实现多消费的功能
74.消息怎么路由?
消息提供方 -> 路由 -> 一至多个队列
消息发布到交换器时,消息将拥有一个路由键(routingkey) ,在消息创建时设定。
通过队列路由键,可以把队列绑定到交换器上。