RocketMQ(二):生产者API核心使用
其他
2021-03-20 16:22:00
阅读次数: 0
RocketMQ生产者-核心参数详解
producerGroup
:组名,需要在一个应用里面是唯一的。
createTopicKey
:通过生产者创建topic,但是一般不会由生产者去生产,一般会由架构组成员去维护。
defaultTopicQueueNums
:默认为4,一个topic下默认管理4个队列。
setMsgTimeout
:单位毫秒,设置消息发送的超时时间
compressMsgBodyOverHowmuch
:默认压缩字节4096,消息自动压缩机制,有利于网络传输,减小带宽等。
retryTimesWhenSendFailed
:当消息发送失败可以设置重发,同步重发策略,还有一种异步的重发策略。
retryAnotherBrokerWhenNotStoreOK
:默认false
maxMessageSize
:最大的消息限制,如果消息超过这个设置会抛异常,默认128K。
主从同步机制分析
- Master-Slave主从同步
- 同步消息:数据内容 + 元数据信息,元数据信息是定时任务同步的,而数据内容是实时同步的。
- 元数据同步:Broker会对角色识别,如果为Slave,则启动同步任务。
- 消息同步:代码都在store模块,HAService、HAconnection、WaitNotfiyObject,这三个类主要对CommitLog进行一个同步。
RocketMQ同步消息发送
- 消息的同步发送:
producer.send(msg)
- 同步发送消息核心实现:
DefaultMQProducerImpl
RocketMQ异步消息发送
producer.send(Message msg, SendCallback sendCallback)
- 异步发送消息核心实现:
DefaultMQProducerImpl
Netty底层通信框架解析
- 图解
- RocketMQ消息数据分布图解
- 消息长度:表示消息总长度,占用4个字节int类型长度
- 序列化类型和头部长度:序列化类型(JSON或者其他等),头部长度,占用4个字节int类型长度
- 消息头数据:经过序列化以后的消息头数据
- 消息主数据:二进制数据
RocketMQ生产者-消息返回状态(SendStatus)详解
- SEND_OK:消息发送成功
- FLUSH_DISK_TIMEOUT:消息发送成功,但是服务器进行数据刷盘的时候超时了,会造成数据丢失
- FLUSH_SLAVE_TIMEOUT:主从同步的时候,同步到SLAVE超时,会造成数据丢失
- SLAVE_NOT_AVAILABLE:SLAVE不可用,消息进入到了服务器队列,会造成数据丢失
RocketMQ生产者-延迟消息
延迟消息
:消息发送到Broker后,要特定的时间才会被Consumer消费
- 目前RocketMQ
只支持固定精度的延迟
MssageStoreConfig
配置类 & ScheduleMessageService
任务类
- 在Message上设置:
setDelayTimeLevel
方法设置
RocketMQ生产者-自定义消息发送规则
- 如何把消息发送到指定的队列(
Message Queue
)?
MessageQueueSelector
:一个Topic会有多个Msg Queue,如果设置的话默认是4个,生产者会轮流给四个Queue发消息,这是负载均衡的机制
producer.send(Msg, Selector, Obj)
:如果不经过特定的设置,想把某条消息发到特定队列是不可能的,除非做一个指定的规则,这就需要这个方法了,发送消息的时候指定一个Selector,用于选择指定一个队列,Obj可以根据队列名称做一个匹配
转载自blog.csdn.net/qq_36221788/article/details/109145330