RocketMQ(二):生产者API核心使用

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底层通信框架解析

  • 图解
    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