rocketMq-producer介绍

简介: producer介绍producer在rocketMq扮演的角色是消息的发送过程,其实宏观上来讲其实就包括两大块,分别是消息的发送以及一堆定时任务。producer在发送消息过程中涉及到发送队列的选择(topic、broker、queue),所以只要在整个发送过程中理清楚这几者之间的关系,就能理解整个发送过程,当然其中包括 非严格顺序消息、顺序消息、事务消息。

producer介绍

producer在rocketMq扮演的角色是消息的发送过程,其实宏观上来讲其实就包括两大块,分别是消息的发送以及一堆定时任务。

producer在发送消息过程中涉及到发送队列的选择(topic、broker、queue),所以只要在整个发送过程中理清楚这几者之间的关系,就能理解整个发送过程,当然其中包括 非严格顺序消息、顺序消息、事务消息。这里只讲非顺序消息、顺序消息,不包括事务消息。

producer的发送过程


img_706a8e1ef58286d472f57877ac8813a6.png
rocketMq发送时序图


img_7017bb907f62d3183b0fe803dddd8086.png
rocketMq发送消息活动图


img_89e7db2d032f05b908c46daa3100e160.png
rocketMq发送消息过程

说明:

    核心逻辑参见DefaultMQProducerImpl类

    rocketMq发送消息过程由以下组成:组装消息&获取topicPubInfo&选择队列&发送消息。

    组装消息:发送消息的组装,包括设置topic&tag&延时&是否有序等等。

    生成topicPublishInfo:定期或按需从namesrv同步该topic的broker信息

    选择队列:从topicPubishInfo中按照轮询(roundrobin)选取队列,i++%(队列长度),顺序消息根据自定义的selector按照固定的key进行hash选择同一个队列

    发送消息:同步/异常方式发现on个消息给broker


生成TopicPublishInfo过程

img_2ce348b86f5b4cfaecef6b589792f581.png
TopicPublishInfo生成逻辑
img_072dbd5fb23619697f573c2676eca52b.png
TopicPublishInfo生成代码

说明:

    参见MQClientInstance类

    图片备注中已经写明了MessageQueue的生成过程


SelectOneMessageQueue过程

img_d41199b70fbcb86ca5bde4ced1ed269c.png
选择MessageQueue逻辑


img_5449688f915999cc3c1dbeaf3b306756.png
选择MessageQueue逻辑


producer的定时任务

img_726738339715fd6916373077f03bf29c.png
producer的定时任务

说明:

    关键是前3个定时任务,后面两个一般是consumer端会使用,这个类是公用的。


producer的初始化过程

img_7804936828fdeb059cb32bbe28ef4d9c.png
producer初始化过程I
img_d425f988f461f982a65a38beb4345c6a.png
producer初始化过程II

说明:

    参见DefaultMQProducerImpl类,具体的功能在上图中已备注。


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
5月前
|
消息中间件 Java 大数据
RocketMQ
【8月更文挑战第29天】RocketMQ
84 15
|
6月前
|
消息中间件 存储 Java
【RocketMQ系列一】初识RocketMQ
【RocketMQ系列一】初识RocketMQ
57 1
|
6月前
|
消息中间件 Java RocketMQ
【RocketMQ系列九】SpringCloudStream整合RocketMQ
【RocketMQ系列九】SpringCloudStream整合RocketMQ
454 1
|
7月前
|
消息中间件 Java Kafka
你了解RabbitMQ、RocketMQ 和 Kafka吗?
【6月更文挑战第26天】比较了RabbitMQ、RocketMQ和Kafka三种消息队列:RabbitMQ灵活,支持多种协议,适合中小型应用;RocketMQ高性能,适用于大规模消息处理;Kafka则以高吞吐量和流处理见长。RabbitMQ和Kafka生态丰富,而RocketMQ运维相对复杂。选择时考虑性能、灵活性、生态系统和易用性,以及特定场景如大数据流处理或分布式系统组件通信。
110 1
|
8月前
|
消息中间件 存储 Cloud Native
RocketMQ的初步认识
RocketMQ的初步认识
64 0
|
消息中间件 存储 缓存
RocketMQ 生产者那些事
这篇文章,我们从源码的角度探寻 RocketMQ Producer 的实现机制。
RocketMQ 生产者那些事
|
消息中间件 存储 JSON
RocketMQ使用总结
RocketMQ使用总结
196 0
|
消息中间件 存储 Kafka
RabbitMQ、Kafka和RocketMQ比较
RabbitMQ、Kafka和RocketMQ比较
686 0
|
消息中间件 数据可视化 API
RocketMQ极简入门-RocketMQ普通消息发送
RocketMQ已经写了两章了,一章是RocketMQ认识和安装,一章是RocketMQ的工作流程和核心概念,本章我们开始使用RocketMQ来发送和接收消息。RocketMQ的消息种类非常多,比如:普通消息,顺序消息,延迟消息,批量发送,消息过滤等等。本篇文章来探讨一下 普通消息的发送
242 1
|
消息中间件 RocketMQ
对于RocketMQ的不同场景
对于RocketMQ的不同场景
94 2