RocketMQ - 生产者最佳实践总结

rocketmq,生产者,最佳,实践,总结 · 浏览次数 : 84

小编点评

**相对消费者而言,生产者的使用更加简单,一般关注消息类型、消息发送方法和发送参数。** **普通消息** (并发消息性能最好):单机发送TPS万级别单点问题。 **分区有序消息**:单分区中消息有序,单机发送TPS千级别单点问题。 **全局有序消息**:所有消息有序,如果Broker宕机,则会导致发送失败极少场景使用延迟消息RocketMO自身支持,无需额外使用组件,支持延迟特性。 **事务消息**:生产者事务,只有生产者参与,如果消费者处理失败则事务失效简单事务处理可以使用常用的发送方法发送方法优点缺 点备注send(Message msg):同步发送最可靠性能最低适用于高可靠场景。 **异步发送**:可靠,性能最高如果发送失败,就需要考虑如何降级大部分业务场景send(Message msg,MessageQueue mq)。 **单向发送**:使用最方便消息有丢失风险适用于对消息丢失不敏感的场景。

正文

相对消费者而言,生产者的使用更加简单,一般关注消息类型、消息发送方法和发送参数,即可正常使用RocketMQ发送消息

常用消息类型

消息类型 优点 缺 点 备注
普通消息(并发消息) 性能最好。单机TPS的级别为100 000 消息的生产和消费都无序 大部分场景适用
分区有序消息 单分区中消息有序,单机发送TPS万级别 单点问题。如果Broker宕机,则会导致发送失败 大部分有序消息场景适用
全局有序消息 类似传统的 Queue,全部消息有序,单机发送TPS千级别 单点问题。如果Broker宕机,则会导致发送失败 极少场景使用
延迟消息 RocketMO自身支持,不需要额外使用组件,支持延迟特性 不能根据任意时间延迟,使用范围受限。Broker 随着延迟级别增大支持越多,CPU压力越大,延迟时间不准确 非精确、延迟级别不多的场景,非常方便使用
事务消息 RocketMO自身支持,不需要额外使用组建支持事务特性 RocketMO事务是生产者事务,只有生产者参与,如果消费者处理失败则事务失效 简单事务处理可以使用

常用的发送方法

发送方法 优点 缺 点 备注
send(Message msg)
同步发送
最可靠 性能最低 适用于高可靠场景
send(SendCallback sendCallback)
异步发送
可靠,性能最高 如果发送失败,就需要考虑如何降级 大部分业务场景
send(Message msg,MessageQueue mq)
指定队列发送
可以发送顺序消息 单点故障后不可用 适用于顺序消息
send(Message msg,MessageQueueSelectorselector, Object arg)
执行队列发送
队列选择方法最灵活 比较低级的接口,使用有门槛 特殊场景
sendOneway(Message msg)
单向发送
使用最方便 消息有丢失风险 适用于对消息丢失不敏感的场景
send(Collection msgs)
批量发送
效率最高 发送失败后降级比较困难 适用于特殊场景

常用参数

参数名 含义 备注
producerGroup 生产者组 必须传入的参数
compressMsgBodyOverHowmuch 消息体数量超过该值则压缩消息
instanceName 生产者实例名
maxMessageSize 消息体的最大值 默认为4MB,也可以单独设置
retryTimesWhenSendAsyncFailed 异步发送失败的重试次数
retryTimesWhenSendFailed 同步发送失败的重试次数
sendMsgTimeout 发送超时时间 网络层的超时时间

《RocketMQ分布式消息中间件:核心原理与最佳实践_李伟 (作者) _电子工业出版社 (2020年7月1日)》

与RocketMQ - 生产者最佳实践总结相似的内容:

RocketMQ - 生产者最佳实践总结

相对消费者而言,生产者的使用更加简单,一般关注消息类型、消息发送方法和发送参数,即可正常使用RocketMQ发送消息 常用消息类型 | 消息类型 | 优点 | 缺 点 | 备注 | | | | | | | 普通消息(并发消息) | 性能最好。单机TPS的级别为100 000 | 消息的生产和消费都无

RocketMQ - 生产者原理

https://rocketmq.apache.org/ Apache RocketMQ是一款开源的、分布式的消息投递与流数据平台。出生自阿里巴巴,在阿里巴巴内部经历了3个版本后,作为Apache 顶级开源项目之一直到现在。在GitHub上有10000+star、5000+fork、170+cont

RocketMQ - 生产者启动流程

生产者启动流程 DefaultMQProducer是RocketMQ中默认的生产者实现 核心属性: namesrvAddr: 继承自 ClientConfig,表示 RocketMQ 集群的Namesrv 地址,如果是多个则用分号分开。比如:127.0.0.1:9876;127.0.0.2:9876

RocketMQ - 生产者消息发送流程

RocketMQ客户端的消息发送通常分为以下3层 业务层:通常指直接调用RocketMQ Client发送API的业务代码。 消息处理层:指RocketMQ Client获取业务发送的消息对象后,一系列的参数检查、消息发送准备、参数包装等操作。 通信层:指RocketMQ基于Netty封装的一个RP

【RocketMQ】RocketMQ存储结构设计

CommitLog 生产者向Broker发送的消息,会以顺序写的方式,写入CommitLog文件,CommitLog文件的根目录由配置参数storePathRootDir决定,默认每一个CommitLog的文件大小为1G,如果文件写满会新建一个CommitLog文件,以该文件中第一条消息的偏移量为文

【RocketMQ】消息的存储

当Broker收到生产者的消息发送请求时,会对请求进行处理,从请求中解析发送的消息数据,接下来以单个消息的接收为例,看一下消息的接收过程。 数据校验 封装消息 首先Broker会创建一个MessageExtBrokerInner对象封装从请求中解析到的消息数据,它会将Topic信息、队列ID、消息内

【RocketMQ】消息的拉取总结

在上一讲中,介绍了消息的存储,生产者向Broker发送消息之后,数据会写入到CommitLog中,这一讲,就来看一下消费者是如何从Broker拉取消息的。 RocketMQ消息的消费以组为单位,有两种消费模式: 广播模式:同一个消息队列可以分配给组内的每个消费者,每条消息可以被组内的消费者进行消费。

【RocketMQ】【源码】顺序消息实现原理

**全局有序** 在RocketMQ中,如果使消息全局有序,可以为Topic设置一个消息队列,使用一个生产者单线程发送数据,消费者端也使用单线程进行消费,从而保证消息的全局有序,但是这种方式效率低,一般不使用。 ![](https://img2022.cnblogs.com/blog/2612945

【RocketMQ】顺序消息实现总结

全局有序 在RocketMQ中,如果使消息全局有序,可以为Topic设置一个消息队列,使用一个生产者单线程发送数据,消费者端也使用单线程进行消费,从而保证消息的全局有序,但是这种方式效率低,一般不使用。 局部有序 假设一个Topic分配了两个消息队列,生产者在发送消息的时候,可以对消息设置一个路由I

[转帖]RocketMQ - nameSrv和Broker

RocketMQ RocketMQ是一个统一的消息传递引擎,轻量级的数据处理平台。 Name Server Name Server充当路由消息的提供者,生产者(Producer)或消费者(Customer)可以通过Name Server查找各主题对应的Broker IP列表,多个Name Serve