消息发送5-总结|学习笔记

简介: 快速学习消息发送5-总结

开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段)消息发送5-总结】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/704/detail/12475


消息发送5-总结


整个消息发送的主要方法,就是在DefaultMQProducerImpl 这个里面进行一个处理。

image.png最终会走到sendDefaultmpl(msg.sync.null.time.out)方法里。这里用了默认的时间是三秒钟,在发送信息的时候,先去校验消息的合法性。包括消息的程度等等,如果消息合法,它就开始发消息。

在发送过程中首先先去查找路由信息,通过TrytoFindTopicPublishinfo去发送,再去查找路由。

怎么查找路由?在客户端的本地缓存了一个topic publish路由的信息,它先从本地查,如果本地查出来了,那就直接使用本地的路由去发送。

如果本地没有路由怎么办?它就去通过MQclient instance去请求name server,通过name server查找当前topic所对应的路由信息,这一步是去查找路由。

路由查找出来之后,就要开始发送消息,最终消息是要发送到message queen这个消息队列当中。

发送的消息对列里rocket M Q做了一个故障延迟机制的处理,如果打开了故障延迟的机制,那么它在再去发送信息的时候先根据当前这个message queen,维护了一个索引,通过这个索引对message queen进行一个取模,取出message queen,取出来之后进行校验。

image.png如果它是可用的,那就直接返回,如果是不可用的,从它之前所发送过的故障表当中取出一个相对比较好的信息再去发送它。

如果这里面没有打开故障延迟机制,那就直接使用它。所以对这个message queen进行一个取模,直接返回。

第三步就是选择这个消息队列。选择了这个消息对列之后,接下来就要发送,在发送时,首先获取broker的网络地址,对message进行I D的设置,判断一下当前这个消息是否要去压缩,再去判断是否有发送之前的增强逻辑,如果有就把这个增强逻辑,其实就是一个钩子方法,将它进行执行。

整个都完成了之后,去封装请求包,通过MQclient的实力向外发送消息。

image.png整个消息的发送流程为以下四步:

1. 验证消息

2. 查找路由

3. 选择队列

4. 发送消息

5.

相关文章
|
3月前
|
消息中间件 缓存 API
RocketMQ - 生产者消息发送流程
RocketMQ - 生产者消息发送流程
67 0
|
4月前
|
消息中间件 API RocketMQ
消息队列 MQ使用问题之消息在没有消费者的情况下丢失,该如何解决
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 Java
【消息队列开发】 实现消费者订阅消息
【消息队列开发】 实现消费者订阅消息
|
消息中间件 Java Spring
【消息中间件】异常和死信消息们的浪浪山 1
【消息中间件】异常和死信消息们的浪浪山
|
消息中间件 Java 测试技术
【消息中间件】异常和死信消息们的浪浪山 2
【消息中间件】异常和死信消息们的浪浪山
|
消息中间件 Docker 容器
【消息中间件】异常和死信消息们的浪浪山 3
【消息中间件】异常和死信消息们的浪浪山
|
消息中间件 存储 运维
【视频】普通消息 | 学习笔记
快速学习【视频】普通消息
496 0
【视频】普通消息 | 学习笔记
|
消息中间件 RocketMQ 开发者
消息发送4发送消息|学习笔记
快速学习消息发送4发送消息
消息发送4发送消息|学习笔记
|
消息中间件 存储 中间件
|
消息中间件 缓存 负载均衡
消息发送3-选择队列|学习笔记
快速学习消息发送3-选择队列
消息发送3-选择队列|学习笔记
下一篇
无影云桌面