生产者核心类介绍|学习笔记

简介: 快速学习生产者核心类介绍

开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段)生产者核心类介绍】学习笔记,与课程紧密联系,让用户快速学习知识。

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


生产者核心类介绍

 

Producer

相对于RocketMQ来讲,消息生产者就是客户端,也是消息的提供者。Producer将消息发送到broker,broker是消息的服务端,customer再去连接broker消费消息,故producer和customer都是RocketMQ的客户端。

image.png打开原码目录(如上图),里面有一个client,消息生产者的代码都在client模块中。我们主要研究如下图的几个类:MQAdmin、MQProducer、ClientConfig和DefautMQProducer

image.png

MQAdmin是接口,MQProducer是MQAdmin的子接口,DefautMQProducer实现了MQProduce和MQAdmin里面的一些方法,配置是在ClientConfig里。

1.方法和属性

(1)主要方法介绍

①MQAdmin

//创建主题

void createTopic(final string key,final string newTopic,final int queueNum) throwsMQclientException;

//根据时间戳从队列中查找消息偏移量

1ong searchoffset(final MessageQueue mq,final long timestamp)

//查找消息队列中最大的偏移量

long maxoffset (final MessageQueue mq) throws MQclientException;

//查找消息队列中最小的偏移量

1ong minoffset(final MessageQueue mq)

//根据偏移量查找消息

MessageExt viewMessage(final string offsetMsgId)throws RemotingException,MQBrokerException,

InterruptedException,MQclientException;

//根据条件查找消息

QueryResult queryMessage(final string topic,final string key,final int  maxNum,final long begin,

final long end) throws MQclientException,InterruptedException;

查找消息给的条件比较丰富,所以认为是根据条件查找消息,可以传入主题topic,业务key,maxNum,当前的偏移量begin起始偏移量end终止偏移量等。

//根据消息ID和主题查找消息

MessageExt viewMessage(string topic,string msgId) throws RemotingException,MQBrokerException,InterruptedException,MQclientException;

②MQProducer

MQProducer大部分是以send开头,指得都是发送消息的意思。

//启动

void start( throws MQclientException;

//关闭

void shutdown();

//查找该主题下所有消息

List<MessageQueue> fetchpublishMessageQueues(final string topic) throws MoclientException;

//同步发送消息

sendResult send(final Message msg) throws MQclientException,RemotingException,MQB rokerException,

InterruptedException;

//同步超时发送消息

sendResult send(final Message msg,fina7 long timeout)throws Moc7ientException,

RemotingException,MQBrokerException,InterruptedException;

以上两个send的区别是:同时发送消息是一个参数,如果当前一直未得到broker的响应就会一直阻塞;另一个是两个参数,只会阻塞设置的timeout时间。

//异步发送消息(send没有返回值是异步发送)

void send(final Message msg,fina1 sendcallback sendcallback) throws MaclientException,

RemotingException, InterruptedException;

//异步超时发送消息

void send(final Message msg,final sendcallback sendcallback,final long timeout)

throws MQclientException,RemotingException,InterruptedException;

对于异步发送消息会传递一个回调函数,这个回调函数是用来接收消息发送结果。异步发送最大特点是调用send方法之后立即返回,通过回调函数接收发送结果。

//发送单向消息

void sendoneway(final Message msg) throws MQclientException,RemotingException,

InterruptedException;

//选择指定队列同步发送消息

sendResult send(final Message msg,final MessageQueue mq) throws MQclientException,

RemotingException,MQBrokerException,InterruptedException;

Message msg,MessageQueue mq意思为在发送消息时可以给指定队列发送,send方法有返回值,所以就是同步的给指定队列发送消息。

//选择指定队列异步发送消息

void send(final Message msg,fina1 MessageQueue mq,final sendcallback sendcallback)

throws MaclientException,RemotingException,InterruptedException;

//选择指定队列单项发送消息

void sendoneway(final Message msg,final MessageQueue mq) throws MoclientException,

RemotingException,MQBrokerException,InterruptedException;

//选择指定队列异步发送消息

void send(final Message msg,final MessageQueue mq,final sendcallback sendcallback)

throws MQclientException,RemotingException,InterruptedException;

//选择指定队列单项发送消息

void sendoneway(final Message msg,final MessageQueue mq) throws MQclientException,

RemotingException,InterruptedException;

//批量发送消息

sendResult send(final co1lection<Message> msgs) throws MQclientException,

RemotingException,MQBrokerException, InterruptedException;

传递的不是一个msgs,而是msgs的集合co1lection,而是一次发送多个消息,也就是发送批量消息。

以上方法在MQProducer接口已经被定义出,DefautMQProducer对MQProducer进行了实现。

(2)属性介绍

DefautMQProduce的位置如下图:

image.png

DefautMQProducer属性介绍:producerGroup:生产者所属组

createTopicKey:默认Topic

defaultTopicQueueNums:默认主题在每一个Broker队列数量

sendMsgTimeout:发送消息默认超时时间,默认3s

compressMsgBodyoverHowmuch:消息体超过该值则启用压缩,默认4k

retryTimeswhensendFailed:同步方式发送消息重试次数,默认为2,总共执行3次

retryTimeswhensendAsyncFailed:异步方法发送消息重试次数,默认为2

retryAnotherBrokerwhenNotstoreOK:消息重试时选择另外一个Broker时,是否不等待存储结果就返回,默认为false

maxMessagesize:允许发送的最大消息长度,默认为4M。在发送批量消息时,消息长度也不能超过4M。

相关文章
|
Unix Linux vr&ar
【详解】静态库和动态库的认识和使用【Linux】
【详解】静态库和动态库的认识和使用【Linux】
291 0
|
Shell Windows
Webstorm安装激活破解2022.09最新破解教程「永久激活,亲测有效」
Webstorm安装激活破解2022.09最新破解教程「永久激活,亲测有效」
8255 0
Webstorm安装激活破解2022.09最新破解教程「永久激活,亲测有效」
|
11月前
|
消息中间件 存储 算法
RocketMQ核心知识点整理,收藏再看!
RocketMQ核心知识点整理,收藏再看!
916 0
RocketMQ核心知识点整理,收藏再看!
|
11月前
|
JSON 自然语言处理 数据格式
Tauri 开发实践 — Tauri 自定义多语言菜单开发
本文介绍了如何在 Tauri 应用中实现自定义菜单并支持多语言。首先,通过 `Translator` 类加载和解析多语言 JSON 文件,实现简单的翻译功能。接着,创建包含文件、编辑和窗口子菜单的基本菜单结构,并根据当前语言进行翻译。最后,在主函数中读取语言设置,创建菜单并处理菜单事件,确保应用的国际化和用户体验。源码可在 GitHub 上查看。
438 2
|
6月前
|
存储 开发工具 开发者
揭秘 Microsoft.Docker.SDK:让容器开发更轻松的强大工具揭秘
随着云计算和容器技术的快速发展,`Docker` 已经成为容器化技术的事实标准。`Microsoft` 作为 `Docker` 的主要支持者和参与者,推出了 `Microsoft.Docker.SDK`,旨在帮助开发者更轻松地进行容器开发。本文将深入揭秘 Microsoft.Docker.SDK 的功能、使用方法以及它在容器开发中的应用。
170 12
|
9月前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品消费需求预测的深度学习模型
使用Python实现智能食品消费需求预测的深度学习模型
237 10
|
前端开发 Java Maven
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
1809 0
Windows Server 各版本搭建 Web 服务器实现访问本地 Web 网站(03~19)
Windows Server 各版本搭建 Web 服务器实现访问本地 Web 网站(03~19)
|
数据可视化 PyTorch 算法框架/工具
单目3D目标检测——MonoDLE 模型训练 | 模型推理
本文分享 MonoDLE 的模型训练、模型推理、可视化3D检测结果。
329 0
|
存储 分布式计算 安全
笔记:云计算原理及特点
云计算原理及特点
1213 0