从0开始学rocketMq 第一节

为什么要用Mq?

可能很多兄弟们说不上来为什么要用Mq,如果我继续提问的话肯定会说,因为面试需要。

1、我们先从一个例子说起,目前我从淘宝下了一个订单,那淘宝怎么处理这些订单信息呢?

我简化一下处理逻辑,支付系统存支付金额和订单号,库存系统要减掉相对应的库存量,物流系统获取收货地址处理订单。(实际处理逻辑可能更复杂,我这里简化了一下),订单信息我用dubbo RPC调用发送给这三个系统。

你下完订单以后,我因为远程调用这三个系统发送完消息,才能给你返回下单成功通知,那现在因为部门搬迁原因 ,库存系统宕机了,我直接报给你404,你会不会把我投诉到我家去呢?

为了避免出现这个问题,我们架构师想了一个办法,我们中间加一个队列,消息先发送给队列 ,发送完队列以后我就给用户返回下单成功同志,然后其他接受这些消息的系统从这个队列里面拿,就成功解耦了,但该怎么写一个这种消息队列呢,先看一下市面上有没有相似的产品,有了kalfka,直接抄,然后修改。

后面我们的处理逻辑就变成下图:

2、我们营销团队成功策划了双十一,双十一这一天qps都达到了1万/s ,我现在下单接口最多能撑得住1000/s ,怎么办呢?

我们架构师想了一个办法,我先把请求都放在mq中,A系统从mq中每次获取1000个请求不就解决了上述问题

3、营销团队又想了一个方案,淘宝开通会员制,有会员的用户打折商品。但这需要添加一个会员模块,每次用户下单我还需要把这个信息发送到会员模块,记录总给给他省了多少钱。

我们架构师想了每次新增一个模块,都要修改原来的逻辑,有没有办法,这些新增的系统自己取获取自己想要的资源呢?

Mq的作用 总结一下:

1、应用解耦;

2、流量削峰

3、数据分发

Mq有哪些缺点?

1、如果Mq宕机,你整个业务逻辑就无法处理了,这是后续必须解决的地方。

2、以前一个代码就实现同步操作,现在先同步到Mq,再从mq获取,逻辑变的复杂了,而且我怎么保证,你Mq里面是否丢失数据,是否重复给我发同样的消息呢?我的业务都是顺序消费,你怎么保证呢?

3、我如何保证A,B,C系统都成功处理完消息呢?

总结一下Mq的缺点:

1、系统可用性降低;

2、系统复杂度提高;

3、一致性问题。

Mq产品进行比较:

特性ActiveMqRabbitMQRocketMQKafka
开发语言javaerlangjavascala
单机吞吐量万级万级10万级10万级
时效性msusmsms
可用性非常高非常高
功能特性成熟产品,有较多文档,各种协议支持较好基于erlang开发,并发能力强mq功能比较全,扩展性强大数据领域应用广

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值