RocketMQ(4.8.0)——生产者最佳实践总结

RocketMQ(4.8.0)——生产者最佳实践总结

  相对消费者而言,生产者的使用更加简单,一般主要关注消息类型、消息发送方法和发送参数,即可正常使用RocketMQ发送消息。在实际使用时如何选择消息类型和消费发送方法呢?

  常用的消息类型如下:

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

  常用的发送方法如下:

发送方法 优点 缺点 备注

send(Message msg)

同步发送

最可靠 性能最低 适用于高可用场景

send(SendCallback sendCallback)

异步发送

可靠,性能最高 如果发送失败,就需要考虑如何降级 大部分业务场景

send(Message msg, MessageQueue mq)

指定队列发送

可以发送顺序消息 单点故障不可用 适用于顺序消息

send(Message msg, MessageQueueSelector selector, Object arg)

执行队列发送

队列选择方法最灵活 比较低级的接口,使用有门槛

特殊场景

sendOneway(Message msg)

单向发送

使用最方便 消息有丢失风险

适用于对消息丢失不敏感的场景

send(Collection<Message>msg)

批量发送

效率最高 发送失败后降级比较困难

适用于特殊场景

   常用参数如下:

参数名 含义 备注
producerGroup 生产者组 必须传入的参数
compressMsgBodyOverHowmuch 消息体数量超过该值则压缩消息  
instanceName 生产者实例名  
maxMessageSize 消息体的最大值 默认为4MB,也可以单独设置
retryTimesWhenSendAsyncFailed 异步发送失败的重试次数  
retryTimesWhenSendFailed 同步发送失败的重试次数  
sendMsgTimeout 发送超时时间 网络层的超时时间
posted @ 2021-02-18 11:06  左扬  阅读(217)  评论(0编辑  收藏  举报
levels of contents