RocketMQ学习

说到RocketMQ,就要先说到MQ,mq是消息队列的意思,即存放消息的队列,是中间件的一种,个人理解为生产者消费者模式的具体实现。

消息队列优点

1:解耦,过程为将生产者产生的消息投入mq中,之后就可以不用管它,之后消费者会在消息队列中取相关的信息,做相关的操作,而不是之前的生产之后直接投入消费之中。

解除两者之间的强依赖,在某一方出现问题时,系统能够继续工作,比如消费方失效一段时间,消息会再队列中累积,等到服务恢复之后,继续的消费

2.异步:消息队列是异步的处理,在生产方将消息放入消息队列之后,可以立即返回。因为生产方之前有的是操作数据库部分的,所以时间上可能比较慢一点。用了消息队列之后,

可以给用户相应,但是不能返回成功,需要改变业务流程,因为在写入数据库等的过程中可能会失败,所以在落库之后再通过短信等方式通知用户,比如像订票等操作。

3:削峰:在比如电商大促,秒杀等环节中,可能出现请求过多,可能超过数据库的承受能力,在有消息队列的系统中,就可以将消息暂时积压在消息队列中,按照数据库能承受的程度

去拉取消费消息,

消息队列缺点:

1:系统可用性减低,增加消息队列之后,消息队列挂掉会影响系统,增加不稳定性

2:系统复杂性提高,需要解决消息重复消费,消息的可靠性传输等问题

 

RocketMQ

基础架构

 

它由四个部分组成:name servers, brokers, producers 和 consumers,都可扩展成集群,避免单点出错。

 

名称服集群务 NameServer cluster

是注册中心,每个节点独立,没有交互,没有主从之分。存储的是活跃的Broker列表,活跃的定义是和NameServer保持心跳

 

代理服务集群 Broker Cluster

Broker提供消息存储的容器。它们支持Push和Pull模型,分为·master和slave。每个Broker和NameServer集群的所有节点建立长连接,注册Topic信息到所有NameServer

 

生产者集群 Producer Cluster

produce支持分布式部署,分布式的produce通过broker集群提供的各种负载均衡策略将消息发送到broker集群中。发送过程支持快速失败是低延迟的。

 

消费者集群 Consumer Cluster

消费者也支持在推送和者拉取模式下分布式部署,它还支持集群消费和消息广播。提供实时的消息订阅机制,能够满足大多数消费者的需求。

基本概念:

 

Message

就是其中的消息,唯一的标识码是messageId,发送的时候可以设置messageKey,之后可以按这个查询和跟踪消息。

Topic

topic用于将消息按主题做划分,producer将消息发往指定的topic,consumer订阅该topic就可以收到这条消息。Topic跟发送方和消费方都没有强关联关系,发送方可以同时往多个topic投放消息,消费方也可以订阅多个topic的消息。在RocketMQ中,topic是一个逻辑上的概念。消息存储不会按topic分开。

Queue

topic和queue是1对多的关系,一个Topic下可以包含多个Queue,主要用于负载均衡。发送消息时,用户只指定topic,producer会根据topic的路由信息选择具体发到哪个Queue上。consumer订阅消息时,会根据负载均衡策略决定订阅哪些queue的消息。

Offset

RocketMQ在存储消息时会为每个topic下的每个Queue生成一个消息的索引文件,每个queue都对应一个offset记录当前queue中消息条数。

源码学习

暂时学习了发送消息相关的代码

 

点进其中的send代码

 

 

看了其中代码,核心是在sendKernelImpl中调用了MQClientAPIImpl类的sendMessage(),如下图。在其中又会根据类型的不同选择不同的执行方式,为了不影响性能,会使用异步发送

 

 

在此方法中调用了通信层RemotingClient接口(实现类是NettyRemotingClient)的invokeAsync方法。      在方法中写入通道,并添加结果返回监听

 

 

 

写入通道后,就等待Netty的Selector轮询出来,调用后续broker处理任务。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值