RocketMQ知识

1、为什么使用MQ,MQ在项目中的作用?

MQ具有解耦、异步、削峰填谷的功能。在本人项目中主要用于单向报文、交易信息登记的异步操作。

2、RocketMQ由哪些角色组成,它们分别由什么作用?

  • NameServer : 作为服务协调组件,类似于zookeeper,具有服务注册,服务发现,服务路由的作用。
  • Broker : 负责消息的存储、投递和查询。
  • Producer : 负责生产消息。
  • Consumer : 负责消费消息。

3、RocketMQ消息被消费后会被立刻删除吗?

不会。每条消息都会持久化到commitLog中,消费者消费消息后只是更新消息的消费进度而已。

4、消息会堆积吗?

消息堆积的原因有3个:

  • 生产者生产消息过快
  • broker消息堆积(顺序消息阻塞)
  • 消费者消费消息过慢

5、RocketMQ什么时候删除过期消息?

默认是72小时后删除文件,可以通过配置文件的filereservetime属性更改这个过期时间。

6、消息消费方式是push还是pull?

push和pull都有,push是通过DefaultMQPushConsumer实现的,pull是通过DefaultMQPullConsumer实现的,但是push的底层还是通过pull实现的。

7、broker是如何处理消费者的pull请求的?

broker收到消费者的pull请求后,会先去消息队列中看一下是否有消息,如果有消息会直接返回给consumer,如果没有消息,broker不会断开连接,等待5秒后会再检查是否有消息,不管有没有消息都会返回给消费者。

8、RocketMQ是如何实现负载均衡的?

  • 对于生产者来说,生产者发送消息时,会轮询目标topic下所有的消息队列,并且采用递增取模的方式外不同的消息队列上发送消息,使消息均匀地落在消息队列上。
  • 对于消费者来说,不同的consumer会通过订阅topic会绑定到对应的消息消息队列中,因为消息是均匀地落在消息队列上的,消费者也会均匀地消费到消息。consumer绑定topic的策略有平均分配策略、轮询分配、一致性hash等等。

9、消息重复消费的原因?

1)发送时消息重复消费:当一条消息发送到broker并完成持久化,如果这时候出现网络闪断或者broker宕机,导致broker对生产者的应答失败,那么生产者会尝试重发消息,导致消费者收到重复的消息。
2)消费消息时重复:当消费者已经完成消费,但是响应给broker时出现网络闪断,为了保证消息至少被消费一次,broker会尝试再次投递消息。
3) 负载均衡是消息重复:当broker或客户端重启、扩容或缩容时,会触发Rebalance,此时消费者可能会消费到重复的消息。

10、如何保证消息幂等?

正常情况下出现消息重复的概率很低,如果由MQ处理,会影响吞吐量和高可用,所以RocketMQ不解决消息重复的问题。消息重复的问题可以通过设置业务的唯一性ID由业务系统自身解决。

11、如何保证消息顺序消费?

将消息依次发送到同一个队列里面。

12、RocketMQ怎么保证消息不丢?

  • 对于生产者来说,发送消息失败会自动重试,重试后仍然失败,那么生产者会知道消费没有发送成功,进行业务兜底处理。
  • 对于Broker端来说,消息只要到了broker端,会先保存到内存中,然后立刻返回成功给生产者,随后broker定期批量地将消息从内存刷到磁盘上,为避免消息丢失,可将异步刷盘改为同步刷盘;为了保证高可用,broker还会异步将消息同步给slave,可以将异步改为同步,但会影响效率。
  • 对于消费者来说,必须完成业务操作后才能响应成功给broker,否者返回稍后重试的响应给broker,然后稍后再重试。

13、RocketMQ是怎么实现高可用的?

  • 消息发送高可用:在创建topic的时候,把topic的多个消息队列创建在多个broker上,当一个broker不可用的时候,生产者仍然可以发送消息到其他broker组。
  • 消息消费高可用:当broker的master节点不可用的时候,消费者可以从slave节点上获取消费

14、RockerMQ消费的发送方式有多少种?

  • 同步消息发送
  • 异步消息发送
  • 单向消息发送

15、消息堆积会不会进死信队列?

当一条消息消费失败,RocketMQ就会自动进行消息重试。而如果消费失败超过最大重试次数,RocketMQ就会认为这个消息有问题。但是此时,RocketMQ不会立刻将这个有问题的消息丢弃,而会将其发送到这个消费者组对应的一种特殊队列:死信队列。消息堆积说明消息没被消费,因此消息堆积不会进入死信队列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值