RocketMQ学习总结

本文总结了RocketMQ的学习内容,包括解耦、异步、削峰填谷的概念,RocketMQ的执行流程,Producer与Consumer的理解,以及RocketMQ如何保证高可用、消息的幂等性、可靠性传输和消息延时处理。还探讨了如何解决消息队列满和高性能读写数据的问题。
摘要由CSDN通过智能技术生成

在网上看了一下关于rocketmq的面试题,在总结一下,算是一个阶段性学习吧

  1. 什么是解耦?
  2. 什么是异步?
  3. 什么是削峰填谷?
  4. RocketMQ 执行流程
  5. 怎么理解 Producer 的?
  6. 怎么理解 Consumer 的?消费者消费模式有哪几种??
  7. RocketMQ 如何保证高可用的?
  8. 如何保证消息不被重复消费?或者说如何保证消息消费时的幂等性?
  9. 如何保证消息的可靠性传输?要是消息丢失了怎么办?
  10. 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?
  11. 如何解决高性能读写数据的问题?
  12. 单机 RocketMQ 的 QPS 上限是多少?

 

1.什么是解耦?

系统的耦合性越高,容错性就越低,以电商应用为例,用户创建订单后,如果耦合调用库存系统,物流系统,支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。、

使用消息队列解耦合,系统的耦合性就会提高了,比如物流系统发生故障,需要几分钟才能修复,这段时间 内,物理系统要处理的数据被缓存 到消息队列中,用户的下单操作正常完成,当物流系统恢复后,补充处理存在消息队列中的订单消息即可,终端系统感知不到物流系统发生过几分钟故障。

 

 

 

 

 

 

 

 

2.什么是异步?

举个例子吧,对于生产者来说,生产者生产消息通过namesrv找到相应的broker路由,然后又broker路由按照某种策略(随机或者是轮训),选择一个队里发送消息,发送消息到队列后,返回发送结构,对于同步消息来说,我们需要等待发送消息结构返回后,才能继续执行,这个过程是耗时的,对于异步消息来说,当消息发送数据之后,采用消息回调的方式获取返回的结果,在这个过程中,线程不需要等待,可以继续执行其他的代码。

我在这里截取一下同步生产和异步生产的代码,做对比感受一下:

 

// SendCallback接收异步返回结果的回调
                producer.send(msg, new SendCallback() {
                    @Override
                    public void onSuccess(SendResult sendResult) {
                        System.out.printf("%-10d OK %s %n", index,
                            sendResult.getMsgId());
                    }
                    @Override
                    public void onException(Throwable e) {
      	              System.out.printf("%-10d Exception %s %n", index, e);
      	              e.printStackTrace();
                    }
            	});
  SendResult sendResult = producer.send(msg);

3.什么是削峰填谷

应用系统如果遇到系统请求流量的瞬间猛增,有可能会系统压垮。有了消息队列可以将大量的请求缓存起来,分散到很长一段时间处理,这样可以大大提高系统的稳定性和用户体验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值