RocketMq架构以及基本使用

1.为什么要使用mq

在现在分布式架构下,可能很多朋友都会遇到如下问题,我们现在以我们是一个订单服务举例:


1.解耦

订单服务在创建订单成功过后,会通知库存服务扣减库存,发放优惠券,调用第三方物流服务发货等一系列操作,如果采用同步的方式,可能导致接口时延特别高。如果引入mq,可以订单服务执行完自身操作过后,然后将消息以mq的形式通知给第三方服务,完成了服务间的解耦,提高系统的吞吐量。

2.异步通信

比如大数据团队,可能需要根据订单信息去做报表。可以通过监听binlog的方式,通过mq传递给大数据团队。实现了不同团队之间的异步通信。

3.削峰填谷

比如秒杀场景,如果不引入消息中间件,可能让请求压力直接给到数据库。引入mq后,先将请求发送到mq中,然后再慢慢消费,入库,降低了数据库的压力。

2.rocketmq的架构


rocketmq的架构如图所。

2.1 生产者组

是由多个生产者组组成,向broker中发送消息。

2.2 消费者组

也是由业务方多个消费者组成,完成对broker中的业务进行消费。

3.3 NameServer集群

注册中心,类似于zookper,消费者和生产者会与NameServer建立长连接,当需要推送或者消费消息的时候,会从NameServer获取到路由信息。NameServer是一个集群,但是不同的机器之间并不保持联系。同时Broker会将自身信息存储到NameServer上面,并且建立30秒钟的心跳,当NameServer超过120秒没有收到broker的心跳连接后,便会剔除该broker。

3.4 topic

topic是一个逻辑概念,表示不同类型的消息,比如订单系统发送的消息放到orderTopic里面,支付系统发送的topic放在payTopic里面。

3.5 messageQueue

messageQueue是真正存储消息的地方,其实在rocketMq里面,消息是顺序存储到不同文本文件里面的,这些文本文件就是commitLog,并且在存储的时候,会针对里面不同的topic建立不同的索引,这些索引就是consumeQueue,所以消费者在消费的时候,是根据consumeQueue获取到自己在commitLog中的索引位置,然后找到真正需要消费的数据,所以这里consumeQueue其实就是messageQueue。

3.6 broker

broker是存储消息的机器,为了增加吞吐量,所以一般会以集群的方式部署broker,比如部署一个包含broker1,broker2的集群,然后把topicA的一部分数据存储到broker1上,一部分存储到broker2上面,这样消费的时候,就可以在broker1和broker2并行消费。但是这样有个问题,就是某个broker崩溃,会导致部分数据丢失,于是给每个broker以主从方式部署。当主broker挂了,从broker可以替代主broker,这里选取哪个broker作为新主,并且如何进行主动同步,其实是用deledger技术实现的,用的是分布式算法中的raft协议,这个后面会详细讲解。

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值